2012-06-01 71 views
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是初始向量和矩阵的产品,如果结果与vector参数相同,然后必须返回发生这种情况的时间,如果不是,它将调用相同的函数并将结果作为第一个参数。但我收到以下错误

-->R=vector_stable(V,M,0) 
!--error 18 
: Too many names. 

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

+1

我认为有一个更有效的方法使用矩阵的特征分解,我只是不知道如何?也许你可以添加'数学'标签来吸引合适的人:) – Amro

+0

计算特征向量。有无分解,这只是一个工具。 – JohnB

+0

你可以发布样本矩阵和向量? – Ansari

回答

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 
+0

返回声明不适用于Scilab,但条件解决了我的问题,谢谢 –

+0

很高兴听到它。为了更强大的实现,我建议将'norm(V-v)'除以'norm(v)',然后检查它是否小于0.001或任何你喜欢的阈值。 – Ansari

1

大概稳定并不意味着“不变”而是“收敛”?那么你不能测试用于终止循环的等式V == v。您可以查看两个矢量之间的相对差异,如果它小于,例如,则终止。 1%或0.1%。

当你(为测试目的)终止如果我== 10而不是V == v?