数学建模社区-数学中国

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

作者: dreamofyou    时间: 2009-12-24 15:14
标题: 求助:差分方程在matlab的实现问题
为算一道题我写了如下程序:(保存为nongdu.m)5 U) c6 v% p# L. P
function z=nd(a,v,n,r,rv)
$ \" G  T$ m4 M: D* Z% hA=a;
9 `) b/ {: L/ ZV=v;4 G4 g( l& m) P- X
N=n;4 ?! Z* i" l3 @
R=r;3 r! W- H* S7 q0 e& m7 ]7 l- o
RV=rv;
( k4 z; `3 i" p! E) M  t+ m6 Ufor k=1:N! t) }5 k7 D/ v! d
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
' W* T# L! v! v) I    z(1,k)=k;
: I; Y" i  G3 W, k. o    z(2,k)=A(k);, X/ \$ o* V# z& _: P
end;
* ^' m/ U  ]/ {1 j9 \5 h然后z=nd(0.2,200*10^4,360,0.02,10^4);0 z% ?. I( C/ m3 P
系统显示:
& w4 f4 @0 v& g9 d* p??? Attempted to access A(2); index out of bounds because numel(A)=1.
% n. L2 R5 \) o) k5 Y1 i0 sError in ==> nongdu at 8& N- F: j4 ^: d! p7 T4 ~
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
; E  v+ B7 R3 i; T9 {% a6 f5 h' ?0 V. o3 r; ]2 i5 I1 J
1.请问为什么啊?
# J, N, f( {& I6 @+ x2.请问差分方程在matlab里边要怎么写啊,我以前写的时候都是用一维的矩阵写的,如A(n,1)。
, J/ b: @/ L" N看书上直接可以写成A(k),到底应该如何呢?/ ~6 ^- w4 T$ D- r: }
3能不能有些教程或者实际的程序啊,当例子。
作者: leo12ok    时间: 2009-12-24 15:55
function z=nd(a,v,n,r,rv)+ y; b# g6 O8 b
A=a;, B8 p$ r* z0 ^6 T$ F
V=v;! y/ u$ j7 s. e# P% J2 ^4 P: f5 G$ k
N=n;: K; M3 y: _0 N7 c' o
R=r;/ G- r8 }  w! v+ D7 c
RV=rv;7 \" i7 V. I9 ^# O: S7 _5 P- y
for k=1:N
/ S) y" E) i- U* Y    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);& h7 }  G6 X9 w4 f3 ?* j* c# \9 N
    z(1,k)=k;6 X( o) [+ ?# q- {& j9 X
    z(2,k)=A(k);
0 z0 `' g2 S' i" O+ C3 \$ \end
& F7 \7 c/ M* Q; F7 U3 h& Y) D0 ^8 V
, {, A8 D5 B0 Z不知道这样可不可以。
作者: splendid1987    时间: 2009-12-24 16:32
我试了一下,这样改一下就行了:4 ?2 u  \0 B2 y) b
function z=nd(a,v,n,r,rv)' I/ y6 R  B( t6 m3 F; M
A(1)=a;& U9 {8 x& J# y; G0 p0 I
V=v;5 o2 x4 u; Z2 q  [- s* Y/ n  ~
N=n;0 H6 x5 R$ k: m" A# [4 {" V; M
R=r;
& f8 ?+ t3 d/ M% [: t8 X. RRV=rv;6 X( C7 j0 ^3 c0 N. b, b' Q
for k=1:N
3 P$ _: ~/ n' K7 h: ]( b! w! x! d    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
* q, L( S  ?9 C; D# Z% c    z(1,k)=k;3 x7 a; o2 t# ]
    z(2,k)=A(k);- U0 t" Z! h: j: c" X& b
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),这属于非法赋值6 T; V! |) j* _+ h2 C
所以应该修改成:A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2)1 V5 b! A+ N' M* D- \- M, l, u
2.不论是写成A(k),还是A(k,1),只要达到能表示向量的目的就行了,因为差分方程研究的是一个向量,而非一个矩阵! F' x2 V3 J- C+ ?1 z2 y) d
3.例子:这个就比较多了,根据差分方程的不同,主要改变的是上面的函数中的条件式子,但要始终注意赋值的合法性。
作者: dreamofyou    时间: 2011-9-29 20:38
厚积薄发 发表于 2009-12-25 12:08
8 X; B. d5 F# s/ M2 h. t3 w1.出现error:A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);因为你的等式右边出现了A(k),这属于非法赋值) I& ~% C, A( T0 r$ r( Z0 U  h
所以应该修 ...
' {3 I2 C# U; e3 U; B- B7 r
谢谢谢  我终于明白了




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