我试图在MATLAB中实现Runge-Kutta Method for Systems of DEs。我没有得到correct answers,我不确定代码中是否有错误或者我用来运行它的命令。实现龙格库塔系统的DE
这里是我的代码:
function RKSystems(a, b, m, N, alpha, f)
h = (b - a)/N;
t = a;
w = zeros(1, m);
for j = 1:m
w(j) = alpha(j);
end
fprintf('t = %.2f;', t);
for i = 1:m
fprintf(' w(%d) = %.10f;', i, w(i));
end
fprintf('\n');
k = zeros(4, m);
for i = 1:N
for j = 1:m
k(1, j) = h*f{j}(t, w);
end
for j = 1:m
k(2, j) = h*f{j}(t + h/2, w + (1/2)*k(1));
end
for j = 1:m
k(3, j) = h*f{j}(t + h/2, w + (1/2)*k(2));
end
for j = 1:m
k(4, j) = h*f{j}(t + h, w + k(3));
end
for j = 1:m
w(j) = w(j) + (k(1, j) + 2*k(2, j) + 2*k(3, j) + k(4, j))/6;
end
t = a + i*h;
fprintf('t = %.2f;', t);
for k = 1:m
fprintf(' w(%d) = %.10f;', k, w(k));
end
fprintf('\n');
end
end
我想测试一下在this problem。 这是我的命令和输出:
>> U1 = @(T,U)3 * U(1)+ 2 * U(2) - (2 * T^2 + 1)* EXP( 2 * T); (1)+ u(2)+(t^2 + 2 * t-4)* exp(2 * t);其中,U2 =
>> a = 0; b = 1; alpha = [1 1]; m = 2; h = 0.2; N =(b-a)/ h; RKSystems(a,b,m,N,alpha,{U1 U2});
t = 0.00; w(1)= 1.0000000000; w(2)= 1.0000000000;
t = 0.20; w(1)= 2.2930309680; w(2)= 1.6186020410;
t = 0.40; w(1)= 5.0379629523; w(2)= 3.7300162165;
t = 0.60; w(1)= 11.4076339762; w(2)= 9.7009491301;
t = 0.80; w(1)= 27.0898576892; w(2)= 25.6603894354;
t = 1.00; w(1)= 67.1832886708; w(2)= 67.6103125539;
您可能会感兴趣的MATLAB'ode45'功能,解决了常微分方程与RK:HTTP:// WWW .mathworks.com/help/matlab/ref/ode45.html – 2013-02-18 11:22:24