第三章上机题作业。
1(p111)解:编程实现矩阵的lu分解以及回代和前代过程的函数文件程序如下:
function [a,l,u,x,x1]=ex0301(a,b)
算法3.5,用高斯消去过程进行lu分解。
n=length(a);
for k=1:n-1
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
end end
end[n,n]=size(a);
l=zeros(n,n);
u=zeros(n,n);
l(1,1)=1;
u(1,1)=a(1,1);
l(2:n,1)=a(2:n,1);
u(2:n,1)=0;
l(1,2:n)=0;
u(1,2:n)=a(1,2:n);
for i=2:n
l(i,1:i-1)=a(i,1:i-1);
u(i,1:i-1)=0;
l(i,i)=1;
u(i,i)=a(i,i);
l(i,i+1:n)=0;
u(i,i+1:n)=a(i,i+1:n);
end%算法3.2实现回代过程。
for i=n:-1:1
x(i)=b(i);
for j=n:-1:i+1
x(i)=x(i)-u(i,j)*x(j);
endx(i)=x(i)/u(i,i);
end%算法3.7实现前代过程。
for p=1:n
x1(p)=b(p);
for q=1:p-1
x1(p)=x1(p)-l(p,q)*x1(q);
endendal
uxx1输入:
a=[1,2,2;4,4,2;4,6,4]; b=[1;2;3]; ex0301(a,b)
得程序运行结果为:a =
l =u =x =x1 =
2(p111)解:用算法3.9编写部分选主元的lu分解和高斯消去法程序如下:
function [p,l,u] =ex0302(a)
算法3.9,用部分主元高斯消去法进行lu分解。
n=length(a);
p=eye(n);
for k=1:n-1
s=k;for i=k:n
if abs(a(i,k))>abs(a(s,k))
s=i;end
endif s~=k
b=a(s,1:n);
a(s,1:n)=a(k,1:n);
a(k,1:n)=b;
q=p(s,1:n);
p(s,1:n)=p(k,1:n);
p(k,1:n)=q;
endfor i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
endend
endn,n]=size(a);
l=zeros(n,n);
u=zeros(n,n);
l(1,1)=1;
u(1,1)=a(1,1);
l(2:n,1)=a(2:n,1);
u(2:n,1)=0;
l(1,2:n)=0;
u(1,2:n)=a(1,2:n);
for i=2:n
l(i,1:i-1)=a(i,1:i-1);
u(i,1:i-1)=0;
l(i,i)=1;
u(i,i)=a(i,i);
l(i,i+1:n)=0;
u(i,i+1:n)=a(i,i+1:n); endp
lu输入:a=[1,2,2;4,4,2;4,6,4];ex0302(a)
得程序运行结果为:p =
l =u =6(p111)解:编程生成hilbert矩阵的程序如下:
function h=hilbert(n)
生成hilbert矩阵h
h=zeros(n);
for i=1:n
for j=1:n
h(i,j)=1/(i+j-1);
endend
用cholesky分解算法求解方程,得到近似解的程序如下:
function x1=cholesky(n)
cholesky分解算法得近似解的值。
h=zeros(n);
for i=1:n
for j=1:n
h(i,j)=1/(i+j-1);
endend
计算n维向量b
x1=ones(n,1);
b=h*x1;
l=zeros(n);
l(1,1)=sqrt(h(1,1));
for i=2:n
l(i,1)=h(i,1)/l(1,1);
endfor j=1:n
sum1=0;
for k=1:j-1
sum1=sum1+(l(j,k))^2;
endl(j,j)=sqrt(h(j,j)-sum1);
for i=j+1:n
sum2=0;
for k=1:j-1
sum2=sum2+l(i,k)*l(j,k);
endl(i,j)=(h(i,j)-sum2)/l(j,j);
endend
执行前代过程,求解l*y=b
y=zeros(n,1
for p=1:n
y(p)=b(p);
for q=1:p-1
y(p)=y(p)-l(p,q)*y(q);
endend
%执行回代过程,求解l'*x=y
l=lx=ones(n,1);
for i=n:-1:1
x(i)=y(i);
for j=n:-1:i+1
x(i)=x(i)-l(i,j)*x(j);
endx(i)=x(i)/l(i,i);endx
计算残差和误差的无穷大范数的程序如下:
function [r,e] =fanshu(n)
计算残差和误差的无穷大范数。
x1=ones(n,1);
h=hilbert(n);
b=h*x1;
x=cholesky(n);
r=b-h*x;
e=x-x1;
r]=max(abs(r))
e]=max(abs(e))
1)n=10时,输入:[r,e] =fanshu(10),结果为:r=
e=1.4089e+013
2) 施加扰动之前,程序如下:
x1=ones(n,1);
h=hilbert(n);
b=h*x1;
x=cholesky(n);
r=b-h*x
e=x-x1
得残差和误差的结果为:
r =-0.0000 0.0552 1.5201 2.9960 2.0888
e =1.0e+013 *0.0000 -0.0003 0.0069 -0.0638 0.3075
施加扰动之后,程序如下:
x1=ones(n,1);
h=hilbert(n);
b1=h*x1;
b2=zeros(n,1);
b2(n,1)=1e-7;
b=b1+b2;
x=cholesky(n);
r=b-h*x
e=x-x1
得残差和误差的结果为:
r =-0.0000 0.0552 1.5201 2.9960 2.0888
e =1.0e+013 *0.0000 -0.0003 0.0069 -0.0638 0.3075
由程序运行结果可知,残差和误差基本上无变化。
3)n=8时,输入:[r,e] =fanshu(8),结果为:r=
e=2.7407e+009
n=12时,输入:[r,e] =fanshu(12),结果为:r=
e=5.1781e+016
通过这个实验说明n越大,残差和误差就越大,从而影响线性方程组求解问题的敏感性。
数值分析与算法作业
第七章上机题作业。1 解 由于步长h要改变,故将其设为变量,则编程实现romberg求积算法7.1的程序为 romberg 使用romberg积分算法求积分值。function i,n,err romberg fun,a,b,h,ep fun是被积函数,a,b是积分下 上限,h是步长,ep是误差精度...
算法与分析平时作业
1 给定下述二分搜索算法,请判断算法的正确性,指出错误算法的产生原因。a int binarysearch type a,const type x,int l,int r return 1 答 正确。b int binarysearch type a,const type x,int l,int r...
数值分析作业
12.求在 0,1 上的一次最佳平方逼近多项式与二次最佳平方逼近多项式。函数 function s zjpfbj n,a,b 创建一个函数,里面填入次数,和区间范围。base inline x j 1 x j 定义多项式。quan inline 1 x 权函数。a zeros n 1 y zeros...