Differential Equations MATLAB issue

6 次查看(过去 30 天)
Hannah Pike
Hannah Pike 2021-3-19
评论: darova 2021-3-20
So for my Differential Equations class, we have a project about a spring. It provides and equation, and an initial condition, and asks to make a plot of it. To solve this through code, I had to make one function and one main code. However, when I run my code, I get an error message that says ...
" Error using odearguments (line 93)
NONLINEAR must return a column vector.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in Project1_Main (line 6)
[t,y] = ode45('nonlinear', tspan, y);"
The weird thing about this error is that I have no where near 115 lines of code (l literally have like 8 lines), and NONLINEAR is not a vector its the name of my function.
Please help me fix my code so that it operates. I will post the question I am solving and my code, hopefully somone can help me find my mistake.
Problem:
Suppose a nonlinear spring-mass system satisfies the initial value problem ( u 00 + u + Eu3 = 0 u(0) = 0, u0 (0) = 1
Use ode45 and plot to answer the following: 1. Let E = 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 and plot the solutions of the above initial value problem for 0 ≤ t ≤ 20. Estimate the amplitude of the spring.
My Main Code:
tspan = [0 20];
y = [0 ; 0];
[t,y] = ode45('nonlinear', tspan, y);
plot(t,y(:,1))
grid
xlabel("time")
ylabel("u")
title("u vs v")
hold on
My Function Code:
function yp = nonlinear(t, y)
e = 0.2;
y(1)= y(2);
yp(2) = (-y(1) - e ^ (t * (y(1) ^ 3)));

回答(1 个)

Alan Stevens
Alan Stevens 2021-3-19
Make sure your function 'nonlinear' returns a column vector. Your have initial conditions as [0, 0]. This should be either [0, 1] (as used below) or [1, 0], I think.
tspan = [0 20];
y = [0 ; 1];
[t,y] = ode45(@nonlinear, tspan, y); % Call the function like this
plot(t,y(:,1))
grid
xlabel("time")
ylabel("u")
title("u vs v") % You are plotting u vs time not u vs v
hold on
%My Function Code:
function yp = nonlinear(t, y) % Must return a column vector
e = 0.2;
yp = [y(2);
(-y(1) - e ^ (t * (y(1) ^ 3)))];
end

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by