2016-02-11 55 views
0

爲了執行使用正常的變量可以做如下函數評估:更高效的符號函數評估

f = @(x)x.^2+3*x-5; 
x0 = -10:0.01:10; 
p = f(x0); 

但是用符號變量時,效率急劇下降。例如:

f = @(x)x.^2+3*x-5; 
x0 = -10:0.001:10; 

% using real values 
tic;p = f(x0);toc 

% using symbolic math 
syms x;tic;P = double(subs(f,x,x0));toc 


Elapsed time is 0.000686 seconds. 
Elapsed time is 10.867689 seconds. 

是否有同時使用符號來提高速度的方法嗎?

+0

符號變量的大小順序比實值變量慢(即匿名函數),這就是事實。所以恐怕沒有什麼辦法可以顯着提高速度:/ – Alessiox

+0

如果數值計算是最終目標,那麼我會在其附近保留一個額外的變量,該變量包含用於數字運算的'f'的'matlabFunction'版本。 – TroyHaskin

回答

1

在這種情況下,從浮動轉換爲雙倍會導致性能下降。切勿從浮點數學開始(x0 = -10:0.01:10;)並繼續使用符號數學。

x0=sym(-10):sym(.001):sym(10); 
P=double(f(x0)); 
+0

這似乎沒有規模好轉。對於'x0 = -10:0.001:10;',就像OP的第二個例子,幾乎沒有任何區別(R2015b)。 – horchler

+0

@horchler:使用Matlab R2013a,我獲得了更好的性能。原始代碼爲2s,修改後爲1/3s。 – Daniel

+0

謝謝你的回答。在我的機器上,需要更多的時間來執行'已用時間爲11.070485秒。'原因是你在問題中使用'0.01'而不是'0.001'。 ;) – NKN