请教高手用matlab解数值分析题!

2024-12-23 08:07:09
推荐回答(1个)
回答1:

n=50;

A=zeros([ n n]);

for i=2:n-1

A(i,i)=-4;

A(i,i+1)=1;

A(i,i-1)=1;

end

A(1,2)=1;

A(n,n-1)=1;

A(1,1)=-4;

A(n,n)=-4;

b=-2*ones([ n 1]);

b(1)=-3;

b(n)=-3;

p=1000;

eps=10^(-6);

%function [x,n]=SOR(A,b,p,eps)

%首先获取A矩阵的上三角,下三角,对角矩阵

k=size(A,1);

D=diag(diag(A));

U=triu(A,1);

L=tril(A,-1);

% w系数取值

w=[2:0.1:3];

m=size(w,2);

n=ones([1 m]);

%初始化输入值

x0=zeros([k,m]);

for i=1:m

%首先对松弛法迭代阵B进行判断是否该迭代能收敛

B=inv(D+w(i)*L)*((1-w(i))*D-w(i)*U);

%这里采用了充要条件谱半径<1来进行判断

if(max(abs(eig(B)))>1)

error('无法收敛');

end

x(:,i)=B*x0(:,i)+w(i)*inv(D+w(i)*L)*b;

while(max(abs((x(:,i)-x0(:,i))))>eps)

x0(:,i)=x(:,i);

x(:,i)=B*x0(:,i)+w(i)*inv(D+w(i)*L)*b;

n(i)=n(i)+1;

if(n(i)>p)

error('在有限次数无法取得收敛'); %若在有限次数无法取得收敛,跳出循环

end

end

end

%对求解出来的 w和k实现作图,直观化的表现出迭代次数和w取值之间的关系

scatter(w,n);

xlabel(' w 取值');

ylabel('迭代次数');

title('w取值对迭代次数的影响');