我在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