ilaplace confusing - result from command window and from m file gui is not the same

Hi,
I write in command window:
ilaplace((0.99984898859777815438576453743735*s^2 + 1414.0*s - 414151.01140222184561423546256265)/((s + 1000.0)*(s^2 + 1000000.0)))
And I got : ans =
(199002808534433793169*cos(1000*t))/140737488355328000000 - 58286573144567511919/(140737488355328000000*exp(1000*t)) - (1169*sin(1000*t))/140737488355328000000
I write the same in m file from GUI and I got:
0.707*exp(1000.0*t*i) - 0.41415101140222184561423546256265/exp(1000.0*t) + 0.707*(1/exp(1000.0*t*i))
WHY I GOT COMPLEX NUMBER? "i"?

 Risposta accettata

Mischa Kim
Mischa Kim il 21 Gen 2014
Modificato: Mischa Kim il 21 Gen 2014
Hello John, it is actually the same. Try plotting the two results.
The reason you get complex numbers is because of Euler's formula:
exp^(ix) = cos(x) + i*sin(x)
If you analyze the results you'll see that you get (really) small imaginary numbers. That's because the computation is done in floating point arithmetic (see this answer). In case you are not comfortable with the imaginary parts, just plot the real parts.

12 Commenti

I was thinking, that from inverse Laplace transformation I get only time domain, not imaginary...
and why result is not the same in command window and in m file gui?- I mean only time domain?
Have a look at the first and last term of the GUI result:
0.707*exp(1000.0*t*i) + 0.707*(1/exp(1000.0*t*i))
According to Euler this should equal to
2*0.707*cos(1000.0*t)
Evaluate both terms at, e.g., t=3:
0.707*exp(1000.0*3*i) + 0.707*(1/exp(1000.0*3*i))
ans =
-1.379614630638451 - 0.000000000000000i
versus
2*0.707*cos(1000.0*3)
ans =
-1.379614630638451
In other words, the method (inverse Laplace) is just fine. It's the computer that does not quite get it right.
Should I change computer :-) ?
If I use command "abs" for result from ilaplace, I should get what I need. But I got this:
abs(0.707*exp(1000.0*t*i) - 0.41415101140222184561423546256265/exp (1000.0*t) + 0.707*(1/exp(1000.0*t*i)))
What happend? Maybe ilaplace is not problem....problem is somewhere else.
But where?
Use simplify to do just that, simplify:
syms t
res = 0.707*exp(1000.0*t*i) - 0.41415101140222184561423546256265/exp(1000.0*t) + 0.707*(1/exp(1000.0*t*i));
simp_res = simplify(res, 'Criterion', 'preferReal', 'Steps', 100)
simp_res =
(707*cos(1000*t))/500 - (7460681362504641*exp(-1000*t))/18014398509481984
Hi, I got error:
??? Error using ==> sym.simplify
Too many input arguments.
I use matlab R2011a
In command window for:
a=simplify(70.7*exp(1000.0*t*i)*i + 41.415101140222184561423546256265/exp(1000.0*t) - 70.7*(1/exp(1000.0*t*i))*i)
b=simplify(exp(1000.0*t*i)*(70.7*i + 70.7) + (1/exp(1000.0*t*i))*(70.7 - 70.7*i))
I got result quickly, but in m file gui program stop by "a" command and program does not nothing for 2 minutes, no error...like bussy...after 2 minutes I got result...why so long in gui?
Excellent. What was/is the issue with the GUI performance? How did you get it resolved?
I used simplify.....but I can not set number of steps or 'Criterion', 'preferReal'...I have matlab R2011a ....this is maybe problem.
I wrote, that calculation takes long time......but only first time....next time calculation is much faster...I do not know why? Some of result of calculation are storem in RAM memory or whay?
Thank you
I use Matlab version 2011a. If I set steps of simplify, than I get error:
syms t
res = 0.707*exp(1000.0*t*i) - 0.41415101140222184561423546256265/exp(1000.0*t) + 0.707*(1/exp(1000.0*t*i));
simp_res = simplify(res, 'Criterion', 'preferReal', 'Steps', 100)
??? Error using ==> sym.simplify
Too many input arguments.
Do I need change version of Matlab, or what?
Thank you
Sorry, but for relative little number simplify doesn't help.
In command window I it is OK, I get:
>> r=simplify(ilaplace(-((4280819729186186979044460847261*s^2)/51422017416287688817342786954917203280710495801049370729644032 + (994733177774077628149071673933*s)/50216813883093446110686315385661331328818843555712276103168 - 949357667952072971550917252451/1569275433846670190958947355801916604025588861116008628224)/((3*s + 200)*(s^2 + 98596))))
r =
19981467697883435869/(3970734387895709337413208929317684822969348320657408*exp((200*t)/3)) - (694227838351497933185*cos(314*t))/21177250068777116466203780956360985722503191043506176 - (11693735405742169632973*sin(314*t))/831207065199501821298498402537168689608250248457617408
But in guide I get:
r=simplify(ilaplace(-((4280819729186186979044460847261*s^2)/51422017416287688817342786954917203280710495801049370729644032 + (994733177774077628149071673933*s)/50216813883093446110686315385661331328818843555712276103168 - 949357667952072971550917252451/1569275433846670190958947355801916604025588861116008628224)/((3*s + 200)*(s^2 + 98596))))
r =
3.0679013785265445477520983725365*10^(-35)*dirac(t)
Why? It is sooo bad!

Accedi per commentare.

Più risposte (0)

Tag

Richiesto:

il 20 Gen 2014

Modificato:

il 27 Feb 2014

Community Treasure Hunt

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

Start Hunting!

Translated by