数值分析第二章上机

发布 2022-07-14 18:51:28 阅读 3396

用列主元消元法解线性方程组ax=b的matlab程序。

function[ra,rb,n,x]=liezhu(a,b)

b=[a b];n=length(b);ra=rank(a);

rb=rank(b);zhica=rb-ra;

if zhica>0,disp('请注意:因为ra~=rb,所以此方程组无解。')

return

endif ra==rb

if ra==n

disp('请注意:因为ra=rb=n,所以此方程组有唯一解。')

x=zeros(n,1); c=zeros(1,n+1);

for p= 1:n-1

y,j]=max(abs(b(p:n,p)))c=b(p,:)

b(p,:)b(j+p-1,:)b(j+p-1,:)c;

for k=p+1:n

m=b(k,p)/b(p,p);

b(k,p:n+1)=b(k,p:n+1)-m*b(p,p:n+1);

endend

b=b(1:n,n+1);a=b(1:n,1:n);x(n)=b(n)/a(n,n);

for q=n-1:-1:1

x(q)=(b(q)-sum(a(q,q+1:n)*x(q+1:n)))a(q,q);

endelse

disp('请注意:因为ra=rb end

end习题3.3

3.在matlab工作窗口输入程序。

> a=[1 1 1;1 3 9;1 7 49];b=[6;5;2];[ra,rb,n,x]=liezhu(a,b)

运行后输出结果。

请注意:因为ra=rb=n,所以此方程组有唯一解。

ra = 3

rb = 3

n = 3x = 6.3750

将矩阵a进行直接lu分解的matlab程序。

function hl=zhjlu(a)

n n]=size(a);ra=rank(a);

if ra~=n

disp('请注意:因为a的n阶行列式hl等于零,所以a不能进行lu分解。a的秩ra如下:')ra,hl=det(a);

return

endif ra==n

for p=1:n

h(p)=det(a(1:p,1:p));

endhl=h(1:n);

for i=1:n

if h(1,i)==0

disp('请注意:因为a的r阶主子式等于零,所以a不能进行lu分解。a的秩ra和各阶顺序主子式值hl依次如下:')hl;ra

return

endend

if h(1,i)~=0

disp('请注意:因为a的各阶主子式都不等于零,所以a能进行lu分解。a的秩ra和各阶顺序主子式值hl依次如下:')

for j=1:n

u(1,j)=a(1,j);

endfor k=2:n

for i=2:n

for j=2:n

l(1,1)=1;l(i,i)=1;

if i>j

l(1,1)=1;l(2,1)=a(2,1)/u(1,1);l(i,1)=a(i,1)/u(1,1);

l(i,k)=(a(i,k)-l(i,1:k-1)*u(1:k-1,k))/u(k,k);

elseu(k,j)=a(k,j)-l(k,1:k-1)*u(1:k-1,j);

endend

endend

hl;ra,u,l

endend

习题3.41.(1) 在matlab工作窗口输入程序。

> a=[2 4 -6;1 5 3;1 3 2];hl=zhjlu(a)

运行后输出结果。

请注意:因为a的各阶主子式都不等于零,所以a能进行lu分解。a的秩ra和各阶顺序主子式值hl依次如下:

ra = 3

u =2.0000 4.0000 -6.0000

l =1.0000 0 0

hl =2 6 18

2) 在matlab工作窗口输入程序。

> a=[1 1 6;-1 2 9;1 -2 3];hl=zhjlu(a)

运行后输出结果。

请注意:因为a的各阶主子式都不等于零,所以a能进行lu分解。a的秩ra和各阶顺序主子式值hl依次如下:

ra =3u = 1.0000 1.0000 6.0000

l = 1.0000 0 0

hl = 1 3 36

用p范数讨论ax=b解和a的性态的matlab程序。

function acp=zpjwc(a,ja,b,jb,p)

acp=cond(a,p);da=det(a);x=a\b;

dertaa=a-ja;

pnda=norm(dertaa,p);dertab=b-jb;

pndb=norm(dertab,p);

if pndb>0

