数学建模社区-数学中国

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

作者: dreamofyou    时间: 2009-12-24 15:14
标题: 求助:差分方程在matlab的实现问题
为算一道题我写了如下程序:(保存为nongdu.m)! P8 f, p2 \! y, ~. c' r3 E
function z=nd(a,v,n,r,rv)
4 c1 D; N8 O% w7 HA=a;
' Q4 E# O4 z/ ~0 s3 G' C/ {) e% aV=v;" h9 Y2 g# T* r
N=n;
. U/ \: \6 |. |7 `& O3 wR=r;! o4 \: K' @6 k( K, }. \
RV=rv;
3 D( K1 ]  p7 ~5 W1 hfor k=1:N. x% _% ]( z0 p% ^
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);, J; x- f; \- \9 L" J, {
    z(1,k)=k;+ P, }+ n1 R' n5 [6 e: k
    z(2,k)=A(k);8 A2 H2 U$ q! V5 v6 A# g
end;$ r: ?4 ?) x2 m& {/ ^. h
然后z=nd(0.2,200*10^4,360,0.02,10^4);6 P. J& r8 l. a  F5 \% F: R
系统显示:
# T% K0 q5 t: @4 U??? Attempted to access A(2); index out of bounds because numel(A)=1.
/ I7 ~, l% S8 q2 tError in ==> nongdu at 86 S# {& g: `6 n' O* V2 x
    A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);
6 r4 J2 _& `$ C+ e% @) K: A0 j  _$ }2 J% X( B+ Q
1.请问为什么啊?
1 O2 _2 X6 p  H9 d2.请问差分方程在matlab里边要怎么写啊,我以前写的时候都是用一维的矩阵写的,如A(n,1)。3 A9 C. w" {( C% t3 y
看书上直接可以写成A(k),到底应该如何呢?
8 x/ y9 I- M& P2 i* Q  B3能不能有些教程或者实际的程序啊,当例子。
作者: leo12ok    时间: 2009-12-24 15:55
function z=nd(a,v,n,r,rv)/ Z0 e! K6 a5 U6 H. T4 w
A=a;
  n2 l9 l$ [0 BV=v;, Z1 h5 B& _; y/ c1 a% P+ u/ q. }, d
N=n;
% q  Q# j% v8 AR=r;
0 B4 q, H6 ?( X, y4 E! NRV=rv;
; C3 M7 d  d. Vfor k=1:N
  ^  T1 g+ H; C9 f, S8 Z2 q& X    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);. N- n+ L/ J0 O7 q/ a1 A
    z(1,k)=k;
1 m, m  l3 l- ~8 `- A4 s1 H% w) W    z(2,k)=A(k);: Y2 w/ X& l1 ?/ Q+ m
end$ s3 `7 Z6 J! v* }) A4 ?3 ^0 p) _: J! a

. ^1 G* Z4 g8 s4 o/ i. W不知道这样可不可以。
作者: splendid1987    时间: 2009-12-24 16:32
我试了一下,这样改一下就行了:! Q0 t' K( i  r+ L' n# l
function z=nd(a,v,n,r,rv)# ~! |6 d: G, k
A(1)=a;
5 d+ l1 K3 W& {0 l; IV=v;
1 I8 {$ r, P8 Y, h& rN=n;
% U- H$ ?  W, O9 h7 y* x/ jR=r;5 G$ p3 j. u: f9 j3 x. h% g3 M
RV=rv;
; J% L( T7 z. A6 O( d" c: C9 Nfor k=1:N5 Z/ ^8 |7 G0 E+ I+ n$ e  O4 D+ z
    A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2);
0 e2 ^8 G. n% u    z(1,k)=k;/ ]* t8 }9 |$ p5 P: {
    z(2,k)=A(k);
) n( ]! ]% v8 E9 S, g" ^5 cend
作者: 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 S% G8 g9 d$ C! o+ n6 S6 o所以应该修改成:A(k+1)=A(k)-(R*RV+V*A(k))*RV/(V^2)
4 ~- P6 }  I9 G9 O! {! ^9 V/ F2.不论是写成A(k),还是A(k,1),只要达到能表示向量的目的就行了,因为差分方程研究的是一个向量,而非一个矩阵) R& j; a/ v8 t% N6 J4 I
3.例子:这个就比较多了,根据差分方程的不同,主要改变的是上面的函数中的条件式子,但要始终注意赋值的合法性。
作者: dreamofyou    时间: 2011-9-29 20:38
厚积薄发 发表于 2009-12-25 12:08
% |' k+ Z" ?( _1.出现error:A(k)=A(k+1)+(R*RV+V*A(k))*RV/(V^2);因为你的等式右边出现了A(k),这属于非法赋值
9 K" ?1 g2 u& |7 S) S# y所以应该修 ...

$ t1 m; k( `9 G0 L+ @  H4 Y谢谢谢  我终于明白了




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