Runge-Kutta for solving differential equation with final value (backward integration)
조회 수: 6 (최근 30일)
이전 댓글 표시
Hello,
I have the following simple differential equaiotn: x' = -x-2 with a final value x(2)=0.
I solved it anlytically and got: x(t)=2(exp(2-t) -1). It satisfies the final condition x(2)=0. Also, x(0)=12.77.
Then I tried to solve it numerically using RK4 and plot the numerical solution with the analytical solution togehter
but I can see a big difference at t=0. Here is my code:
% x_f = 0
function y = Test(x_f)
test = -1;
epsn = 0.001;
N = 1000;
t = linspace(0,2,N+1);
h = 1/N;
h2 = h/2;
x = zeros(1,N+1);
x(N+1)=x_f;
while(test < 0)
oldx = x;
% Backward sweep
for i = 1:N
j = N + 2 - i;
k1 = -2-x(j);
k2 = -2-(x(j)-h2*k1);
k3 = -2-(x(j)-h2*k2);
k4 = -2-(x(j)-h*k3);
x(j-1) = x(j)-(h/6)*(k1 + 2*k2 + 2*k3 + k4);
end
temp = epsn*sum(abs(x)) - sum(abs(oldx - x));
test = temp;
end
% Analytical solution
x_cal = 2*(exp(2-t)-1);
y = x;
figure
plot(t,x,t,x_cal)
I'd appreciate any feedback on this issue.
Saleh
댓글 수: 0
답변 (1개)
Divija Aleti
2020년 8월 27일
The huge difference in the initial values is because the value of ‘h’ should be 2/N.
This value is calculated as follows:
h = (t_final – t_initial)/(Number of Points - 1) = (2-0)/((N+1)-1) = 2/N
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!