matlab自定义函数拟合散点

假若现在我们有如下的二维散点:

x=1:10;        
y=[99.999 50.499 20.333 10.788 4.8111 2.7500 
   1.2322 0.4861 0.29501 0.1113498];

在了解这些散点的大致分布之后,我们可以自己定义和其有相同单调性的函数来对散点进行拟合。

看其分布有点像对数函数,也有点像反函数,我们可以自定义函数:

y = a*log(x)+b/x+c;

 两个在(0,+∞)递减的函数加上一个常数,其中散点在x较小的时候比较像对数log,x较大的时候比较像1/x。对于两个函数的系数(即权重),可以通过代码运行得到。

以下为拟合散点的步骤:

函数文件:(beta为三个需要拟合的系数)

function y = volum(beta,x)

y = beta(1)*log(x)+beta(2)./x+beta(3);

end

m文件:

clc;clear
x=1:10;        
y=[99.999 50.499 20.333 10.788 4.8111 2.7500 1.2322 0.4861 0.29501 0.1113498];
beta=nlinfit(x,y,'volum',[0,0,0])

m文件生成了三个数,就是对应的beta的值

我们尝试一下把生成的自定义函数和散点画到一个图,看看拟合效果

clc;clear
x=1:10;        
y=[99.999 50.499 20.333 10.788 4.8111 2.7500 1.2322 0.4861 0.29501 0.1113498];
beta=nlinfit(x,y,'volum',[0,0,0])
x0 = 0:0.1:10;
y0 =  3.1053*exp(-x0)+123.9659./x0-21.8691;
plot(x0,y0,'b')
hold on
plot(x,y,'*')
xlabel('x')
ylabel('y')

 拟合效果看起来还不错(由于数值太大,容易过拟合)

以上是我所举的一个小例子,介绍了自定义函数拟合有分布规律的离散点的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值