主题:关于龙格-库塔法解常微分方程求助(问题己修改)
[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]
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]