I tried to solve an implicit differential equation of the form f = c1*q^4 + c2*dqdt^2 - c3 (where c1,c2,c3>0) with ode15i. The wanted solution oscillates, but the solution that I get doesn't. It does, though, stop about where it is supposed to, but not exactly. How can I get it right?
---
Here is the relevant part of the code:
x0 = 0
v0 = 2
tspan=[0,6]
option = odeset('events', @condE);
[x0, v0] = decic(@diffE, tspan(1), x0, [], v0, []);
[t, xv, tf, xvf, ~] = ode15i(@diffE, tspan, x0, v0, option);
%% ODE function for energy equation
function f = diffE(~, q, dqdt)
% Assume: m = 1; k = 1; E = 1;
f = (m/2)*dqdt.^2 + (m*k/4)*q.^4 - E;
end
%% Event function for x0 = 0 for energy equation
function [val, ister, dir] = condE(~, ~, dxdt)
val = dxdt;
ister = 1;
dir = -1;
end

답변 (1개)

Torsten
Torsten 2018년 11월 7일

0 개 추천

Nothing oscillating can be seen:
https://www.wolframalpha.com/input/?i=Runge-Kutta+method,+dy%2Fdx+%3D+Sqrt(2-0.5*y(x)%5E4),+y(0)+%3D+0,+from+0+to+1.3,+h+%3D+.025
Best wishes
Torsten.

댓글 수: 1

Inbar Maimon
Inbar Maimon 2018년 11월 7일
편집: Inbar Maimon 2018년 11월 7일
When you differentiate you get the force eq. c2*d2q/dt2 = -4*c1*q^3, which oscillates.
I think it is reasonable, for there are only even powers in the conservation equation 0 = c1*q^4 + c2*dqdt^2 - c3 from which I began.
But yeah, that was exactly my problem. I tried taking the square root and realized that by doing so I force the solution to give only positive dq/dt.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Numerical Integration and Differential Equations에 대해 자세히 알아보기

태그

질문:

2018년 11월 7일

편집:

2018년 11월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by