2013-11-04 25 views
0

我在Octave中很基本,有人可以帮我用我的代码吗?Octave无法在循环中填充矩阵

A = zeros(40); 
format long 
function xn=xnf(n,xn,c) 
    if n<=40 
     xn = xn^2+c; 
     A(n,n)=xn; 
     n++; 
     xnf(n,xn,c); 
    end 
end 
xnf(1,2,-2) 

我想将xn值添加到矩阵中,但它总是有ony零值 - 为什么?

+0

在这种情况下,您应该考虑使用for循环而不是recoursion。你的代码真的很混乱。 – Daniel

+0

它只有零的原因是你没有将'A'传递给你的函数。因此,函数中的'A(n,n)= xn;'实际上会创建一个名为'A'的新变量,该变量的作用范围是函数,只要您退出函数(或进入下一个递归调用) 'A'超出范围。 @ mhmsa的回答是正确的。 – Dan

回答

1

对于您所指定的值(n=1xn=2c=-2),你会得到矩阵是沿着主对角线和零其他地方2个的,可与A=diag(2*ones(40,1))进行。

如果你想改变的参数,这个代码将在Matlab工作,因此应在倍频工作:

N=40; 
V=zeros(1,N); 
V(1)=xn; 
for i=2:N 
    V(i)=V(i-1)^2+c; 
end 
A=diag(V); 
1

我所知甚少八度,但在MATLAB,如果我想的值xn的到要添加到矩阵A和我想要的是矩阵的话,我会那样做

function A=xnf(n,xn,c,A) 
    if n<=40 
     xn = xn^2+c; 
     A(n,n)=xn; 
     n=n+1; 
     A=xnf(n,xn,c,A); 
    end 
end 

,因为所有的函数内部使用的变量被删除,一旦你回到所以如果你需要的矩阵确保你将它退回

+1

认为回忆的电话应该是'A = xnf(n,xn,c);'在这种情况下 – Daniel