Complex Wave used in real expression
igornoob12
When running the following function I always get a "Complex Wave used in real expression". The debugger shows that this happens in one of the if statements.
What is the problem?
Function getOmegaRsqr(rootWave,outputwave)
Wave/C rootWave
Wave outputwave
NVAR alpha,betaa,bigOmega, omega0sqr
Variable c1,c2,force
variable j = 0
for(j=0;j<dimSize(rootWave,0);j+=1)
force = pnt2x(rootWave,j)
c1 = (alpha*force^2)/(2*bigOmega^2)
c2 = omega0sqr + (3*betaa*force^2)/(2*bigOmega^2)
make/o/d/n=2 rootsTEMP
variable count =0
variable i=0
for(i=0;i<3;i+=1)
if((abs(imag(rootWave[j][i])/sqrt(magsqr(rootWave[j][i]))))<0.00000001) //"Complex Wave used in real expression"
if(c2+2*alpha*rootWave[j][i] + 3*betaa*(rootWave[j][i])^2 > 0) //or possibly here
rootsTEMP[count]=real(rootWave[j][i])
count+=1
endif
elseif((abs(sqrt(magsqr(rootWave[j][i]))))<0.0000000000000001) //"Complex Wave used in real expression"
if(c2+2*alpha*rootWave[j][i] + 3*betaa*(rootWave[j][i])^2 > 0) //or possibly here
rootsTEMP[count]=real(rootWave[j][i])
count+=1
endif
endif
Endfor
Variable root
if(count == 0)
print force
endif
if(count ==1)
root = rootsTEMP[0]
elseif(count == 2)
//print rootsTEMP
if(alpha>0)
root = wavemax(rootsTEMP)
else
root = wavemin(rootsTEMP)
endif
endif
//print root
outputwave[j] = c2 + 2*alpha*root+ 3*betaa*root^2
Endfor
killwaves rootsTEMP
End
Wave/C rootWave
Wave outputwave
NVAR alpha,betaa,bigOmega, omega0sqr
Variable c1,c2,force
variable j = 0
for(j=0;j<dimSize(rootWave,0);j+=1)
force = pnt2x(rootWave,j)
c1 = (alpha*force^2)/(2*bigOmega^2)
c2 = omega0sqr + (3*betaa*force^2)/(2*bigOmega^2)
make/o/d/n=2 rootsTEMP
variable count =0
variable i=0
for(i=0;i<3;i+=1)
if((abs(imag(rootWave[j][i])/sqrt(magsqr(rootWave[j][i]))))<0.00000001) //"Complex Wave used in real expression"
if(c2+2*alpha*rootWave[j][i] + 3*betaa*(rootWave[j][i])^2 > 0) //or possibly here
rootsTEMP[count]=real(rootWave[j][i])
count+=1
endif
elseif((abs(sqrt(magsqr(rootWave[j][i]))))<0.0000000000000001) //"Complex Wave used in real expression"
if(c2+2*alpha*rootWave[j][i] + 3*betaa*(rootWave[j][i])^2 > 0) //or possibly here
rootsTEMP[count]=real(rootWave[j][i])
count+=1
endif
endif
Endfor
Variable root
if(count == 0)
print force
endif
if(count ==1)
root = rootsTEMP[0]
elseif(count == 2)
//print rootsTEMP
if(alpha>0)
root = wavemax(rootsTEMP)
else
root = wavemin(rootsTEMP)
endif
endif
//print root
outputwave[j] = c2 + 2*alpha*root+ 3*betaa*root^2
Endfor
killwaves rootsTEMP
End
since the "if" commands expects a real value and the compiler is told ("/C") that rootwave is complex.
There is some "magsqr", "real", "imag", etc missing (like you used them in the line just above :-) )
HJ
August 5, 2015 at 09:51 am - Permalink
You are right, thanks. The first "if" checks if the number is real so I assumed that the value is "real".
August 5, 2015 at 10:38 am - Permalink