最小二乘法演示

发布于:2025-06-17 ⋅ 阅读:(12) ⋅ 点赞:(0)

最小二乘法

最小二乘法是一种常用的数据拟合方法,它通过最小化误差的平方和来寻找数据的最佳函数匹配。本文将介绍最小二乘法的基本原理,并展示如何在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=1n(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=nxi2(xi)2nxiyixiyi

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=nyiaxi=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中的实现。最小二乘法是数据分析中最基础也最重要的方法之一,掌握其原理和实现对于数据建模工作至关重要。

对于更复杂的数据关系,最小二乘法也可以扩展到多项式拟合或多元线性回归等情况。


网站公告

今日签到

点亮在社区的每一天
去签到