最小二乘法
最小二乘法是一种常用的数据拟合方法,它通过最小化误差的平方和来寻找数据的最佳函数匹配。本文将介绍最小二乘法的基本原理,并展示如何在MATLAB中实现一个简单的线性拟合案例。
最小二乘法原理
对于一组数据点 ( x i , y i ) , i = 1 , 2 , . . . , n (x_i, y_i), i=1,2,...,n (xi,yi),i=1,2,...,n,我们希望找到一条直线 y = a x + b y = ax + b y=ax+b,使得所有数据点到这条直线的垂直距离的平方和最小。
数学表达式为:
min a , b ∑ i = 1 n ( y i − ( a x i + b ) ) 2 \min_{a,b} \sum_{i=1}^n (y_i - (a x_i + b))^2 a,bmini=1∑n(yi−(axi+b))2
通过求解这个最小化问题,我们可以得到 a a a和 b b b的估计值:
a = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 a = \frac{n\sum x_i y_i - \sum x_i \sum y_i}{n\sum x_i^2 - (\sum x_i)^2} a=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yi
b = ∑ y i − a ∑ x i n = y ˉ − a x ˉ b = \frac{\sum y_i - a \sum x_i}{n} = \bar{y} - a \bar{x} b=n∑yi−a∑xi=yˉ−axˉ
其中 x ˉ \bar{x} xˉ和 y ˉ \bar{y} yˉ分别是 x x x和 y y y的均值。
MATLAB实现案例
下面我们通过一个具体的例子来演示如何在MATLAB中使用最小二乘法进行线性拟合。
1. 生成示例数据
% 生成带有随机噪声的线性数据
rng(1); % 设置随机种子保证可重复性
x = 1:0.1:10;
y = 2*x + 3 + randn(1,length(x))*2; % 真实关系为 y=2x+3,加上噪声
% 绘制原始数据
figure;
scatter(x, y, 'filled');
hold on;
xlabel('x');
ylabel('y');
title('最小二乘法线性拟合示例');
2. 最小二乘法拟合
使用反斜杠运算符
% 构建设计矩阵
A = [x', ones(length(x),1)];
% 求解系数
coefficients = A \ y';
a = coefficients(1);
b = coefficients(2);
plot(x,a*x+b)
legend
fprintf('拟合结果: y = %.4f*x + %.4f\n', a, b);
结果分析
运行上述代码后,我们通常会得到类似以下的输出:
反斜杠运算符结果:
拟合结果: y = 2.0921*x + 2.3343
结论
本文通过一个简单的线性拟合案例,演示了最小二乘法在MATLAB中的实现。最小二乘法是数据分析中最基础也最重要的方法之一,掌握其原理和实现对于数据建模工作至关重要。
对于更复杂的数据关系,最小二乘法也可以扩展到多项式拟合或多元线性回归等情况。