Algorithm 最小二乘算法不';行不通
:)我正在尝试编写一个最小二乘算法,我想到了这个:Algorithm 最小二乘算法不';行不通,algorithm,matlab,least-squares,Algorithm,Matlab,Least Squares,:)我正在尝试编写一个最小二乘算法,我想到了这个: function [y] = ex1_Least_Squares(xValues,yValues,x) % a + b*x + c*x^2 = y points = size(xValues,1); A = ones(points,3); b = zeros(points,1); for i=1:points A(i,1) = 1; A(i,2) = xValues(i); A(i,3) = xValue
function [y] = ex1_Least_Squares(xValues,yValues,x) % a + b*x + c*x^2 = y
points = size(xValues,1);
A = ones(points,3);
b = zeros(points,1);
for i=1:points
A(i,1) = 1;
A(i,2) = xValues(i);
A(i,3) = xValues(i)^2;
b(i) = yValues(i);
end
constants = (A'*A)\(A'*b);
y = constants(1) + constants(2)*x + constants(3)*x^2;
当我将这个matlab脚本用于线性函数时,我认为它工作得很好。然而,当我通过sin(x)函数的12个点时,我得到了非常糟糕的结果
以下是我传递给函数的点:
xValues = [ -180; -144; -108; -72; -36; 0; 36; 72; 108; 144; 160; 180];
yValues = [sind(-180); sind(-144); sind(-108); sind(-72); sind(-36); sind(0); sind(36); sind(72); sind(108); sind(144); sind(160); sind(180) ];
结果是sin(165°)=0.559935259380508,当它应该是sin(165°)=0.258819时,没有理由将抛物线拟合到正弦曲线的整个周期会得到好的结果。这两条曲线是不相关的。MATLAB已经包含一个最小二乘多项式拟合函数,
polyfit
和一个互补函数,polyval
。尽管你可能应该自己写,但尝试以下内容将具有教育意义:
xValues = [ -180; -144; -108; -72; -36; 0; 36; 72; 108; 144; 160; 180];
% you may want to experiment with different ranges of xValues
yValues = sind(xValues);
% try this with different values of n, say 2, 3, and 4
p = polyfit(xValues,yValues,n);
x = -180:36:180;
y = polyval(p,x);
plot(xValues,yValues);
hold on
plot(x,y,'r');
此外,更一般地说,您应该避免使用代码中的循环。这应等同于:
points = size(xValues,1);
A = ones(points,3);
A(:,2) = xValues;
A(:,3) = xValues.^2; % .^ and ^ are different
涉及
b
的循环部分相当于执行b=y值
;要么给输入变量命名b
,要么只使用变量y值
,就不需要复制它。我们的教授告诉我们使用最小二乘法拟合正弦函数。线性拟合显然不是一个好的选择,抛物线也不是。。。那么我应该选择哪条曲线呢?我非常感谢你的帮助!尝试增加次数的多项式,请参见。绘制曲线!正弦函数是振荡的,有根、极值和拐点。你自己想想一个给定次数的多项式可以有多少根、极值和拐点,也想想你想要很好拟合的值的范围。你能和泰勒/麦克劳林展开式联系起来吗?假设我有4个点:(-1,1),(0,0),(1,0)和(2,-2)。我想找到一条抛物线,它实际上最小化了距离的平方。我听从教授的指示。我使用了抛物线y=a+bt+ct^2。为了解线性系统(A'*A)*常数=(A'*b),我替换了方程中的点,得到了4个方程,我把它们放在矩阵中,当我找到常数时,我应该找到最终方程的A,b和c。至少我笔记中的例子是这样说的(它们是希腊文的,否则我会把它们贴在这里)。你应该绘制点和曲线以获得更好的洞察力。