- 3
- 0
- 约5.06千字
- 约 5页
- 2023-07-09 发布于山东
- 举报
曲线拟合实现
对于曲线拟合,本次主要阐述利用MATLAB和C语言两种方式如何进行拟合。
利用MATLAB实现
多项式拟合
多项式拟合是利用多项式最佳地拟合观测数据,使得在观测数据点处的误差平方和最小。
在MATLAB中,利用函数ployfit和ployval进行多项式拟合。
函数ployfit根据观测数据及用户指定的多项式阶数得到光滑曲线的多项式表示,polyfit的一般调用格式为:P = polyfit(x,y,n)。其中x为自变量,y为因变量,n为多项式阶数。
polyval的输入可以是标量或矩阵,调用格式为:
pv = polyval(p,a)
pv = polyval(p,A)
其中,p为多项式表示,a为标量,A为矩阵。当输入参数为M*N矩阵A时,函数返回值pv也是M*N矩阵,且pv(i,j) = polyval(p,A(i,j))。
步骤如下:
对ln(1+x)在[0,1]内采样得到观测数据x、y。
x = 0:0.1:1.0;
y = log(1+x);
调用函数polyfit对观测数据x、y作三阶多项式拟合。
P = polyfit(x,y,3)
得出P对应的多项式为0.1079 - 0.3974x + 0.9825x2 + 0.004x3.
分别作拟合曲线和理论曲线
xi = 0:0.01:1.0;
yi = polyval(P,xi); %多项式求值
plot(x,y,ro); %观测数据点
hold on;
plot(xi,yi,k); %作拟合曲线
plot(xi,log(1+xi),g); %理论曲线
xlabel(x);
ylabel(y);
legend(采样数据,拟合曲线,精确曲线);
指数函数拟合
以指数函数拟合示例:对 1 - √x 在[0,1]的采样数据作指数函数拟合
步骤如下:
1)对 1 - √x 在[0,1]内采样得到观测数据 x、y;
x = 0:0.01:0.99;
y = 1 - sqrt(x);
调用函数polyfit对 x 、lny 作一阶多项式拟合;
P = polyfit(x,log(y),1)
求得拟合曲线;
yi = exp(polyval(P,x));
分别作观测数据点、拟合曲线和理论曲线;
yi = exp(polyval(P,x));
plot(x,y,k.);
hold on;
plot(x,yi,r);
xlabel(x);
ylabel(y);
legend(采样数据,拟合曲线);
hold off;
分析拟合误差。
e = yi - y;
plot(x,e);
xlabel(x);
ylabel(误差);
交互式曲线拟合工具
具体实现如下: 1)载入census data数据;
load census
作census data点图;
plot(cdate,pop,ko);
在MATLAB的figure中选择Tool → Basic Fitting,即得到Basic Fitting interface 界面。
C语言实现
利用最小二乘法进行曲线拟合,下面对该方法进行简要概述
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法还可用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
最小二乘法是解决曲线拟合问题最常用的方法。其基本思路是:令
其中, 是事先选定的一组线性无关的函数, ak是待定系数 ,拟合准则是使yi (i=1,2…n)与f(xi)的距离 的平方和最小,称为最小二乘准则.
方法简要概述如下:
1,采用目标函数对多项式系数求偏导,得到最优值条件,组成一个方程组;
2,方程组的解法采用行列式变换(两次变换:普通行列式——三角行列式——对角行列式——求解),行列式的求解算法上优化过一次了,目前还没有更好的思路再优化运算方法,限幅和精度准备再修改修改
/*
本实验根据数组x[], y[]列出的一组数据,用最小二乘法求它的拟合曲线。
近似解析表达式为y = a0 + a1 * x + a2 * x^2 + a3 * x^3;
*/
#include stdio.h
#include math.h
#define maxn 12
#define rank_ 3
int main(){
double x[maxn] = {0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
double y[max
原创力文档

文档评论(0)