matlab 关于break的问题写了一个关于Gauss-Seidel iteration的东西,题目说要用到break,看说明只知道是跳出当前for loop,于是这样写了.A是4*4的矩阵,b是4*1的矩阵.A*x =b:error = 10.^(-8);k = 0;xk = zeros(4,1);r = ones

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 10:21:40
matlab关于break的问题写了一个关于Gauss-Seideliteration的东西,题目说要用到break,看说明只知道是跳出当前forloop,于是这样写了.A是4*4的矩阵,b是4*1的

matlab 关于break的问题写了一个关于Gauss-Seidel iteration的东西,题目说要用到break,看说明只知道是跳出当前for loop,于是这样写了.A是4*4的矩阵,b是4*1的矩阵.A*x =b:error = 10.^(-8);k = 0;xk = zeros(4,1);r = ones
matlab 关于break的问题
写了一个关于Gauss-Seidel iteration的东西,题目说要用到break,看说明只知道是跳出当前for loop,于是这样写了.A是4*4的矩阵,b是4*1的矩阵.A*x =b:
error = 10.^(-8);
k = 0;
xk = zeros(4,1);
r = ones(4,1);
sum1 = 0;
sum2 = 0;
xadd = zeros(4,1);
while (k < 1001) && norm(r,2) >= (error * norm(b,2))
for i = 1:4
for j1 = 1:(i-1)
if i==1,break,end
sum1 = sum1 + A(i,j1)*xadd(j1,1);
end
for j2 = (i+1):4
if i==4,break,end
sum2 = sum2 + A(i,j2)*xk(j2,1);
end
xadd(i,1) = 1\A(i,i)*(b(i,1)-sum1-sum2);
end
xk = xadd;
r = b - A*xadd;
k = k + 1;
end
在workspace里j1是3(为什么不是4?),j2是空白(【】),其他数据看要么是NAN要么就很奇怪.是不是break用错了?还是有其他问题?

matlab 关于break的问题写了一个关于Gauss-Seidel iteration的东西,题目说要用到break,看说明只知道是跳出当前for loop,于是这样写了.A是4*4的矩阵,b是4*1的矩阵.A*x =b:error = 10.^(-8);k = 0;xk = zeros(4,1);r = ones
1、你这完全不是用MATLAB写Gauss-Seidel迭代程序的套路啊,给你两个别人写的程序供参考:
gaussSeidel.m
function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp)
%Gauss-Seidel迭代法求解线性方程组
%A-系数矩阵 b-右端向量 x0-初始迭代点 errorBound-近似精度 maxSp-最大迭代次数
%v-近似解 sN-迭代次数 vChain-迭代过程的所有值
step=0;
error=inf;
s=size(A);
D=zeros(s(1));
vChain=zeros(15,3);%最多能记录15次迭代次数
k=1;
fx0=x0;
for i=1:s(1)
    D(i,i)=A(i,i);
end;
L=-tril(A,-1);
U=-triu(A,1);
while error>=errorBound & step<maxSp
    x0=inv(D)*(L+U)*x0+inv(D)*b;
    vChain(k,:)=x0';
    k=k+1;
    error=norm(x0-fx0);
    fx0=x0;
    step=step+1;
end
v=x0;
sN=step;
 
gauseidel.m
function [y,n]=gauseidel(A,b,x0,eps)
% Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下:
if nargin==3
    eps=1.0e-6;
elseif nargin<3
    error
    return
end      
D=diag(diag(A));    %求A的对角矩阵
L=-tril(A,-1);      %求A的下三角阵
U=-triu(A,1);       %求A的上三角阵
G=(D-L)\U;
f=(D-L)\b;
y=G*x0+f;
n=1;                  %迭代次数
while norm(y-x0)>=eps
    x0=y;
    y=G*x0+f;
    n=n+1;
end
调用实例:
>> A=[10,-1,0;-1,10,-2;0,-2,10];
>> b=[9,7,6]';
>> x=gauseidel(A,b,[0,0,0]',1.0e-6)
x =
      0.99579
      0.95789
      0.79158
>> x=gaussSeidel(A,b,x0,0.00001,11)
x =
      0.99579
      0.95789
      0.79158
>> x=A\b
x =
      0.99579
      0.95789
      0.79158
其中最后一个x=A\b是求解线性方程组的最正宗的解法.
 
2、关于你说的为什么最后变量是那些值的问题,楼上的回答应该比较清楚了.
补充一下你追问的内容:那个break是在for j2 = (i+1):4循环体里面,而那个循环如楼上所说,根本就不会执行,也就谈不上什么退出循环了.
 
3、我再考虑一下,按照你的思路写程序的话,应该怎么改(也就是尽量保留你的程序框架).

matlab 关于break的问题写了一个关于Gauss-Seidel iteration的东西,题目说要用到break,看说明只知道是跳出当前for loop,于是这样写了.A是4*4的矩阵,b是4*1的矩阵.A*x =b:error = 10.^(-8);k = 0;xk = zeros(4,1);r = ones matlab中break的用法 关于break的短语break up. matlab 可以 画origin的break matlab里==的使用问题写了一个关于Gram-Schmidt algorithm的东西,在command是着验算看算出来的B是不是和QB*RB相等.用的是B == QB*RB.我记忆中如果结果里是1就是相等,0的话就是不等,是这样么?结果得到的 关于大自然给我的启示一题写一篇作文 问一个关于matlab的问题for m=101:1:200 k=fix(sqrt(m)); for i=2:k+1 if rem(m,i)==0; break end end if i>=k+1 disp(int2str(m) end end 这个是matlab求100到200以内的素数的程序,求逐步解析 关于高中英语作文的问题写段高中英语作文来看看, 关于break的短语及意思 能否列举一下关于break的短语 关于神起break out这是五只一起唱的?真假.他们不和SM闹了? 就生活中的环保问题写一写自己的发现和感受50字 matlab中break的用法请问为避免死循环,可将break 放在if 和 end 之间吗 关于年份数2009的数学题写错了,关于年份数2014的数学题 1—4题的问题写的对吗?错了改一下, matlab中break使用符号的小问题我是个菜鸟,刚接触matlab,两个break后一个用分号,另一个不用,问题是去掉,显示出错啊! 一人间自有真情在为题写一篇作文要英文的,关于陌生人的 美国的传统节日和饮食习惯问题写错了,应该是:这是哪个国家?