Error in ode45: issue with length of initial conditions vector

5 ビュー (過去 30 日間)
Agniva
Agniva 2024 年 9 月 4 日
コメント済み: Sam Chak 2024 年 9 月 4 日
Hey all, I was trying to solve the differential equation dUp/dt = c(U-Up) using ode45 in MATLAB.
I have U(A,x,y,t) as a user defined function. I then created the odefun file as follows:
function dydt = odefun(t,up,x,y,A,c,E)
global A c x y E
dydt = c.*(u(A,x,y,t) - up);
end
I then tried to calculate and plot Up vs t. The code is as follows:
A = 1.2;
E = 0.1;
c = 0.1;
x = 1;
y = 0;
tspan = [0 1];
y0 = 0;
[t,up] = ode45(@(t,up)odefun(t,up,x,y,A,c,E), tspan, y0);
plot(t,up)
I keep getting this error:
Error using odearguments
@(T,UP)ODEFUN(T,UP,X,Y,A,C,E) returns a vector of length 0, but the length of initial conditions vector is 1. The vector
returned by @(T,UP)ODEFUN(T,UP,X,Y,A,C,E) and the initial conditions vector must have the same number of elements.
I have seen some community posts that have addressed this issue, but those are generally for a system of equation. I am unable to figure out what the issue is in this case. Please help.

回答 (1 件)

Star Strider
Star Strider 2024 年 9 月 4 日
The ‘u’ function is either not being called correctly or not written correctly. In any event, it is miissing in the posted code.
Supplying a ‘u’ that is reasonable works —
A = 1.2;
E = 0.1;
c = 0.1;
x = 1;
y = 0;
tspan = [0 1];
y0 = 0;
[t,up] = ode45(@(t,up)odefun(t,up,x,y,A,c,E), tspan, y0);
plot(t,up)
function dydt = odefun(t,up,x,y,A,c,E)
u = @(A, x, y, t) A*x*y+t; % Create 'u' (Not Posted)
dydt = c.*(u(A,x,y,t) - up);
end
.
  5 件のコメント
Agniva
Agniva 2024 年 9 月 4 日
@Sam Chak Thanks for your response. I would like to clarify that 'u' is a periodic function w.r.t. 't'. However, some terms in construction of 'u' do blow up, but because of the presence of other terms, 'u' is perfectly bounded.
Sam Chak
Sam Chak 2024 年 9 月 4 日
Hi @Agniva,
I do not understand how the function u can be both unbounded and perfectly bounded at the same time. The adjective "bounded" is a mathematical property and does not imply that the function u has finite values under certain conditions. As t approaches specific values, if the function can take on arbitrarily large values, then it is unbounded.
Perhaps you could consider posting the entire function u here and exploring how to use the Events feature in the ODE solver, as advised by @Star Strider.

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

カテゴリ

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