在 gnuplot 中,有沒有辦法將用戶定義的函式作為引數傳遞給另一個用戶定義的函式?例如,我可以撰寫一個函式回圈,它將對給定函式的移位求和:
f(x) = (x <= 0) ? 0 : 1/(1 x)**2
loop(x, i, s) = (i == 0) ? f(x) : loop(x-s, i-1, s) f(x)
然后我可以做類似的事情:
plot loop(x, 10, 1)
但是,我如何定義一個函式 loop2 來為任何函式執行此操作,例如:
loop2(g, x, i, s) = (i == 0) ? g(x) : loop2(g, x-s, i-1, s) g(x)
這樣我就可以執行以下操作:
f3(x) = (x <= 0) ? 0 : 1/(1 x)**3
plot loop2(f, x, 10, 1)
replot loop2(f3, x, 10, 1)
uj5u.com熱心網友回復:
我認為這在 gnuplot 5.4 中是不可能的。
開發版本(gnuplot 5.5)最近獲得了將文本命令塊標記為命名可執行函式的能力,稱為“功能塊”。這使您可以訪問功能塊中的命令,而這些命令在單行用戶定義的功能中是不可能的。這是您在最新版本的開發版本中運行的示例。在頂層,函式的名稱(“f”或“f3”)作為引數傳遞,可用于建構式本身的呼叫。
function $loop2(name, x, i, s) << EOF
local temp = 0
eval sprintf("temp = %s(x)", name)
return (i == 0) ? temp : temp $loop2(name, x-s, i-1, s)
EOF
f(x) = (x <= 0) ? 0 : 1/(1 x)**2
f3(x) = (x <= 0) ? 0 : 1/(1 x)**3
set key left Left reverse
set tics nomirror
set border 3
set xrange [0:10]
set yrange [0:1.5]
plot $loop2("f", x, 10, 1), $loop2("f3", x, 10, 1)

這里是演示集合中示例的鏈接,該示例說明從另一個功能塊呼叫一個功能塊,將兩者包裝在頂級用戶定義的功能中。 功能塊演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/523499.html
