I'm trying to write a matlab function to solve RK4 and store it in my computer to be called when needed.

1 visualización (últimos 30 días)
Below is my attempt at the function but when it is run there are issues. could someone correct it and post their version?
function [x,y] = Rk4(dy_dx,x_1,y_1,x_end,h_step)
%dy_dx = differential function
%x_1 = first x value
%y_1 = first y value
%x_end = final x value
%h_step = step size
%Initialize
syms x y(x) u;
dy_dx(x, u) = subs(dy_dx, y(x), u);
dy_dx = matlabFunction(dy_dx); % lets matlab interpret the value as a number
%Initialize Storage
x_all = [x_1:h_step:x_end];
y_store = zeros(length(x_all));
y_store(1) = y_1;- %makes running this code easier on the computer
%Loop -> Summation
for i = 1:length(x_all)-1
k_1 = dy_dx(x_all(i), y_store(i));
k_2 = dy_dx(x_all(i) + 0.5*h_step, y_store(i) + 0.5*h_step*k_1);
k_3 = dy_dx(x_all(i) + 0.5*h_step, y_store(i) + 0.5*h_step*k_2);
k_4 = dy_dx(x_all(i) + h_step, y_store(i) + h_step*k_3);
y_store(i+1) = y_store(i) + h_step*(k_1 + 2*k_2 + 2*k_3 + k_4)/6;
end
%Results
y_store(length(y_store))
plot(x_all, y_store);
end
  1 comentario
John D'Errico
John D'Errico el 2 de Dic. de 2022
Don't just say there are some issues. That forces someone to spend the time to run it and test it fully, and even then we might not know what you think are the issues. What do YOU think is a problem? If you get an error, then show the COMPLETE error. Everything in red.

Iniciar sesión para comentar.

Respuestas (1)

Torsten
Torsten el 2 de Dic. de 2022
Editada: Torsten el 2 de Dic. de 2022
If you call RK4 correctly, it will work.
syms y(x) dy_dx(x)
dy_dx(x) = x + y(x);
x_1 = 0;
y_1 = 1;
x_end = 1;
h_step = 0.01;
[x,y] = Rk4(dy_dx,x_1,y_1,x_end,h_step);
fun = @(x,y) x+y;
[X,Y] = ode45(fun,x_1:h_step:x_end,y_1);
plot(X,Y-y)
grid on
function [x_all,y_store] = Rk4(dy_dx,x_1,y_1,x_end,h_step)
%dy_dx = differential function
%x_1 = first x value
%y_1 = first y value
%x_end = final x value
%h_step = step size
%Initialize
syms x y(x) u
dy_dx(x, u) = subs(dy_dx, y(x), u);
dy_dx = matlabFunction(dy_dx); % lets matlab interpret the value as a number
%Initialize Storage
x_all = [x_1:h_step:x_end];
y_store = zeros(length(x_all),1);
y_store(1) = y_1; %makes running this code easier on the computer
%Loop -> Summation
for i = 1:length(x_all)-1
k_1 = dy_dx(x_all(i), y_store(i));
k_2 = dy_dx(x_all(i) + 0.5*h_step, y_store(i) + 0.5*h_step*k_1);
k_3 = dy_dx(x_all(i) + 0.5*h_step, y_store(i) + 0.5*h_step*k_2);
k_4 = dy_dx(x_all(i) + h_step, y_store(i) + h_step*k_3);
y_store(i+1) = y_store(i) + h_step*(k_1 + 2*k_2 + 2*k_3 + k_4)/6;
end
end

Categorías

Más información sobre Mathematics en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by