How to solve coupled non linear ode using ode 45

1 回表示 (過去 30 日間)
Krishnendu Paul
Krishnendu Paul 2020 年 5 月 10 日
コメント済み: Krishnendu Paul 2020 年 5 月 10 日
I need to solve the following coupled odes, using ode 45.
  1. dthetadt = -(v/Dc)*log(v*theta/Dc);
2. dvdt = (v/a)*((b*v/Dc)*log(v*theta/Dc));
I wrote the following function. but it is not wotking. if u all have time can u give me some guide about to coding with two coupled equations problem
function [t,theta,v] = call_nonlin_ode()
tspan = [0 365];
theta0 = 10;
[t,theta,v] = ode45(@nonlin_ode,tspan,theta0)
function[dtheta,dvdt]= nonlin_ode(t,theta)
a = 0.01;
b = 0.02;
Dc = 1e-5;
v0 = 1e-2;
dthetadt = -(v/Dc)*log(v*theta/Dc);
dvdt = (v/a)*(b*v/Dc)*log(v*theta/Dc);
end
end

採用された回答

Bjorn Gustavsson
Bjorn Gustavsson 2020 年 5 月 10 日
When you have a coupled set of ODEs the ode-function has to return a column-vector with the derivatives. So you'll have to modify your function to something like this:
function[dthetadtdvdt]= nonlin_ode(t,theta_v)
a = 0.01;
b = 0.02;
Dc = 1e-5;
v0 = 1e-2;
theta = theta_v(1);
v = theta_v(2);
dthetadtdvdt = zeros(2,1);
dthetadtdvdt(1) = -(v/Dc)*log(v*theta/Dc);
dthetadtdvdt(2) = (v/a)*(b*v/Dc)*log(v*theta/Dc);
end
Then you'll have to modify your call and output-handling correspondingly.
HTH
  3 件のコメント
Bjorn Gustavsson
Bjorn Gustavsson 2020 年 5 月 10 日
Please read the documentation:
Example
[t,y]=ode45(@vdp1,[0 20],[2 0]);
plot(t,y(:,1));
solves the system y' = vdp1(t,y), using the default relative error
tolerance 1e-3 and the default absolute tolerance of 1e-6 for each
component, and plots the first component of the solution.
There you see that the variable y will have some number of of components, and the first is ploted, you also see that the tSpan used there is from 0 to 20 and that the initial condition has two components - that is an initial conditoin for the first and the second component of y. For your problem where you have 2 coupled equations you will also have 2 initial conditions, one for theta and one for v, and your solution should have 2 columns (the first for theta and the second for v). Your call sould be something like this:
[t, theta_v] = ode45(@(t,th_v) nonlin_ode(t,th_v),tSpan,[theta0, v0]);
which should give you both theta and v as the first and second column of theta_v.
HTH
Krishnendu Paul
Krishnendu Paul 2020 年 5 月 10 日
Thank you so much SIr.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by