数值分析报告上机实验——解线性方程组

实用文档

end

②控制台输入代码: >> a=[2 2 2 2 2]; >> b=[-1 -1 -1 -1]; >> c=[-1 -1 -1 -1]; >> f=[1;0;0;0;0]; >> x=ZG_SDJ(a,b,c,f) 3.

①改进的平方根法(文件GJPFG.m) function GJPFG(A,b)

n=length(b);% n?aáD??£? % LDL'·??a£? d(1)=A(1,1); for i=2:n

for j=1:i-1 sum1=0; for k=1:j-1

sum1=sum1+t(i,k)*l(j,k); end

t(i,j)=A(i,j)-sum1; l(i,j)=t(i,j)/d(j); end sum2=0; for k=1:i-1

sum2=sum2+t(i,k)*l(i,k); end

d(i)=A(i,i)-sum2; end

for i=1:n l(i,i)=1; end

disp('μ¥????èy?????óL?a£o'); %?a3?μ¥????èy?????óL£?l

disp('???????óD?a£o'); %?a3????????óD£?d

%óéLDL'x=b?ó?ax£?%óéLy=b£??óy£?y(1)=b(1); for i=2:n sum3=0; for k=1:i-1

%óéL'x=inv£¨D£?y£??ó?ax£?

实用文档

sum3=sum3+l(i,k)*y(k); end

y(i)=b(i)-sum3; end

x(n)=y(n)/d(n); for i=n-1:-1:1 sum4=0; for k=i+1:n

sum4=sum4+l(k,i)*x(k); end

x(i)=(y(i)/d(i))-sum4; end

disp('óéLy=b?ó?ayμ?£o'); y

disp('Ax=bμ??ax?a£o'); x

②控制台输入代码:

>> A=[2 -1 1;-1 -2 3;1 3 1]; >> b=[4;5;6]; >> GJPFG(A,b) 4.

①SOR方法(文件SOR_1.m) function SOR_1(A,b,x0,x_a,w) %x_a?a??è·?a if(w<=0 || w>=2)

error('2?êy·??§′í?ó'); return; end eps=5.0e-6;

D=diag(diag(A)); %?óAμ????????ó L=-tril(A,-1); %?óAμ???èy???ó U=-triu(A,1); %?óAμ?é?èy???ó B=inv(D-L*w)*((1-w)*D+w*U); f=w*inv((D-L*w))*b; x=B*x0+f;

n=1; %μü′ú′?êy

while norm(x_a-x)>=eps x0=x; x =B*x0+f; n=n+1; if(n>=200)

实用文档

disp('Warning: μü′ú′?êyì??à£??é?ü2?ê?á2£?'); return; end end

disp('Ax=bμ??a?a£o'); x

disp('μü′ú′?êy?a£o'); n

②控制台输入代码:

>> A=[4 -1 0;-1 4 -1;0 -1 4]; >> b=[1;4;-3]; >> x0=[0;0;0];

>> x_a=[0.5;1;-0.5]; >> w=1.03;

>> SOR_1(A,b,x0,x_a,w) >> w=1;

>> SOR_1(A,b,x0,x_a,w) >> w=1.1;

>> SOR_1(A,b,x0,x_a,w) 5.

①SOR方法(文件SOR_2.m) function SOR_2(A,b,x0,w,eps) if(w<=0 || w>=2)

error('2?êy·??§′í?ó'); return; end

D=diag(diag(A)); %?óAμ????????ó L=-tril(A,-1); %?óAμ???èy???ó U=-triu(A,1); %?óAμ?é?èy???ó B=inv(D-L*w)*((1-w)*D+w*U); f=w*inv((D-L*w))*b; x=B*x0+f;

n=1; %μü′ú′?êy

while norm(x-x0)>=eps x0=x; x =B*x0+f; n=n+1; if(n>=200)

disp('Warning: μü′ú′?êyì??à£??é?ü2?ê?á2£?'); return; end

实用文档

end

disp('Ax=bμ??a?a£o'); x

disp('μü′ú′?êy?a£o'); n

②控制台输入代码:

>> A=[5 2 1;-1 4 2;2 -3 10]; >> b=[-12;20;3]; >> x0=[0;0;0]; >> w=0.9; >> eps=10e-4;

>> SOR_2(A,b,x0,w,eps)

6.此题为证明题,无程序代码。 7.

① 雅克比迭代法(文件Jocabi.m) function x=Jocabi(n) A=hilb(n); x_a=ones(n,1); b=A*x_a; eps=1e-4;

n=length(b); N=50;

x=zeros(n,1); y=zeros(n,1);

for k=1:N sum=0; for i=1:n

y(i)=(b(i)-A(i,1:n)*x(1:n)+A(i,i)*x(i))/A(i,i); end

for i=1:n

sum=sum+(y(i)-x(i))^2; end

if sqrt(sum)

实用文档

end end

② SOR方法(文件SOR_3.m) function SOR_3(n,w) %x_a?a??è·?a if(w<=0 || w>=2)

error('2?êy·??§′í?ó'); return; end

x0=zeros(n,1); A=hilb(n); x_a=ones(n,1); b=A*x_a; eps=1e-4;

D=diag(diag(A)); %?óAμ????????ó L=-tril(A,-1); %?óAμ???èy???ó U=-triu(A,1); %?óAμ?é?èy???ó B=inv(D-L*w)*((1-w)*D+w*U); f=w*inv((D-L*w))*b; x=B*x0+f;

n=1; %μü′ú′?êy

while norm(x-x0)>=eps x0=x; x =B*x0+f; n=n+1; if(n>=2000)

disp('Warning: μü′ú′?êyì??à£??é?ü2?ê?á2£?'); return; end end

disp('Hx=bμ??a?a£o'); x

disp('μü′ú′?êy?a£o'); n

③控制台输入代码: >> x=Jocabi(6) >> x=Jocabi(8) >> x=Jocabi(10) >> SOR_3(6,1) >> SOR_3(6,1.25)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4