matlab使用polyfit拟合一次函数时的注意事项

在做数据处理时我们常常会使用matlab中的曲线拟合函数polyfit,然而使用polyfit的工程中遇到了一些坑。鉴于网上大部分文章只说明了polyfit的使用方法,并没有谈这个问题,所以分享一下这个坑点。

polyfit简介

polyfit是专门用来拟合多项式的一个函数,函数用法如下:

p = polyfit(x,y,n);
[p,S] = polyfit(x,y,n);
[p,S,mu] = polyfit(x,y,n);

一般我们直接使用第一种方式就够了,返回的p为多项式系数数组,即P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1)

polyfit注意点

在实际使用polyfit拟合一次函数时发现,该函数更倾向于拟合出斜率小于1的一次函数,如图所示,当数据点明显趋于纵向排列时,拟合出的直线仍趋于水平

明显该拟合的直线并不是我们期望的直线,改进方法如下:

先判断数据点x与y的范围,然后比较范围大小,得到数据点大概是纵向排列还是横向排列。若纵向排列,则交换x,y,再用polyfit进行拟合,得到的斜率取负倒数即为原来的斜率,代码如下:

acc_right = max(facc(:,1));
acc_left = min(facc(:,1));
accy_up = max(facc(:,2));
accy_down = min(facc(:,2));
if acc_right - acc_left > accy_up - accy_down
    pk = polyfit(facc(:,1),facc(:,2),1); 
else
    pk = polyfit(facc(:,2),facc(:,1),1);
    pk(1) = -1/pk(1);
end
zcx = -1:0.1:1;
zcy = pk(1)*zcx+pk(2);

拟合效果如下:

### Matlab 中的一次函数拟合 在一元线性回归中,目标是最小化观测值与预测值之间的差异。对于一元线性模型 \( y = ax + b \),可以通过最小二乘法找到最佳拟合直线的系数 \( a \) 和截距 \( b \)[^1]。 #### 使用 `polyfit` 函数进行线性拟合 Matlab 提供了一个简单而强大的工具——`polyfit` 函数来进行多项式拟合。当处理一次函数,只需指定次数为 1 即可: ```matlab % 假设有两个向量 x 和 y 表示数据点 p = polyfit(x, y, 1); ``` 上述代码返回一个长度为 2 的数组 p,其中第一个元素是斜率 \( a \),第二个元素是截距 \( b \)[^3]。 为了验证拟合效果并可视化结果,可以使用 `polyval` 来计算给定点处的拟合值,并绘制原始数据及其对应的拟合曲线: ```matlab x_fit = linspace(min(x), max(x)); % 创建用于绘图的新 x 轴范围 y_fit = polyval(p, x_fit); figure; plot(x, y, 'o', ... % 绘制散点图 x_fit, y_fit, '-'); % 绘制拟合线 xlabel('X'); ylabel('Y'); title('Linear Fit with Least Squares Method using Polyfit'); grid on; legend({'Data Points','Fitted Line'}); ``` 此过程不仅展示了如何执行基本的线性回归分析,还提供了直观的方法来评估模型的质量。 ### 解决超定方程组中的应用 值得注意的是,在面对具有多余约束条件的情况(即所谓的“超定”问题)下,同样适用这种方法。此可通过矩阵运算直接获得最优解,例如采用左除操作符 `\` 实现最小二乘解求解[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值