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

 채택된 답변

Cris LaPierre
Cris LaPierre 2020년 12월 19일

1 개 추천

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

Paolo De Ciccio
Paolo De Ciccio 2020년 12월 19일
편집: Paolo De Ciccio 2020년 12월 19일
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?
Cris LaPierre
Cris LaPierre 2020년 12월 19일
Are the outputs I got what is expected? If so, I think you need to clear your workspace.
Paul
Paul 2020년 12월 19일
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.
Paolo De Ciccio
Paolo De Ciccio 2020년 12월 19일
편집: Paolo De Ciccio 2020년 12월 19일
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.
Cris LaPierre
Cris LaPierre 2020년 12월 19일
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.
Paolo De Ciccio
Paolo De Ciccio 2020년 12월 19일
Very nice answers, thank you!
Paolo De Ciccio
Paolo De Ciccio 2020년 12월 19일
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.
Paolo De Ciccio
Paolo De Ciccio 2020년 12월 19일
편집: Paolo De Ciccio 2020년 12월 19일
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.
Paolo De Ciccio
Paolo De Ciccio 2020년 12월 19일
I can accept only one answer, but I appreciated a lot all of yours

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

릴리스

R2020b

질문:

2020년 12월 19일

댓글:

2020년 12월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by