0

我正在尝试在 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.

我的功能正确吗?你能帮我吗?

4

2 回答 2

1

可能稳定不代表“不变”而是“收敛”?然后你不能测试相等 V==v 来终止循环。您可以查看两个向量之间的相对差异,如果它小于例如 1% 或 0.1%,则终止。

当您(出于测试目的)如果 i==10 而不是 V==v 终止时,您是否也会收到错误?

于 2012-06-01T05:40:04.987 回答
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
于 2012-06-01T06:00:41.260 回答