除了MATLAB节点,LabVIEW还供给了公式节点。在公式节点中能够用十分挨近C的语法编写代码完结核算。之所以说是“十分挨近C”是由于在一些细节上它和C仍是有少许不同。
这次拿之前在《学习LabVIEW(八)——用循环处理数组》中给出的代码做试验,将最内层的循环改用公式节点来完结。之前的最内层循环如下图所示:
其完结的运算相当于:
z = 0
for k in range(128):
z = z * z input;
if abs(z) > 2:
break
还没有习气G言语的时分看到这个框图还真是一眼难以看出运算的表达式。关于终年运用文本方法的编程言语的人而言,用公式节点改写这个迭代进程的话一定会直观许多吧。
但是一旦用起来才发现一个严峻的问题:公式节点不支撑复数!想来也在意料之中,毕竟是根据C的语法,而C在C99规范之前没有内置的复数支撑。或许对复数的支撑是未来言语的趋势,已经有越来越多的言语或是内置,或是以库的方法供给了对复数的支撑。但不管怎样样,咱们现在用的公式节点是没有复数支撑的,如http://digital.ni.com/public.nsf/allkb/9A31DC2FF5C7C5DF86256B45007AA115所述。假如用极坐标的方法描绘复数,咱们就得手动打开复数的加法,假如用直角坐标的方法描绘,就得手动打开复数的乘法。想想仍是用直角坐标的方法吧。
一开始写了如下的一段代码,但是运转怎样也不对:
复数的打开怎样看也没有过错啊。
最终在MATLAB中试着算了一下,总算发现出问题的当地了:在for循环内部,将实部的核算结果赋值给了zReal,鄙人一行核算zImag时,用的zReal就已经是新的zReal值了,而这儿所需求的是上一次的zReal值。居然会犯这种过错,莫非是许多年前写Verilog代码的后遗症?
解决方法很简单,在榜首行核算实部的时分,将核算结果保存在另一个变量temp中,等zImag核算完结之后,再将temp中存储的值赋给zReal。批改的程序如下图所示:
还有一点需求留意的便是公式节点好像没有“double”,取而代之的是“float64”。
总结一下感触,公式节点不支撑复数,Array Programming也不及MATLAB,对其描绘才能有点绝望。但由于不必像MATLAB节点那样经过ActiveX通道进行进程间的通讯,功率应该仍是能够的。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/211862.html