我在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零值 - 爲什麼?
我在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零值 - 爲什麼?
對於您所指定的值(n=1
,xn=2
,c=-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);
我所知甚少八度,但在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
,因爲所有的函數內部使用的變量被刪除,一旦你回到所以如果你需要的矩陣確保你將它退回
認爲回憶的電話應該是'A = xnf(n,xn,c);'在這種情況下 – Daniel
在這種情況下,您應該考慮使用for循環而不是recoursion。你的代碼真的很混亂。 – Daniel
它只有零的原因是你沒有將'A'傳遞給你的函數。因此,函數中的'A(n,n)= xn;'實際上會創建一個名爲'A'的新變量,該變量的作用範圍是函數,只要您退出函數(或進入下一個遞歸調用) 'A'超出範圍。 @ mhmsa的回答是正確的。 – Dan