数学建模社区-数学中国

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

作者: dreamofyou    时间: 2009-12-24 15:14
标题: 求助:差分方程在matlab的实现问题
为算一道题我写了如下程序:(保存为nongdu.m); @6 S2 `, Z, g/ Y$ \4 x( B# A
function z=nd(a,v,n,r,rv); A- p2 P4 m1 \+ q$ e. r8 J0 f( i
A=a;
3 {2 l: ?& @1 k' w! ]8 nV=v;8 x6 q: D% H, g( C- q8 p8 B
N=n;& L% h& g! h' [4 T, M  n% z
R=r;' e% M1 R' R/ h* S4 G( x% t0 r) p
RV=rv;
- F' I5 D% u  A5 afor k=1:N
+ x& F) s% o. e4 |0 ^0 T* O    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
8 s, v) h7 b" _6 T, L6 n    z(1,k)=k;
  w: n5 X/ S; l. e  L    z(2,k)=A(k);8 l3 q& q9 k! a  i$ G5 T1 p
end;9 G, v1 \- _! I) ?
然后z=nd(0.2,200*10^4,360,0.02,10^4);6 g! t0 V& W# @* d' u
系统显示:
2 y, G! R& ~0 v; N( G/ s3 I??? Attempted to access A(2); index out of bounds because numel(A)=1.
" Y. ?) M- |) t% a2 W8 P/ rError in ==> nongdu at 8* c2 L; [+ n$ i- p
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);% r7 D: _( f$ o' [  l

: c3 n& m& y- A% p1.请问为什么啊?
- n: W/ V( W5 |$ U; Y( o2.请问差分方程在matlab里边要怎么写啊,我以前写的时候都是用一维的矩阵写的,如A(n,1)。
( L% |4 Z  M: G& {$ L) e; l" [/ L看书上直接可以写成A(k),到底应该如何呢?5 M7 d& g( e5 n- a, n( O
3能不能有些教程或者实际的程序啊,当例子。
作者: leo12ok    时间: 2009-12-24 15:55
function z=nd(a,v,n,r,rv)6 A4 f9 O) n% G: D3 i5 `
A=a;
+ v; \& b3 t6 D9 h- ]& l% {V=v;. x6 o3 E, e1 t, K- q8 E
N=n;
  M5 |5 ~' z3 ~. u# b, {6 ^R=r;
% r2 Z! `+ V1 a( h7 |+ ]RV=rv;6 ~1 G! K; s" N+ c+ \0 D7 f" l
for k=1:N
- p. L* N) ]7 x7 G6 U; V  Y$ g& M7 g& z    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
: Y$ S; G0 C/ i9 x# ~. Q    z(1,k)=k;  m& k+ s0 U0 W9 E5 [# m7 t
    z(2,k)=A(k);
8 c. K: r' k0 J+ Z; Aend+ W' o4 Z1 O' D! {( J4 R/ K8 W4 L
% d/ g8 [4 \1 M+ M) X" ?+ Y
不知道这样可不可以。
作者: splendid1987    时间: 2009-12-24 16:32
我试了一下,这样改一下就行了:7 k2 l1 J+ e8 e0 I
function z=nd(a,v,n,r,rv)3 M8 ~; }& r, H  @7 e) t- s
A(1)=a;
( q5 f1 l' Q; z7 D6 n2 K- WV=v;
* Q: o' Y- q5 u% Y7 w; x# O, e* WN=n;
: c$ X; R+ _, v; D& ?R=r;
' a9 x; O  H  `/ K' C# t6 D; sRV=rv;; Z, Z" I$ W" [* s7 T% B9 r
for k=1:N
. ^1 b, ]* y4 n) ~/ g    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
9 K* @/ t7 i  j/ k. E$ `    z(1,k)=k;
9 z5 ?! C2 N% r- \    z(2,k)=A(k);4 c) X6 s7 i( D9 K! 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),这属于非法赋值+ B* A) X+ {0 `
所以应该修改成:A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2)
% P9 t( M+ d0 f4 {2.不论是写成A(k),还是A(k,1),只要达到能表示向量的目的就行了,因为差分方程研究的是一个向量,而非一个矩阵+ B2 G  D! u: C
3.例子:这个就比较多了,根据差分方程的不同,主要改变的是上面的函数中的条件式子,但要始终注意赋值的合法性。
作者: dreamofyou    时间: 2011-9-29 20:38
厚积薄发 发表于 2009-12-25 12:08
) ^4 b/ Q' R+ g1 J  ~2 v; g9 X1.出现error:A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);因为你的等式右边出现了A(k),这属于非法赋值
" i0 D5 Z& @' f. p* n2 ?6 n所以应该修 ...
, e9 h& |3 e- A: h  n' N2 H* o
谢谢谢  我终于明白了




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