我不知道一個gnuplot唯一的答案。但是,您可以使用system
命令讓另一個程序執行此操作。例如linux上的bc
程序。下面的腳本對我的作品:
result(s) = system(sprintf('echo "%s" | bc -l ~/.bcrc', s)) + 0
set table "data.eval"
plot "data.dat" using 1:(result(strcol(2)))
unset table
這是數據文件:
1 1/2
2 1/2.0
3 4+4
4 4*5-1
5 4*(5-1)-(3-7)
6 sin(3.1415)
這是輸出:
# Curve 0 of 1, 6 points
# Curve title: ""data.dat" using 1:(result(strcol(2)))"
# x y type
1 0.5 i
2 0.5 i
3 8 i
4 19 i
5 20 i
6 9.26536e-05 i
注:
- 的
set table "data.eval"
將值打印到文件中,現在更容易檢查結果。
strcol(2)
以字符串形式讀取第二列的條目。該表達式不得包含空格。
- 功能
result
將字符串傳送到bc
。字符串本身必須被引用,否則shell會像數據文件的第5行或第6行那樣抱怨括號。
- bc上的選項
-l
可以像第一行那樣對錶達式進行浮點計算(1/2 = 0.5而不是1/2 = 0),並且它爲sine和e(x)定義s(x)爲exp(x)。
~/.bcrc
讀取一些函數定義
system
命令返回一個字符串。通過添加0
將該字符串升級爲浮點數。
我的〜/ .bcrc看起來是這樣的:
pi=4*a(1)
e=e(1)
define ln(x)
{return(l(x))}
define lg(x)
{return(l(x)/l(10))}
define exp(x)
{return(e(x))}
define sin(x)
{return(s(x))}
define fac(x)
{if (x<=1) return(1);
return(fac(x-1)*x)}
define ncr(n,r)
{return(fac(n)/(fac(r)*fac(n-r)))}
與gnuplot的4.6和BC 95年6月1日在Debian傑西測試。在Windows上,您有用於整數計算的set
命令。 Google似乎知道其他一些命令行計算器。
不錯。把你的更新放在答案中。 – maij
@maij我希望有一種方法可以告訴gnuplot解釋任何算術表達式,但顯然這是不可能的。 – badweather