LaPlace Transform with initial conditions

I am having a hard time using MATLAB to solve LaPlace transforms.
I need to solve
I don't really understand how to write the derivatives in MATLAB, or set the initial conditions using built ins. Or are there built ins?
2022a

 采纳的回答

The procedure is not exactly straightforward, so I will demonstrate a working approach —
syms s t y(t) Y(s)
D1y = diff(y);
D2y = diff(D1y);
Eqn = D2y + 7*D1y + 12*y == 14*heaviside(2)
Eqn(t) = 
LEqn = laplace(Eqn)
LEqn = 
LEqn = subs(LEqn, {laplace(y(t),t,s), y(0), D1y(0)}, {Y(s), 2, 0})
LEqn = 
LEqn = isolate(LEqn, Y(s))
LEqn = 
y(t) = ilaplace(rhs(LEqn))
y(t) = 
figure
fplot(y, [0 2.5])
grid
Experiment with my code to understand how it works.
.

12 个评论

Shoud the RHS of Eqn be: 14*2*heavisde(t)?
The u function involved is some constant function, not heaviside. The initial conditions say that u(t)=2 not u(0)=2. Heaviside does not have a strict definition at 0, with u(0)=0 and u(0)=1 and u(0)=1/2 all having their uses, so it would be pretty unusual but not strictly wrong to say u(0)=2. But we are not told u(0)=2, we are told u(t)=2, which includes u(-1) and u(0) and u(1) all = 2. Not heaviside.
The problem statement says that "u(t) = 2." The problem statement also says to solve the equation via the Laplace transform, which typically is the one-sided transform, and certainly is in Matlab's laplace() function, which implies the input is zero for t < 0-. All in all within the context of the problem statement, I'd say it's safe to assume that the statement "u(t) = 2" really means u(t) = 2*heavisde(t). Only the OP will know for sure.
You guys are awesome. I haven't played any laplace stuff in MATLAB like heaviside or laplace/ilaplace. I am still a little shakey on how to correctly use subs, especially when subbing multiple things.
I need to do some more MATLAB classes haha.
I kept trying it by making an equation with a @(t) handle, which was not working.
This is extremely helpful. Though, I am not 100% confident I could repeat this on my own, I will play with this and apply it to some other problems.
Would this be an acceptable way of solving this? By not using heaviside?
I know this is more of a math question vs MATLAB.
clear;clc;
disp('Problem 1')
Problem 1
syms s t y(t) Y(s) u(t) U(s)
d1y=diff(y);
d2y=diff(d1y);
eq1=d2y+7*d1y+12*y==14*u
eq1(t) = 
Leq1=laplace(eq1)
Leq1 = 
Leq1=subs(Leq1,{laplace(y(t),t,s),y(0),d1y(0), laplace(u(t),t,s)},{Y(s),2,0,2})
Leq1 = 
Leq1=isolate(Leq1,Y(s))
Leq1 = 
y(t)=ilaplace(rhs(Leq1))
y(t) = 
fplot(y,[0 2.5])
grid on
Yes!
(I usually interpret as the unit step or Heaviside function, however here that appears not to be correct.)
.
What is the justification for the substitution U(s) = 2?
@Paul I guess you are right. u(t)=2, not U(s)=2
This seems to be the (or a) solution to this problem.
I have been trying to maniupulate MATLAB to give a similar solution, but I cannot get there.
The original Laplace transform:
does not appear to contain u.
I don’t understand where it came from.
If it’s just a constant:
syms s t u y(t) Y(s)
D1y = diff(y);
D2y = diff(D1y);
Eqn = D2y + 7*D1y + 12*y == 14*2*u;
LEqn = laplace(Eqn);
LEqn = subs(LEqn, {laplace(y(t),t,s), y(0), D1y(0)}, {Y(s), 2, 0});
LEqn = isolate(LEqn, Y(s))
LEqn = 
y(t) = ilaplace(rhs(LEqn))
y(t) = 
y(t) = expand(y(t))
y(t) = 
That’s likely as close as it’s possible to get to the intended result.
.
Looks good enough to me. I appreciate the knowledge of laplace in MATLAB!
Thank you!
It’s much more useful now than when it was introduced.
The posted solution in this comment is a peculiar approach. The first equation for Y(s) seems o.k. with the u(t) = 2 being expressed more formally as u(t) = 2*heaviside(t) and U(s) = 2/s, which is why we see the 2 in the numerator and s in the denominator on the first term on the RHS. But in the next step it looks like the 2 in the numerator is replaced with a symbolic constant, also called u (with the expectation that eventually u will be replaced with 2 as stated in the parenthetical). So in the end, the posted solution is the response of the system with the initial conditions y(0) = y0, ydot(0) = 0, and input u(t) = u*heaviside(t).
syms s
syms t y0 real
syms y(t) Y(s) u(t) U(s)
d1y=diff(y);
d2y=diff(d1y);
eq1=d2y+7*d1y+12*y==14*u(t)
eq1(t) = 
Leq1=laplace(eq1);
Leq1=subs(Leq1,{laplace(y(t),t,s),y(0),d1y(0), laplace(u(t),t,s)},{Y(s),y0,0,U(s)})
Leq1 = 
Leq1=isolate(Leq1,Y(s))
Leq1 = 
syms u real % reusing the same variable name, unfortunately
Leq1 = subs(Leq1,U(s),laplace(u*heaviside(t)))
Leq1 = 
Leq1 = partfrac(Leq1,s) % same as shown in the posted solution
Leq1 = 
y(t) = ilaplace(rhs(Leq1))
y(t) = 
Which is the same as the posted solution. I would write it as
y(t) = ilaplace(rhs(Leq1))*heaviside(t)
y(t) = 
The steps in the posted solution are very strange, IMO, to first use the explicit expression u(t) = 2*heaviside(t), based on the problem statement, and then subsequently switch to the general u(t) = u*heaviside(t), all the while only ever using the symbolic constant for the initial condition.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Symbolic Math Toolbox 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by