2015-06-08 5 views
0

Я хочу подгонять к моим данным полиномиальную кривую (4 ou 5 градусов). Я сделал это с EXCEL, и я получил коэффициент около 10^-13 для 5-го, 10^-9 для 4-го и 10^-5 для третьего ... Я хотел бы ограничить все коэффициенты, чтобы не быть ниже 10^-2. Кривая не будет настроена так хорошо, но все в порядке. Как это сделать с помощью функции polyfit?Как ограничить полифит. с определенной точностью (matlab)?

И затем, с математической точки VUE. Имеет ли смысл ограничивать коэффициент? Или это бесполезно, и мне лучше продолжать работать с полифитом второй степени (который имеет коэффициент ниже 10^-2).

Причина, по которой я спрашиваю: я занимаюсь некоторыми исследованиями и с физической точки зрения, интересно проверить полифит 5-й степени, но я не могу использовать коэффициент ниже 10^-2.

Спасибо

+0

Я не думаю, что есть способ сделать это с 'polyfit' так, что функция возвращает коэффициенты, сводит к минимуму ошибки (я думаю, в 2-норме) между полиномом и данными. Что есть, то есть. Являются ли данные, которые вы должны следовать за полиномом пятого порядка, или это кривая грубой силы? – TroyHaskin

+0

Размер коэффициентов зависит от единиц, которые вы используете на горизонтальной оси. Если у вас есть значения x в тысячах, коэффициенты более высокой степени должны быть крайне малы, результаты будут отсутствовать. Рассмотрим перемасштабирование переменной. –

+0

Я не могу перемасштабировать, потому что я буду использовать коэффициент в другой проге, которая будет использовать начальную горизонтальную шкалу. Мои данные должны следовать за полиномом пятого порядка (R^2 = 0,95). – Sarahdata

ответ

1

fit Используйте вместо polyfit

%What is the degree of the polynomial (quartic) 
polyDegree = 4; 

%This sets up the options 
opts = fitoptions('Method', 'LinearLeastSquares'); 

%All coefficients of degrees not specified between x^n and x^0 can have any value greater than 10^-2 
opts.Lower = 1E-2; 
opts.Upper = inf(1, polyDegree + 1); 

%Do the fit using the specified polynomial degree. 
[fitresult, gof] = fit(x, y, ['poly', num2str(polyDegree)] , opts); 
Смежные вопросы