煜宸0922 发表于 2011-5-18 09:19

求助一个很简单的问题

我编的算一个点的龙格库塔法如下
functionx=rk44(x,h,T)
T(2)=T(1)+h;
k1=h*feval('fun',T(1),x(:,1));
k2=h*feval('fun',T(1)+h/2,x(:,1)+k1/2);
k3=h*feval('fun',T(1)+h/2,x(:,1)+k2/2);
k4=h*feval('fun',T(1)+h,x(:,1)+k3);
x(:,2)=x(:,1)+(k1+2*k2+2*k3+k4)/6;
end
但是在主程序变步长的循环中它不循环,程序如下(部分)
function y=changerk44()
x=;
h=0.01;
AbsTol=1e-6;
T(1)=0;
p=4;
p(21)=2^p-1;
for i=1:1000
    z=rk44(x(:,i),h,T(i));
    m=rk44(x(:,i),h/2,T(i));
请大侠指点,什么原因?

wangyouyi 发表于 2011-5-18 09:28

回复 1 # 煜宸0922 的帖子

在你的循环语句中,z、m应改成z(i)、m(i)这样才能保证循环的每个数都保存!

煜宸0922 发表于 2011-5-18 10:21

回复 2 # wangyouyi 的帖子

不行呀,边框会显示橘黄色的报错信息,说是变量在每次迭代中有改变之类的。

wangyouyi 发表于 2011-5-18 11:49

回复 3 # 煜宸0922 的帖子

你求龙格库塔法的子程序就有些问题!其中的'fun'没有定义!好像T参数的传递也有问题!
求龙格库塔法matlab好像有直接的函数,如4阶龙格库塔法ode45 你可以看看参考下!

煜宸0922 发表于 2011-5-18 14:20

回复 4 # wangyouyi 的帖子

fun在另一程序中定义了,是个方程组,没有问题,就是我编的那个编步长程序有问题,哎,时间紧急,大侠如果有办法,一定给以指导呀

321forever 发表于 2011-5-18 18:03

本帖最后由 321forever 于 2011-5-18 19:48 编辑

回复 3 # 煜宸0922 的帖子

还应该按1楼说的,但是在循环前面要加要数组初始化。
如 z=zeros(1,1000);
m=zeros(1,1000);
for i=1:1000
z(i)=....
m(i)=....
end
页: [1]
查看完整版本: 求助一个很简单的问题