%% ----------Chua.m----------
function out = chua(t,in)
x = in(1);
y = in(2);
z = in(3);
alpha = 15.6;
beta = 28;
m0 = -1.143;
m1 = -0.714;
h = m1*x+0.5*(m0-m1)*(abs(x+1)-abs(x-1));
xdot = alpha*(y-x-h);
ydot = x - y+ z;
zdot = -beta*y;
out = [xdot ydot zdot]';
end
% ----------StartChua.m----------
% [t,y] = ode45(#Chua,[0 100],[0.7 0 0]);
% plot3(y(:,1),y(:,2),y(:,3))
% grid
Everytime when I use [t,y] = ode45(#Chua,[0 100],[0.7 0 0]); I get an error:
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Also in the code it tells me, the function might be unused. I dont get it, this code should work.
I am on the right path, that I know, also I am not using anthing that can't be compiled.
Related
There is no specific error, it just simply says "error" and shows a line in ode45 that supposedly is not in line with what I have written. If someone could give me a quickfix to this problem I would be greatful. Code and error message presented below:
Code:
tstart = 0;
tfinal = 10;
y0 = [0.18; 0.10; 0; 0];
[t,y] = ode45(#secondODE,[tstart tfinal], y0);
function dy = secondODE(t,y)
dy = zeros(4,1);
dy(1) = y(2);
dy(2) = -c/A2*y(1);
dy(3) = y(4);
dy(4) = D2/B2 + c*C2/(A2*B2)*y(1);
end
Error message:
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in bJAa (line 4)
[t,y] = ode45(#secondODE,[tstart tfinal], y0);
I'm having a problem developing my GUI to solve a differential equation and I can not find the error.
The equation I'm trying to solve is defined by:
T*x'+x = kSigma*heaviside(t-t0) + kSin*sin(Omega*t+alpha*pi/180).
The approach I have tried is:
function lsg = DGLvar(t,T,Omega)
x = 1;
kSin = 1;
kSigma = 5;
t0 = 0;
alpha = 0;
lsg = 1/T * (-x + kSigma*heaviside(t-t0) + kSin*sin(Omega*t+alpha*pi/180) );
In the GUI the code looks like this:
function pushbutton1_Callback(hObject, ~, handles)
t=[0 100];
periode=get(handles.sliderT,'value');
Omega=get(handles.slideromega,'value');
[x,t]=ode45(#DGLvar,t,periode,Omega);
plot(handles.axes2,x,t,'g')
I'm getting the following error:
Error using DGLvar (line 8)
Not enough input arguments.
Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 113)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in PT1>pushbutton1_Callback (line 218)
[x,t]=ode45(#DGLvar,t,periode,Omega);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in PT1 (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in #(hObject,eventdata)PT1('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
How can I resolve this error?
The solver ode45 expects as input a function f(t,x) and uses this to solve the equation x'=f(t,x).
You need to use x as a parameter for your function DGLvar. I would also recommend renaming it to xprime, as this is more descriptive.
function xp = xprime(t,x,T,Omega)
kSin = 1;
kSigma = 5;
t0 = 0;
alpha = 0;
xp = 1/T * (-x + kSigma*heaviside(t-t0) + kSin*sin(Omega*t+alpha*pi/180) );
The GUI code would look like this:
%% Get the GUI values:
tspan = [0 100];
x0 = 0;
T = get(handles.sliderT, 'value');
Omega = get(handles.slideromega, 'value');
%% Define a function with two parameters #(t,x) for ode45.
xprimefixedTandOmega = #(t,x) xprime(t, x, T, Omega);
%% Solve the equation: x' = xprimefixedTandOmega(t,x), x(0)=0 for t=0...100.
[t,x] = ode45(xprimefixedTandOmega, tspan, x0);
%% Plot the result of solver
plot(handles.axes2, t, x, 'g');
I am trying to solve a system of differential equations, but MATLAB ODE solver is giving me the following error:
Error in
#(t,x)[20000/NA*(-k1*x(1)*x(2)+k_n1*x(3)+krec*(1-fL)*x(4));
-k1*x(1)*x(2)+k_n1*x(3)-keR*x(2)+krec(1-fR)*x(5)+Vs;
k1*x(1)*x(2)-(k1+keC)*x(3);keC*x(2)-(kdegL*fL+krec*(1-fL))*x(4);
keR*x(2)+keC*x(3)-(kdegR*fR+krec(1-fR))*x(5)]
Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options,
varargin);
Error in cmp_2_bme (line 49)
[t, var] = ode45(f1, [0 30], [0, NR, 0, 0, NRi]);
My code is the following:
k1 = 7.2*10^7;
k_n1 = 0.3;
keR = 0.03;
keC = 0.30;
krec = 0.08;
kdegR = 0.0022;
kdegL = 0.01;
fR = 0.2;
fL = 0.05;
NA = 6.0221409*10^23;
NR = 0.5*10^5;
Vs = 10.2421
NRi = 2.3277e+04
f1 = #(t, x) [1/NA*(-k1*x(1)*x(2)+k_n1*x(3)+krec*(1-fL)*x(4)); ...
-k1*x(1)*x(2)+k_n1*x(3)-keR*x(2)+krec(1-fR)*x(5)+Vs;...
k1*x(1)*x(2)-(k1+keC)*x(3); ...
keC*x(2)-(kdegL*fL+krec*(1-fL))*x(4);...%Nli
keR*x(2)+keC*x(3)-(kdegR*fR+krec(1-fR))*x(5)] %Nri
[t, var] = ode45(f1, [0 30], [0, NR, 0, 0, NRi]);
I am unsure why the error is referring to ODE151I when I am using ODE45.
Thank you!
I am trying to write a simple Matlab code to model a projectile. Whenever I try to run the code I get an error saying there are too many input arguments. I am running the code with
model1(44.7, 45)
function[] = model1(vel, angle)
close all;
tspan = [0 3];
x0 = [0; 0.915; vel*cos(angle); vel*sin(angle)];
[x] = ode45(#ball, tspan, x0);
function xdot = ball(x)
g = 9.81;
xdot = [x(3); x(4); 0; -g];
end
end
Error using model1/ball
Too many input arguments.
Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options,
varargin);
Error in model1 (line 9)
[x] = ode45(#ball, tspan, x0);
I'd appreciate any advice!
The error was (what I also committed many times in the past) that you have to pass the independent variable (time, in this case) too.
function [t, x] = model1(vel, angle)
tspan = [0 3];
x0 = [0; 0.915; vel*cos(angle); vel*sin(angle)];
[t, x] = ode45(#ball, tspan, x0);
end
function xdot = ball(t,x)
g = 9.81;
xdot = [x(3); x(4); 0; -g];
end
I modified your code to return the solution and the corresponding time steps. Moreover, I removed ball to be a nested function.
I'm having a problem developing my GUI to solve a differential equation and I can not find the error.
The equation I'm trying to solve is defined by:
T*x'+x = kSigma*heaviside(t-t0) + kSin*sin(Omega*t+alpha*pi/180).
The approach I have tried is:
function lsg = DGLvar(t,T,Omega)
x = 1;
kSin = 1;
kSigma = 5;
t0 = 0;
alpha = 0;
lsg = 1/T * (-x + kSigma*heaviside(t-t0) + kSin*sin(Omega*t+alpha*pi/180) );
In the GUI the code looks like this:
function pushbutton1_Callback(hObject, ~, handles)
t=[0 100];
periode=get(handles.sliderT,'value');
Omega=get(handles.slideromega,'value');
[x,t]=ode45(#DGLvar,t,periode,Omega);
plot(handles.axes2,x,t,'g')
I'm getting the following error:
Error using DGLvar (line 8)
Not enough input arguments.
Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 113)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in PT1>pushbutton1_Callback (line 218)
[x,t]=ode45(#DGLvar,t,periode,Omega);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in PT1 (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in #(hObject,eventdata)PT1('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
How can I resolve this error?
The solver ode45 expects as input a function f(t,x) and uses this to solve the equation x'=f(t,x).
You need to use x as a parameter for your function DGLvar. I would also recommend renaming it to xprime, as this is more descriptive.
function xp = xprime(t,x,T,Omega)
kSin = 1;
kSigma = 5;
t0 = 0;
alpha = 0;
xp = 1/T * (-x + kSigma*heaviside(t-t0) + kSin*sin(Omega*t+alpha*pi/180) );
The GUI code would look like this:
%% Get the GUI values:
tspan = [0 100];
x0 = 0;
T = get(handles.sliderT, 'value');
Omega = get(handles.slideromega, 'value');
%% Define a function with two parameters #(t,x) for ode45.
xprimefixedTandOmega = #(t,x) xprime(t, x, T, Omega);
%% Solve the equation: x' = xprimefixedTandOmega(t,x), x(0)=0 for t=0...100.
[t,x] = ode45(xprimefixedTandOmega, tspan, x0);
%% Plot the result of solver
plot(handles.axes2, t, x, 'g');