2013-11-04 23 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