使用 for 循环进行多项式曲线拟合,最高可达 i 次?

Curve fitting using for loop for polynomial up to degree i?

提问人:skidjoe 提问时间:12/3/2019 最后编辑:gehbiszumeisskidjoe 更新时间:5/7/2021 访问量:344

问:

我有这个硬编码版本,它将数据拟合到线性、二次和三次多项式的曲线上:

对于某些数据 x 和函数 y

M=[x.^0 x.^1];
L=[x.^0 x.^1 x.^2];

linear = (M'*M)\(M'*y);
plot(x, linear(1)+linear(2)*x, ';linear;r');

deg2 = (L'*L)\(L'*y);
plot(x, deg2(1)+deg2(2)*x+deg2(3)*(x.*x), ';quadratic plot;b');

我想知道如何将其转换为 for 循环来绘制 n 次多项式的曲线?我卡住的部分是绘图部分,我如何能够将系数数量的增加转换为 for 循环?

我有什么:

for i = 1:5 % say we're trying to plot curves up to degree 5 polynomials...
    curr=x.^(0:i);
    degI = (curr'*curr)\(curr'*y);
    plot(x, ???)  % what goes in here<-
end

MATLAB MATLAB-图形 曲线拟合

评论


答:

1赞 gehbiszumeis 12/6/2019 #1

如果只是绘图,则可以使用多价函数通过提供系数向量来评估所需等级的多项式

% For example, some random coefficients for a 5th order polynomial
% degI = (curr'*curr)\(curr'*y)  % Your case 
degi = [3.2755 0.8131 0.5950 2.4918 4.7987 1.5464]; % for 5th order polynomial

x = linspace(-2, 2, 10000);

hold on
% Using polyval to loop over the grade of the polynomials
for i = 1:length(degI)
    plot(x, polyval(degI(1:i), x))
end

给出一个图中的所有多项式

enter image description here

0赞 Renato Bichara Vieira 5/7/2021 #2

我相信这应该准确地回答你的问题。您只需要小心矩阵尺寸即可。

for i = 1:5
    curr=x.^(0:i);
    degI = (curr'*curr)\(curr'*y);
    plot(x, x.^(0:i)*degI)
end