我正在尝试用scilab编写一个程序(希望这同样适用于matlab)来获得找到稳定向量的时间,我的意思是,在对产品向量和矩阵进行多次后,结果将变得稳定,因此不会改变。
我认为最好的方法是使用递归函数,所以我编写了以下内容:
function [R]=vector_stable(v,m,i)
V=v*m;
if(V == v) then
R=i;
abort;
else
vector_stable(V,m,i+1);
end
endfunction
让我稍微解释一下,V是初始向量和矩阵的乘积,如果结果与向量参数相同则必须返回发生这种情况的时间,如果不是,则会调用相同的以结果作为第一个参数。但是我收到以下错误
-->R=vector_stable(V,M,0)
!--error 18
: Too many names.
我的功能是否正确?你能帮帮我吗?
答案 0 :(得分:1)
可能稳定并不意味着“不改变”而是“收敛”?然后你无法测试等于V == v来终止循环。您可以查看两个向量之间的相对差异,如果它小于,例如,则终止。 1%或0.1%。
当你(为测试目的)终止i == 10而不是V == v时,你也会得到错误吗?
答案 1 :(得分:1)
您的功能看起来不正确。这可能更像是:
function [R] = vector_stable(v, M, i)
V = v*M;
if(norm(V - v) < 0.001)
R = i;
return;
else
R = vector_stable(V,m,i+1);
end
return
end