Hello,
I would like to know if its correct to write my differential equations as follow in the 'if' command in the function file. If not, please advice. I am trying to model a simple damper.
Thanks.
function [dy] = SDOF2(t, u);
dy = zeros(2,1);
m=1000; %Mass (lb.sec^2/in.)
k =100000; %Stiffness (lb/in.)
omega = sqrt(k/m); %Natural Frequency
c=2000;%Damping coefficient (lb.sec/in.)
g =386;%Acceleration of gravity (in./sec^2)
c_cr=2*m*omega; %Critical damping coefficient
xi = c/c_cr;%Damping ratio
%%Define the forcing function
% if t<=0.5
% F = sin(4*pi*t);
% else
% F =0;
F = 0;
% b=1*m*(((-omega*omega*u(1)-2*xi*omega*u(2)+F))/u(2)>0);
% end %%%%-ESTIMATION-%%%%
if ((((-omega*omega*u(1))-(2*xi*omega*u(2))+F/m)/u(2))>0)
dy(1) = u(2);
dy(2)= -omega*omega*u(1)-2*xi*omega*u(2)+F/m-0.5*m*((-omega*omega*u(1))-(2*xi*omega*u(2))+F/m);
else
dy(1) = u(2);
dy(2)= -omega*omega*u(1)-2*xi*omega*u(2)+F/m;
end
% dy(2)= -omega*omega*u(1)-2*xi*omega*u(2)+F/m;
end

7 Kommentare

Walter Roberson
Walter Roberson am 9 Jan. 2020
You need to switch to using event functions to terminate the ode45 call and then restart it.
ode45 requires that the function be differentiable. When you have an if in the function it is rarely differentiable. You need to stop at the discontinuity and restart.
Komal Rajana
Komal Rajana am 10 Jan. 2020
Bearbeitet: Komal Rajana am 10 Jan. 2020
HI Walter,
But is it possible to specify the 'value' as >0 in the event and not '='?
thanks
Walter Roberson
Walter Roberson am 10 Jan. 2020
Strictly speaking, no. However you can subtract eps(realmin) from the value as the result will be negative if the value was exactly 0.
Aquatris
Aquatris am 10 Jan. 2020
It might be easier to write your own RK method for this problem.
Komal Rajana
Komal Rajana am 10 Jan. 2020
Bearbeitet: Komal Rajana am 10 Jan. 2020
Hi Aquatris,
Can you provide an example...I am having a horrible time with this.
thanks,
Komal
Meg Noah
Meg Noah am 10 Jan. 2020
There's a solution here on the web:
Also, I've implemented a Runge-Kutta to solve baseball motion under atmosphere drag and lift:
It's a 3-D version.
Aquatris
Aquatris am 10 Jan. 2020
There are a lot of examples online, here is on of them.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Jyothis Gireesh
Jyothis Gireesh am 12 Feb. 2020

0 Stimmen

It is my understanding that the differential equation is a function of “u(1)” and “u(2)”. So it is safe to assume that “u(1)” and “u(2)” are symbolic variables (or can be defined as symbolic). In this case, it may be better to use the “piecewise” function which allows conditionally defined expressions or functions.
Please refer to the following documentation link to get information on “piecewise” function

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by