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。至少我笔记中的例子是这样说的(它们是希腊文的,否则我会把它们贴在这里)。你应该绘制点和曲线以获得更好的洞察力。