回 帖 发 新 帖 刷新版面

主题:关于龙格-库塔法解常微分方程求助(问题己修改)

[size=1][size=2][size=6][/size][size=5][/size][size=4][/size][size=3][size=2][size=4]最近在fortran修改一个matlab程序,其中遇到下面一次调用函数的过程:
options = odeset('RelTol',1e-9,'AbsTol',1e-12)
pack;
[Z,Y] = ode45(@ABC,[0 10],Y0,options)
zlength1=length(Z)
Z1=Z;
............
function dy = ABC(z,y);
dy = zeros(150 ,1);                                                   
for m3=1:nw1;                                                                                                                  
    ......
    if (z>=0 & z<NumsATT1);
       .....
    elseif (z>=NumsATT1 & z< NumeATT1);
       ......
       end;
    dy(m3)=.........
end;                                                                     
    for m5=1:nw1;
        ..........
    dy(nw1+Npt+Npt+j6)=........
其中nw1+Npt+Npt+j6循环到最后一个值的是150。
其中ABC函数不是解析形式,而是通过对z在(0,10)区间上通过if条件语句分段,然后将dy设定成了一个150X1的向量,在(0,10)区间上分段直接取了固定值,初值Y0己设好,运行结果是Y变成了一个500X150的矩阵,Z是500X1的矩阵。
在fortran的数值计算书中,讲的都是微分方程组为解析形式的例子,我对于这种情况有点儿疑惑:这个是不是就是龙格-库塔算法中方程组个数为150的情况呢?但这应该是一个常微分方程,而不是一个方程组,该如何理解?如果用上面matlab运行的那种思路,用fortran该如何进行相应编程?
因为刚接触fortran和matlab,好多东西都不会,谢谢大家帮助[/size]


[em2][em2][em2][/size][/size][/size][/size]

回复列表 (共2个回复)

沙发

有点儿想清楚了,这应该就是一个150维的常微分方程,每个微分方程的导数值是固定值,但根据自变量z分区怎么理解?
对数值积分的基本概念和最基本的matlab程序理解的一塌糊涂............

板凳

[quote]有点儿想清楚了,这应该就是一个150维的常微分方程,每个微分方程的导数值是固定值,但根据自变量z分区怎么理解?
对数值积分的基本概念和最基本的matlab程序理解的一塌糊涂............[/quote]
应该是matlab程序有问题,运行根本没有通过[em10]各个导数值如果分区间取值的话就构不成常微分方程组了

我来回复

您尚未登录,请登录后再回复。点此登录或注册