实验3_非线性方程AX=0的解法 下载本文

《数值计算方法》实验报告

13

output err=abs(norm(X'-P)); relerr=err/(norm(X)+eps);P=X'; X(j)=(B(j)-A(j,j-1)*X(j-1)'-A(j,j+1)*P(j+1))/A(j,j) X(N)=(B(N)-A(N,N-1)*(X(N-1))')/A(N,N) X(1)=(B(1)-A(1,2)*P(2))/A(1,1) j=1 k=k+1 k>max1 Y N=length(B); k=1 start InputA,B,P,delta,max1 N j=j+1 j>N Y N Y j==1 Y j==N N N N err

P109.7 算法:

(1)输入A,B,令[N N]=size(A);X=zeros(N,1);C=zeros(1,N+1);Aug=[A B]; p=1。 (2)判断p>N-1是否成立,若不成立,输出结果;若成立, [Y,j]=max(abs(Aug(p:N,p))); C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C;

(3)判断 Aug(p,p)==0是否成立,若成立,输出结果;若不成立,执行步骤(4)。 (4) 令k=p+1,判断k>N是否成立,若成立,p=p+1,返回步骤(2);若不成立,m=Aug(k,p)/Aug(p,p);

Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1),k=k+1,返回步骤(4)。 (5)X=backsub(Aug(1:N,1:N),Aug(1:N,N+1)),输出结果。

《数值计算方法》实验报告

15

end output X=backsub(Aug(1:N,1:N),Aug(1:N,N+1)) m=Aug(k,p)/Aug(p,p); N Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1) k=p+1 Aug(p,p)==0 p=p+1 start [N,N]=size(A);X=zeros(N,1);C=zeros(1,N+1);Aug=[A B]; p=1 p>N-1 Y N [Y,j]=max(abs(Aug(p:N,p))); C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C; Y N Y k>N k=k+1 《数值计算方法》实验报告 16

?1.0?0.2?0.4???a )?1.0?0.2?1.4? (b)??1.00.40.8????1.0000??0.5000?0.3333??0.25000.50000.33330.25000.20000.33330.25000.20000.16670.2500??0.2000?

0.1667??0.1429?P120.3

修改程序3.3 主要变动为列矩阵B变成了单位矩阵E 算法:

(1) 输入 A,E;令[N,N]=size(A);X=zeros(N,1);Y=zeros(N,1);C=zeros(1,N);t=1:N; p=1。 (2) 判断p=1>N-1是否成立,若成立,执行步骤(6);若不成立,执行步骤(3)。 (3) [max1,j]=max(abs(A(p:N,p)));C=A(p,:);A(p,:)=A(j+p-1,:);A(j+p-1,:)=C;d=t(p);t(p)=t(j+p-1);t(j+p-1)=d; (4) 判断A(p,p)==0是否成立,若成立,执行步骤(12);若不成立,k=p+1,执行步骤(5)。 (5) 判断k>N是否成立,若成立,返回到步骤(2);若不成立, mult=A(k,p)/A(p,p); A(k,p)=mult;A(k,p+1:N)=A(k,p+1:N)-mult*A(p,p+1:N);k=k+1;返回到步骤(5)。 (6) J=1。

(7) 判断J>N是否成立,若成立,执行步骤(12);若不成立,k=2, Y(1)=E(t(1),J);执行步

骤(8)

(8) 判断k>N是否成立,若成立,执行步骤(9);若不成立,

Y(k)=E(t(k),J)-A(k,1:k-1)*Y(1:k-1),k=k+1,返回步骤(8)。

(9) X(N)=Y(N)/A(N,N); k=N-1.

(10) 判断k> 1是否成立,若成立,执行步骤(11);若不成立,

X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k);

k=k-1;执行步骤(10).

(11) m(1:N,J)=X(1:N);返回步骤(7). (12) 输出结果。

流程图: