필터 지우기
필터 지우기

Turning imaginary numbers into real numbers

조회 수: 18 (최근 30일)
Colin Lynch
Colin Lynch 2018년 2월 12일
댓글: Walter Roberson 2018년 2월 12일
Hello there!
I am attempting to find the points where n = S with the following equations. Whenever S goes into the imaginary plane though, I want it to convert to S = 1. Even though I have a check for that in this code, for some reason MATLAB seems to be ignoring that bit and converting S into 0 instead. How can I fix this?
for k = 1:1:100
n = (100 / k);
s = sqrt((((.25*(n-(.5*(100-n))))/(n))-.25)/(-((n - .5*(100-n)))/(n)));
if (0<=s) && (s<=1)
s = s;
elseif s > 1
s = 1;
elseif (isnan(s)==1)
s = 1;
elseif (isreal(s)==0)
s = 1;
else
s = 1;
end
RTDlineark{k} = [k];
RTDlinearkn{k} = [n];
RTDlinearks{k} = [s];
end

채택된 답변

Birdman
Birdman 2018년 2월 12일
To get rid of that, your code can be improved as follows:
for k = 1:1:100
n = (100 / k);
s = sqrt((((.25*(n-(.5*(100-n))))/(n))-.25)/(-((n - .5*(100-n)))/(n)));
if (0<s) && (s<=1)
s = s;
elseif s > 1
s = 1;
elseif (real(s)>=0) && imag(s)~=0
s = 1;
end
RTDlineark{k} = [k];
RTDlinearkn{k} = [n];
RTDlinearks{k} = [s];
end
  댓글 수: 1
Walter Roberson
Walter Roberson 2018년 2월 12일
This happens to work with the data, but still suffers from the problem of using < and <= operators on complex quantities, as those operators are defined to ignore the complex component.

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

추가 답변 (2개)

Andrei Bobrov
Andrei Bobrov 2018년 2월 12일
k = 1:100;
n = 100 ./ k;
s = sqrt( (.25*(n-.5*(100-n))./n-.25)./-(n - .5*(100-n))./n );
t = abs(imag(s)) > 0;
s(t) = t(t) + 0;

Walter Roberson
Walter Roberson 2018년 2월 12일
The relative comparison operations ignore the imaginary component. You need to do the test for imaginary first.

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by