【发布时间】:2017-09-06 06:17:51
【问题描述】:
我正在尝试完成下面的代码,它是一个迭代代码。是的,我终于让它工作了,但是当我把规定放在标志上时,发现和底部。
我现在得到“在调用“jacobi”期间未分配输出参数“错误”(可能还有其他参数)。”
我知道它与 flag=0 而不是 1 时的 else 语句有关,因为在我尝试将 else 编码放入之前一切正常,现在 我得到这个错误。任何帮助将不胜感激。
当我进入代码时,它会一直以正确的答案和矩阵工作 价值观。当我在 if flag=1 的最终 if 语句中时,它将跳到 else 部分,打印出我希望它打印的所有内容,然后 当绿色箭头使用该功能转到最后一个结束语句并且我单击下一步时,它会发出上述错误。
它怎么能一直工作到最后的 end 语句。我必须失踪 某物。我是新手,如果这很容易,请原谅我。
function [x error niter flag ] =jacobi(A,x,b,maxiter, tol)
if isrow(x)==1
x=x';
end
if isrow(b)==1
b=b';
end
if n ~= m
disp('The matrix has to be square for this function, please enter a
matrix that is sqaure');
end
index=1;
Dinv= inv(diag(diag(A)));
D=diag(diag(A));
flag=0;
y=x;
while index <= maxiter
z = Dinv*((D-A)*y+b);
if norm(z-y)<tol
flag=1;
err=abs(norm(z-y));
break
end
y=z;
index=index+1;
end
if flag==1
niter=index;
x=z;
error=err;
else
maxindex='you have reached the maximum iterations of %d which is larger
than %d.';
niter=index;
maxiter=maxiter;
sprintf(maxindex,niter,maxiter);
end
end
【问题讨论】:
-
当
flag为0 时,您没有为error分配任何内容,因此该函数不知道该输出是什么。而且您必须更改该变量的名称,error是一个已保存的单词,可能会导致无法预料的行为。