实现四步龙格-库塔

13个视图(30天)
佩
2023年5月7日在19:54
回答: 史蒂文的主 2023年5月7日20:27
我试图使用龙格-库塔函数之前我写了一个新的例子。
函数 (y, t) = rungekutta (f, a, b, y0, h)
t = a: h: b;
y = 0(大小(t));
y (1) = y0;
i = 1:长度(t) 1
k1 = f (t (i), y (i));
k2 = f (t(我)+ h / 2, y(我)+ (h / 2) * k1);
k3 = f (t(我)+ h / 2, y(我)+ (h / 2) * k2);
k4 = f (t (i) + h, y(我)+ h * k3);
(i + 1) = y(我)+ h / 6 * (k1 + 2 * k2 + 2 * k3 + k4);
结束
结束
函数需要我们要评估函数,边界(a, b)的起点,和网格大小,
f = @ (y, t) - t * y + 4 * t / y;
= 0;
b = 2.5;
h = 1;
y0 = 1;
[answer_rk, t_rk] = rungekutta (f, a, b, y0, h)
结果是一个充满NaN值矩阵,这是因为第一个迭代评估k1为零。我不能判断我的错误是一个编码错误或误解的龙格-库塔实现,可以有人帮助吗?

接受的答案

Torsten
Torsten 2023年5月7日20:01
移动:Torsten 2023年5月7日20:01
改变输入参数f的顺序:
f = @ (t, y)
而不是
f = @ (y, t)

答案(1)

史蒂文的主
史蒂文的主 2023年5月7日20:27
你f定义为:
f = @ (y, t) - t * y + 4 * t / y;
你叫f:
k1 = f (t (i), y (i));
注意输入的顺序在定义和调用。你想要f t y的函数(根据定义)或t的函数y(按照调用)?

类别

找到更多的在数学帮助中心文件交换

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!