dreamofyou 发表于 2009-12-24 15:14

求助:差分方程在matlab的实现问题

为算一道题我写了如下程序:(保存为nongdu.m)
function z=nd(a,v,n,r,rv)
A=a;
V=v;
N=n;
R=r;
RV=rv;
for k=1:N
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
    z(1,k)=k;
    z(2,k)=A(k);
end;
然后z=nd(0.2,200*10^4,360,0.02,10^4);
系统显示:
??? Attempted to access A(2); index out of bounds because numel(A)=1.
Error in ==> nongdu at 8
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);

1.请问为什么啊?
2.请问差分方程在matlab里边要怎么写啊,我以前写的时候都是用一维的矩阵写的,如A(n,1)。
看书上直接可以写成A(k),到底应该如何呢?
3能不能有些教程或者实际的程序啊,当例子。

leo12ok 发表于 2009-12-24 15:55

function z=nd(a,v,n,r,rv)
A=a;
V=v;
N=n;
R=r;
RV=rv;
for k=1:N
    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
    z(1,k)=k;
    z(2,k)=A(k);
end

不知道这样可不可以。

splendid1987 发表于 2009-12-24 16:32

我试了一下,这样改一下就行了:
function z=nd(a,v,n,r,rv)
A(1)=a;
V=v;
N=n;
R=r;
RV=rv;
for k=1:N
    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
    z(1,k)=k;
    z(2,k)=A(k);
end

dreamofyou 发表于 2009-12-24 17:12

唉,谢谢,我再试试,matlab里边用差分方**的很诡异啊。

厚积薄发 发表于 2009-12-25 12:08

1.出现error:A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);因为你的等式右边出现了A(k),这属于非法赋值
所以应该修改成:A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2)
2.不论是写成A(k),还是A(k,1),只要达到能表示向量的目的就行了,因为差分方程研究的是一个向量,而非一个矩阵
3.例子:这个就比较多了,根据差分方程的不同,主要改变的是上面的函数中的条件式子,但要始终注意赋值的合法性。

dreamofyou 发表于 2011-9-29 20:38

厚积薄发 发表于 2009-12-25 12:08 static/image/common/back.gif
1.出现error:A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);因为你的等式右边出现了A(k),这属于非法赋值
所以应该修 ...

谢谢谢  我终于明白了
页: [1]
查看完整版本: 求助:差分方程在matlab的实现问题