提问人:skidjoe 提问时间:12/3/2019 最后编辑:gehbiszumeisskidjoe 更新时间:5/7/2021 访问量:344
使用 for 循环进行多项式曲线拟合,最高可达 i 次?
Curve fitting using for loop for polynomial up to degree i?
问:
我有这个硬编码版本,它将数据拟合到线性、二次和三次多项式的曲线上:
对于某些数据 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
答:
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
给出一个图中的所有多项式
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
评论