Different outputs with same inputs

Hello everyone,
, in
As you can see in image I'm trying to write in different forms a transfer function wich has {10+j, 10-j} poles. I obtained two different expressions, in facts in the 1st case I have {10+j, 10-j} poles, in the 2nd case I have {10, 10} poles, without no imag part.
I also tried an other case: a transfer function wich has {-10+j, -10-j} poles, but in this attempt I multiplyied the imag part with a number very close to 1, and I obtained the desiderd result: {-10+j, -10-j}. I believe that is so strange, so the question is: why I have different outputs with same inputs? It's a bug? Memory management issue? A typo?
My setup is Matlab R2020b, Windows 10 - 64 bit, Ryzen 7 4700U - 8 GB RAM

 Accepted Answer

Not sure what the question is, but something is not adding up in your examples. Try clearing your workspace and running your examples again.
s=tf('s');
1/((s+10)^2 +1)
ans = 1 ---------------- s^2 + 20 s + 101 Continuous-time transfer function.
% Your screenshot shows "+100" in the denominator
1/((s+i+10)*(s-i+10))
ans = 1 ---------------- s^2 + 20 s + 101 Continuous-time transfer function.
% Your screenshot shows "+100" in the denominator
1/((s+i-10)*(s-i-10))
ans = 1 ---------------- s^2 - 20 s + 101 Continuous-time transfer function.
If you know your zero, pole, and gain, you can also use that to create your transfer function?
Z = [];
P = [-10-1i -10+1i];
K = 1;
G = zpk(Z,P,K)
G = 1 ----------------- (s^2 + 20s + 101) Continuous-time zero/pole/gain model.

12 Comments

Thank you for your answer, my question was about I have different outputs. I also updated my question to clarify. It's a bug? Memory management issue? A typo?
Are the outputs I got what is expected? If so, I think you need to clear your workspace.
Or at least clear the variable i, which may be set to a value of 0? Or change i to 1i, which would be much clearer.
Cris: yes, you got what is expected. Paul: "i" it's a variable? Not a constant? Why do we sometimes need to clean workspace?
Actually, i is a built in function
>> which i
built-in (C:\Program Files\MATLAB\R2019a\toolbox\matlab\elmat\i)
That built in function returns what you expect
>> i
ans =
0.0000 + 1.0000i
Unless you override by defining a same-named variable in your workspace (or other means of overriding the built-in function), which looks like might be the case based on the results you posted.
>> i=0;
>> i
i =
0
To avoid the problem and still use i as a variable, use the syntax 1i all the time
>> 1i
ans =
0.0000 + 1.0000i
Based on the result in your screen capture, it just looks like you have defined a variable i and its value is zero.
There is a precedence to how MATLAB decides what to do. Highest priority goes to variables you define, even if they have the same name as a built in function/constant.
Clearing a variable you defined allows MATLAB to again call the built in function.
See Function Precedence Order for more details.
Very nice answers, thank you!
It seems that can happens also I never defined a variable or function (or nothing else) named "i"
You can always find what function MATLAB is calling by using the which function.
which i
built-in (/MATLAB/toolbox/matlab/elmat/i)
i=0;
which i
i is a variable.
So, can a new function or variable (in my case with value equal to 0, probably) does not appear in workspace? That's look like a built-in function defined during my execution
Technically yes. You can create custom functions that can be called by your code, but are not variables that appear in the workspace. That is likely not the case with i.
This is a computer program, though, so sometimes clearig the memory or just restarting the program can fix unexpeted behavior.
Recreating your eamples again:
s=tf('s');
i=0;
1/((s+i+10)*(s-i+10))
ans = 1 ---------------- s^2 + 20 s + 100 Continuous-time transfer function.
1/(s+1.00000000001i-10)/(s-1.00000000001i-10)
ans = 1 ---------------- s^2 - 20 s + 101 Continuous-time transfer function.
% Now fix the issue by clearing i
clear i
1/((s+i+10)*(s-i+10))
ans = 1 ---------------- s^2 + 20 s + 101 Continuous-time transfer function.
I can accept only one answer, but I appreciated a lot all of yours

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Release

R2020b

Community Treasure Hunt

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

Start Hunting!