jx=a\jb;pnb=norm(b,p);pnjx=norm(jx,p);dertax=x-jx;

pnjdx=norm(dertax,p);jxx=pnjdx/pnjx;pnjx=norm(jx,p);

pnx=norm(x,p);jxx=pnjdx/pnjx;xx=pnjdx/pnx;

pndb=norm(dertab,p);

xab=pndb/pnb;pnbj=norm(jb,p);xabj=pndb/pnbj;

xgxx=acp*xab;

endif pnda>0

jx=ja\b;dertax=x-jx;pnx=norm(x,p);

pnjdx=norm(dertax,p);

pnjx=norm(jx,p);jxx=pnjdx/pnjx;xx=pnjdx/pnx;

pnja=norm(ja,p);pna=norm(a,p);

pnda=norm(dertaa,p);xabj=pnda/pnja;xab=pnda/pna;

xgxx=acp*xab;

endif (acp>50)&&da<0.1)

disp('请注意:ax=b是病态的,a的p条件数acp,a的行列式值da,解x,近似解jx,解的相对误差jxx,解的相对误差估计值xgxx,b或a的相对误差xab依次如下:')

acp,da,x,jx',xx',jxx',xgxx',xab',xabj'

elsedisp('请注意: ax=b是良态的,a的p条件数acp,a的行列式值da,解x,近似解jx,解的相对误差jxx,解的相对误差估计值xgxx,b或a的相对误差xab依次如下:')

acp,da,x',jx',xx',jxx',xgxx',xab',xabj'

end习题3.6

1.在matlab工作窗口输入程序。

>a=[10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10];ja=a;b=[32 23 33 31]';jb=[32.1 22.9 22.

2 30.9]';acp=zpjwc(a,ja,b,jb,1)

运行后输出结果。

请注意:ax=b是良态的,a的p条件数acp,a的行列式值da,解x,近似解jx,解的相对误差jxx,解的相对误差估计值xgxx,b或a的相对误差xab依次如下:

acp =4.4880e+03da =

ans =ans =

xx =jxx =

xgxx =

xab =

xabj =

acp =4.4880e+03

用雅可比迭代解线性方程组ax=b的matlab主程序。

function x=jacdd(a,b,x0,p,wucha,max1)

n m]=size(a);

for j=1:m

a(j)=sum(abs(a(:,j)))2*(abs(a(j,j)))

endfor i=1:n

if a(i)>=0

disp('请注意:系数矩阵a不是严格对角占优的,此雅可比迭代不一定收敛')

return

endend

if a(i)<0

disp('请注意:系数矩阵a是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛')

endfor k=1:max1

k;for j=1:m

x(j)=(b(j)-a(j,[1:j-1,j+1:m])*x0([1: j-1,j+1:m]))a(j,j);

endx;djwcx=norm(x'-x0,p); xdwcx=djwcx/(norm(x',p)+eps); x0=x';x1=a\b;

if (djwcx disp('请注意:雅可比迭代收敛,此方程组的精确解jx和近似解x如下:')

breakend

endif (djwcx>wucha)&&xdwcx>wucha)

数值分析第二章

第二章插值法。1 当时,求的二次插值多项式。解 则二次拉格朗日插值多项式为。2 给出的数值表。用线性插值及二次插值计算的近似值。解 由 知,若采用线性插值法计算即,则。若采用二次插值法计算时,3 给全的函数表,步长若函数表具有5位有效数字,研究用线性插值求近似值时的总误差界。解 求解近似值时,误差可...

数值分析第二章

列选主元lu分解法 function l,u,pv luex a luex lu factorization with partial pivoting synopsis l,u,pv luex a input a coefficient matrix output l lower triangul...

数值分析第二章作业

1.当,时,且。求的二次牛顿插值多项式 证明 2.当时,且求的牛顿插值多项式,并给出其差商型余项表达式。3.已知函数满足,求其三次牛顿插值多项式,并证明存在使得。4.已知,求的四次牛顿插值多项式,并给出其导数 假设函数的五阶导数存在 型余项表达式。5.设,为互异实数,是以其为节点的lagrange插...