新聞中心

EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 學(xué)習(xí)LabVIEW(十二)——公式節(jié)點

學(xué)習(xí)LabVIEW(十二)——公式節(jié)點

作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
除了MATLAB節(jié)點,LabVIEW還提供了公式節(jié)點。在公式節(jié)點中可以用非常接近C的語法編寫代碼實現(xiàn)計算。之所以說是“非常接近C”是因為在一些細(xì)節(jié)上它和C還是有些許差別。
這次拿之前在《學(xué)習(xí)LabVIEW(八)——用循環(huán)處理數(shù)組》中給出的代碼做實驗,將最內(nèi)層的循環(huán)改用公式節(jié)點來實現(xiàn)。之前的最內(nèi)層循環(huán)如下圖所示:


其實現(xiàn)的運算相當(dāng)于:
z = 0
for k in range(128):
z = z * z input;
if abs(z) > 2:
break

還沒有習(xí)慣G語言的時候看到這個框圖還真是一眼難以看出運算的表達(dá)式。對于常年使用文本形式的編程語言的人而言,用公式節(jié)點改寫這個迭代過程的話一定會直觀很多吧。
但是一旦用起來才發(fā)現(xiàn)一個嚴(yán)重的問題:公式節(jié)點不支持復(fù)數(shù)!想來也在意料之中,畢竟是基于C的語法,而C在C99標(biāo)準(zhǔn)之前沒有內(nèi)置的復(fù)數(shù)支持。也許對復(fù)數(shù)的支持是未來語言的趨勢,已經(jīng)有越來越多的語言或是內(nèi)置,或是以庫的方式提供了對復(fù)數(shù)的支持。但不管怎么樣,我們現(xiàn)在用的公式節(jié)點是沒有復(fù)數(shù)支持的,如http://digital.ni.com/public.nsf/allkb/9A31DC2FF5C7C5DF86256B45007AA115所述。如果用極坐標(biāo)的方式描述復(fù)數(shù),我們就得手動展開復(fù)數(shù)的加法,如果用直角坐標(biāo)的形式描述,就得手動展開復(fù)數(shù)的乘法。想想還是用直角坐標(biāo)的形式吧。
一開始寫了如下的一段代碼,可是運行怎么也不對:


復(fù)數(shù)的展開怎么看也沒有錯誤啊。
最后在MATLAB中試著算了一下,終于發(fā)現(xiàn)出問題的地方了:在for循環(huán)內(nèi)部,將實部的計算結(jié)果賦值給了zReal,在下一行計算zImag時,用的zReal就已經(jīng)是新的zReal值了,而這里所需要的是上一次的zReal值。居然會犯這種錯誤,難道是很多年前寫Verilog代碼的后遺癥?
解決方法很簡單,在第一行計算實部的時候,將計算結(jié)果保存在另一個變量temp中,等zImag計算完成之后,再將temp中存儲的值賦給zReal。修正的程序如下圖所示:


還有一點需要注意的就是公式節(jié)點似乎沒有“double”,取而代之的是“float64”。
總結(jié)一下感想,公式節(jié)點不支持復(fù)數(shù),Array Programming也不及MATLAB,對其描述能力有點失望。但因為不用像MATLAB節(jié)點那樣通過ActiveX通道進(jìn)行進(jìn)程間的通信,效率應(yīng)該還是可以的。


關(guān)鍵詞: LabVIEW公式節(jié)

評論


技術(shù)專區(qū)

關(guān)閉