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 值

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值