學習LabVIEW(十二)——公式節(jié)點 作者: 時間:2017-01-09 來源:網(wǎng)絡 加入技術交流群 掃碼加入和技術大咖面對面交流海量資料庫查詢 收藏 除了MATLAB節(jié)點,LabVIEW還提供了公式節(jié)點。在公式節(jié)點中可以用非常接近C的語法編寫代碼實現(xiàn)計算。之所以說是“非常接近C”是因為在一些細節(jié)上它和C還是有些許差別。這次拿之前在《學習LabVIEW(八)——用循環(huán)處理數(shù)組》中給出的代碼做實驗,將最內(nèi)層的循環(huán)改用公式節(jié)點來實現(xiàn)。之前的最內(nèi)層循環(huán)如下圖所示:其實現(xiàn)的運算相當于:z = 0for k in range(128):z = z * z input;if abs(z) > 2:break還沒有習慣G語言的時候看到這個框圖還真是一眼難以看出運算的表達式。對于常年使用文本形式的編程語言的人而言,用公式節(jié)點改寫這個迭代過程的話一定會直觀很多吧。但是一旦用起來才發(fā)現(xiàn)一個嚴重的問題:公式節(jié)點不支持復數(shù)!想來也在意料之中,畢竟是基于C的語法,而C在C99標準之前沒有內(nèi)置的復數(shù)支持。也許對復數(shù)的支持是未來語言的趨勢,已經(jīng)有越來越多的語言或是內(nèi)置,或是以庫的方式提供了對復數(shù)的支持。但不管怎么樣,我們現(xiàn)在用的公式節(jié)點是沒有復數(shù)支持的,如http://digital.ni.com/public.nsf/allkb/9A31DC2FF5C7C5DF86256B45007AA115所述。如果用極坐標的方式描述復數(shù),我們就得手動展開復數(shù)的加法,如果用直角坐標的形式描述,就得手動展開復數(shù)的乘法。想想還是用直角坐標的形式吧。一開始寫了如下的一段代碼,可是運行怎么也不對:復數(shù)的展開怎么看也沒有錯誤啊。最后在MATLAB中試著算了一下,終于發(fā)現(xiàn)出問題的地方了:在for循環(huán)內(nèi)部,將實部的計算結果賦值給了zReal,在下一行計算zImag時,用的zReal就已經(jīng)是新的zReal值了,而這里所需要的是上一次的zReal值。居然會犯這種錯誤,難道是很多年前寫Verilog代碼的后遺癥?解決方法很簡單,在第一行計算實部的時候,將計算結果保存在另一個變量temp中,等zImag計算完成之后,再將temp中存儲的值賦給zReal。修正的程序如下圖所示:還有一點需要注意的就是公式節(jié)點似乎沒有“double”,取而代之的是“float64”。總結一下感想,公式節(jié)點不支持復數(shù),Array Programming也不及MATLAB,對其描述能力有點失望。但因為不用像MATLAB節(jié)點那樣通過ActiveX通道進行進程間的通信,效率應該還是可以的。
評論