数值分析与算法作业

发布 2023-05-20 19:31:28 阅读 3045

第三章上机题作业。

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...