2017-01-08 7 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])));