如何在 Igor64 中将波浪放入程序中的函数中
How to put waves into functions in procedures in Igor64
我写了一个程序,通过一些计算从另一个中产生一个波浪。该过程如下所示:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Wave lambda
lambda = 1240/energy
Wave KK
KK = lambda*lambda
Wave w
w = 1 - 93.33/KK
Wave Q
Q = 1/(w*w*lambda*sqrt(1+135/w))
Wave delta
delta = (Q*1.6*100000+2)*pi/180
Duplicate/O rotation, $calculated_elipticity
WAVE wOut = $calculated_elipticity
wOut = (elipticity-rotation*cos(delta)/sin(delta))
End
然而,当我把这个函数放在命令 window 中时(见下文),它给我一个语法错误:
expected wave name.
elipticity_calculation(wave1, wave2, wave3, "calculated_elipticity")
我哪里错了?
谢谢
编辑:
我也试过这个:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Make $"lambda"/WAVE=lambda;
lambda = 1240/energy
Make $"KK"/WAVE=KK;
KK = lambda*lambda
Make $"w"/WAVE=w;
w = 1 - 93.0665/KK
Make $"Q"/WAVE=Q;
Q = 1/(w*w*lambda*sqrt(1+136.24/w))
Make $"delta"/WAVE=delta;
delta = (Q*1.69508759865*100000+2.884488929)*pi/180
Duplicate/O rotation, $calculated_elipticity
WAVE wOut = $calculated_elipticity
wOut = (elipticity-rotation*cos(delta))/sin(delta)
End
但是,此代码会为每个计算点创建新的波,并且还会创建空 wOut 波。
编辑:
我试过了。然而。它不工作:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Make/FREE lambda
lambda = 1240/energy
Make/FREE KK
KK = lambda*lambda
Make/FREE w
w = 1 - 93.0665/KK
Make/FREE kve
kve = 1/(w*w*lambda*sqrt(1+136.24/w))
Make/FREE delta
delta = (kve*1.69508759865*100000+2.884488929)*pi/180
Duplicate/O rotation, $calculated_elipticity
Make wOut = (elipticity-rotation*cos(delta))/sin(delta)
End
是否可以在对波形进行一些计算后重写它?喜欢 Excel?
当前数据文件夹中是否存在lambda
/KK
/w
/Q
/delta
波形?
通过的波形wave1
/wave2
/wave3
也需要存在于当前数据文件夹中。
您可以打开调试和出错时调试,以便在发生错误时 Igor Pro 会弹出调试器。
下面我是这样解决的:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Duplicate/O elipticity, $calculated_elipticity
Wave calc_elipticity = $calculated_elipticity
Duplicate/FREE energy, lambda
lambda = ...
Duplicate/FREE energy, KK
KK = ...
Duplicate/FREE energy, w
w = ...
Duplicate/FREE energy, Q_1
Q_1 = ...
Duplicate/FREE energy, delta
delta = ...
calc_elipticity = ((elipticity-rotation*cos(delta))/sin(delta))
End
我写了一个程序,通过一些计算从另一个中产生一个波浪。该过程如下所示:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Wave lambda
lambda = 1240/energy
Wave KK
KK = lambda*lambda
Wave w
w = 1 - 93.33/KK
Wave Q
Q = 1/(w*w*lambda*sqrt(1+135/w))
Wave delta
delta = (Q*1.6*100000+2)*pi/180
Duplicate/O rotation, $calculated_elipticity
WAVE wOut = $calculated_elipticity
wOut = (elipticity-rotation*cos(delta)/sin(delta))
End
然而,当我把这个函数放在命令 window 中时(见下文),它给我一个语法错误:
expected wave name.
elipticity_calculation(wave1, wave2, wave3, "calculated_elipticity")
我哪里错了?
谢谢
编辑:
我也试过这个:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Make $"lambda"/WAVE=lambda;
lambda = 1240/energy
Make $"KK"/WAVE=KK;
KK = lambda*lambda
Make $"w"/WAVE=w;
w = 1 - 93.0665/KK
Make $"Q"/WAVE=Q;
Q = 1/(w*w*lambda*sqrt(1+136.24/w))
Make $"delta"/WAVE=delta;
delta = (Q*1.69508759865*100000+2.884488929)*pi/180
Duplicate/O rotation, $calculated_elipticity
WAVE wOut = $calculated_elipticity
wOut = (elipticity-rotation*cos(delta))/sin(delta)
End
但是,此代码会为每个计算点创建新的波,并且还会创建空 wOut 波。
编辑:
我试过了。然而。它不工作:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Make/FREE lambda
lambda = 1240/energy
Make/FREE KK
KK = lambda*lambda
Make/FREE w
w = 1 - 93.0665/KK
Make/FREE kve
kve = 1/(w*w*lambda*sqrt(1+136.24/w))
Make/FREE delta
delta = (kve*1.69508759865*100000+2.884488929)*pi/180
Duplicate/O rotation, $calculated_elipticity
Make wOut = (elipticity-rotation*cos(delta))/sin(delta)
End
是否可以在对波形进行一些计算后重写它?喜欢 Excel?
当前数据文件夹中是否存在lambda
/KK
/w
/Q
/delta
波形?
通过的波形wave1
/wave2
/wave3
也需要存在于当前数据文件夹中。
您可以打开调试和出错时调试,以便在发生错误时 Igor Pro 会弹出调试器。
下面我是这样解决的:
Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity
Duplicate/O elipticity, $calculated_elipticity
Wave calc_elipticity = $calculated_elipticity
Duplicate/FREE energy, lambda
lambda = ...
Duplicate/FREE energy, KK
KK = ...
Duplicate/FREE energy, w
w = ...
Duplicate/FREE energy, Q_1
Q_1 = ...
Duplicate/FREE energy, delta
delta = ...
calc_elipticity = ((elipticity-rotation*cos(delta))/sin(delta))
End