2017-01-08 62 views
0

我是matlab新手。如何在matlab中集成這個函數

如何整合這一行代碼? ?

p2= polyfit(x,y,length(x)); 
from= x(1); 
to= x(length(x)); 

我需要整合p2

我嘗試了很多與集成功能:

value = integral(p2,from,to); 

,但我使用積分(線82)第一個輸入參數必須是一個函數 手柄有

錯誤。

Error in poly_integral (line 5) 
value = integral(p2,from,to); 
+0

傳遞函數'y'而不是'y'的係數 – scrappedcola

回答

0

這是因爲p2,在你的代碼,是不是一個函數。它只是一個係數向量。 integral的第一個參數需要處理您想要集成的功能。

從你的代碼判斷,你似乎想要定義一個函數來評估多項式p2。如果是這樣,你可以做類似下面的例子:

% take an example set of x and y 
x = linspace(0, pi, 1000); % uniform samples between 0 to pi 
y = sin(x); % assume, for sake of example, output is sine function of input 

% polynomial fit 
p2 = polyfit(x,y,4); % 4th order polynomial 
% Note that, in general, the order should be much smaller than length(x). 
% So you probably should review this part of your code as well. 

% define a function to evaluate the polynomial 
fn = @(x) polyval(p2, x); 
% this means: fn(x0) is same as polyval(p2, x0) 

% compute integral 
value = integral(fn,x(1),x(end)); 
+0

非常感謝你,還有一件事你說 - 順序應該比長度(x)小得多。 實際上作爲我們的教師順序他寫道: 擬合數據到n次多項式,其中n是x的元素數, 他的意思是別的什麼或他可能​​是錯的? – programmer

+0

@programmer:假設'n = length(x)',度'n-1'的多項式足以在'fn(x)'和'y'之間得到精確的擬合,不管你選擇了什麼'y' 。所以,在我看來,沒有很好的理由去擬合n'或更高的多項式(除了實驗,可能會)。 – aksadv

0

可以使用polyint函數來得到多項式的精確積分多項式係數:

p2 = polyfit(x,y,length(x)); 
int = diff(polyval(polyint(p2),x([1 end])));