数学建模社区-数学中国

标题: 求助:差分方程在matlab的实现问题 [打印本页]

作者: dreamofyou    时间: 2009-12-24 15:14
标题: 求助:差分方程在matlab的实现问题
为算一道题我写了如下程序:(保存为nongdu.m): R4 W! L# u- |. N7 }/ G7 f
function z=nd(a,v,n,r,rv)
/ \+ E  q2 L+ x# MA=a;
2 F- o: s4 L+ g7 {' rV=v;
, \, B# c5 n% v+ O( {2 f" c3 _7 B, ~/ GN=n;+ z8 H& t( X8 b" X# Y4 a; K2 H
R=r;
9 R% g0 C4 G) FRV=rv;
! O9 c4 O$ Y, ffor k=1:N% u7 W5 i+ h7 g3 g( `
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
6 ~" i) P0 A+ a/ y0 ^7 F, i    z(1,k)=k;' v. H; w5 N7 X; s: z0 u$ f
    z(2,k)=A(k);# B- D3 k( y% N, }% P1 C
end;
: r. X" b# K/ R& g1 ?; `( X0 u1 C然后z=nd(0.2,200*10^4,360,0.02,10^4);
% |( f- f( U8 g) g系统显示:% p* R0 G+ [" p$ `
??? Attempted to access A(2); index out of bounds because numel(A)=1.
" Y3 `: N6 G  v) R1 E, {Error in ==> nongdu at 8
& e& P) I' s  \: Y' y    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
! `* r( _9 t. l2 |2 a5 d; I7 L/ F  n& L
1.请问为什么啊?
& R- V& f: S9 Y, Y, C( P# ]2 {2.请问差分方程在matlab里边要怎么写啊,我以前写的时候都是用一维的矩阵写的,如A(n,1)。
3 H' n7 @5 G3 m# I看书上直接可以写成A(k),到底应该如何呢?
3 Q/ u2 c1 F* N, r' g3能不能有些教程或者实际的程序啊,当例子。
作者: leo12ok    时间: 2009-12-24 15:55
function z=nd(a,v,n,r,rv)
5 v4 ~8 n2 F+ R3 |8 DA=a;  y9 `- L7 n' d7 z
V=v;% t% s* Z( |" w/ _
N=n;; {9 z( j6 c+ p7 J1 f* x
R=r;% g6 Z$ M+ _! S6 C. Z3 Y
RV=rv;: ^( x4 j. C/ [9 {+ p
for k=1:N: S+ \0 ]" Q$ b" u+ |
    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
. Y: X2 w/ P8 v& ?  W2 q    z(1,k)=k;! l+ x) x( e6 x% R5 y5 W
    z(2,k)=A(k);
9 e& e$ C# @7 I, aend. b' C4 s- [: v1 w6 y  z' I

7 g6 |( ^9 a  e5 g4 ?不知道这样可不可以。
作者: splendid1987    时间: 2009-12-24 16:32
我试了一下,这样改一下就行了:
! p& t/ V& x: Xfunction z=nd(a,v,n,r,rv)0 [7 t  ^5 s( p* \! o4 [( c
A(1)=a;' Y5 q" }" h% c6 d; A
V=v;
; C+ }, t( u7 P4 mN=n;+ V# c7 ]/ `! ^& ]3 H, R7 T
R=r;
. Z% j& I1 D! ~1 q2 s. Y3 vRV=rv;. B1 @# D7 C: l: I1 G
for k=1:N9 y4 W7 `' S: {; }9 j
    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
4 M5 H+ B, m4 ^) f' i1 h# o    z(1,k)=k;
9 `* Y8 `. W. B( U7 z    z(2,k)=A(k);
' m$ c, O) d) L1 X! Gend
作者: 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),这属于非法赋值. R' {) A0 }, U2 A
所以应该修改成:A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2)
3 G# m" o5 b( N5 @9 |2.不论是写成A(k),还是A(k,1),只要达到能表示向量的目的就行了,因为差分方程研究的是一个向量,而非一个矩阵
" ]3 c- J( s5 x* n/ `3 v9 v3.例子:这个就比较多了,根据差分方程的不同,主要改变的是上面的函数中的条件式子,但要始终注意赋值的合法性。
作者: dreamofyou    时间: 2011-9-29 20:38
厚积薄发 发表于 2009-12-25 12:08 - R5 R8 W; ]& z5 R" `
1.出现error:A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);因为你的等式右边出现了A(k),这属于非法赋值( Y2 u: B: l5 {4 t
所以应该修 ...
. p* j, t3 b0 Z0 _1 [3 V" V
谢谢谢  我终于明白了




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5