2015-05-06 5 views
0

У меняPolyfit и polyval для выполнения интерполяции

x = linspace(-5,5,256) y = 1./(1+x.^2) plot(x,y,'...') %plot of (x,y)

Хочу оценить это с помощью полинома порядка 10, таким образом, что полином пересекает график в 11 точках.

Итак, я сделал это:

x2 = linspace(-5,5,11) y2 = 1./(1+x2.^2) p = polyfit(x2,y2,10) %finds coefficients of polynomial of degree 10 that fits x2,y2 y3 = polyval(p,x2) plot(x,y,x2,y3,'...')

Я думал, что polyfit дал бы мне коэффициенты для многочлена до порядка 10, которая пересекает точку (x2,y2) (т.е. 11 баллов) то y3 является по существу, только значения y, где полиномы 10-го порядка приземляются, поэтому их полное отображение даст мне полином 10-го порядка, пересекающий мой исходный граф в 11 уникальных точках?

Что я сделал не так?

Моего результат: enter image description here

+6

Вы должны оценить 'p' не только при интерполяции точек' x2', но вместо того, чтобы более плотно: 'x3 = LINSPACE (-5, -5500); y3 = поливал (p, x3); участок (x3, y3); '. Поскольку вы оцениваете только точки интерполяции, график выводится с сегментами синей линии между этими оценками. – knedlsepp

+0

эй, спасибо! что сработало – elbarto

+0

Хотя вопрос и, следовательно, ответ пограничный тривиальный, просто для того, чтобы следовать протоколу;), @knedlsepp, вы ответили бы из своего комментария, чтобы elbarto мог его принять? –

ответ

2

Ваших вычисления правильны, но вы не черчение функции правильного пути. Синяя линия в вашей сгенерированной графике является кусочно-линейной. Это потому, что вы только оцениваете свой полином p в точках интерполяции x2. Затем команда plot рисует сегменты линий между этими точками, и вам предоставляется неожиданный сюжет. Чтобы получить ожидаемый результат вы просто должны оценить свой полином более плотно, как так:

x3 = linspace(-5,-5,500); 
y3 = polyval(p,x3); 
plot(x3,y3); 
+0

Я только что закончил использование 'y3 = polyval (p, x)' , а затем построил '(x, y3)' Но да, это была моя основная ошибка. Спасибо, колени! – elbarto