欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > MATLAB进阶:数据的拟合

MATLAB进阶:数据的拟合

2024/11/30 6:54:20 来源:https://blog.csdn.net/Zjs15630471263/article/details/140797691  浏览:    关键词:MATLAB进阶:数据的拟合

几天我们继续深度学习MATLAB中的数据拟合

最小二乘拟合

假设已知经验公式y=f(c,x)y=f(c,x)(c为参数,x为自变量),要求根据一批有误差的数据(xi,yi),i=0,1,...,n(xi​,yi​),i=0,1,...,n确定参数c。这样的问题称为数据拟合。

最小二乘法:求c使得平方误差最小化

最小二乘法的内容我们这里不再过多讲解,这里主要侧重讲解如何用MATLAB来解决相关问题。

线性拟合

p=polyfit(x,y,k)

k次多项式拟合向量数据(x, y),返回多项式的降幂系数

p返回的向量,包含拟合多项式的系数。这些系数按降幂排列,即 p(1) 是最高次项的系数,p(end) 是常数项。

举例

x = [1, 2, 3, 4, 5];  % 自变量数据
y = [2, 4, 6, 8, 10]; % 因变量数据
k = 2;                % 拟合二次多项式p = polyfit(x, y, k); % 拟合多项式并获取系数

非线性拟合

[c,Q]=lsqcurvefit(Fun,c0,x,y,lb,ub)

其中Fun(c,x)为两个输入变量的函数句柄或匿名函数,

c0为参数c的预估值,作为迭代初值,

x,y为数据向量,

lbub分别表示c的下界和上界,

c返回参数值

Q返回误差平方和,

自变量x可以是多变量,这时第三输入参数x应为矩阵

举例

% 模型函数
fun = @(c, x) c(1) * exp(c(2) * x);% 初始参数估计
c0 = [1; 1];% 独立变量数据
x = [1; 2; 3; 4; 5];% 依赖于x的观测数据
y = [2.3; 2.9; 4.1; 5.9; 8.2];% 参数的上下界
lb = [0; -Inf]; % c(1) 不能小于0, c(2) 没有下界
ub = [Inf; Inf]; % c(1) 和 c(2) 没有上界% 调用lsqcurvefit
c = lsqcurvefit(fun, c0, x, y, lb, ub);% 输出结果
disp('拟合参数:');
disp(['c(1) = ', num2str(c(1))]);
disp(['c(2) = ', num2str(c(2))]);

线性拟合与非线性拟合的转换

虽然非线性拟合范围较广,但是却存在难以确定初始值的问题,在我们无法确定初始值时,一般用“0”来替代。而想方设法将其转化为线性函数,亦可以省去猜测初始值的步骤,并且大大减少计算所需时间

举例

这是一个非线性函数,但是如果我们左右两边同时取对数,就可以得到

这时,如果将ln(y)视为常数项z,那么我们就可以用线性拟合解决这个问题

% 假设 x 和 y 是你的数据点
x = [...]; % 你的 x 数据
y = [...]; % 你的 y 数据% 对 y 取自然对数
y_transformed = log(y);% 使用 polyfit 拟合一次多项式(线性关系)
p = polyfit(x, y_transformed, 1);% p(1) 将是斜率 b,p(2) 将是截距 ln(a)
b = p(1);
ln_a = p(2);
a = exp(ln_a); % 计算原始的 a 值

今天就学到这里,我们明天继续学习。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com