matlab二元函数拟合怎么设计函数。
mip版 关注:169 答案:2 悬赏:20
解决时间 2021-01-24 19:12

已解决
2021-01-24 01:01
下面是数据,要求拟合一个二元函数,自变量为a,b。请问在非线性拟合之前怎么设计函数,使其拟合误差最小。很急,请大家帮帮忙。
a\b6.187.58.710.812.9
0.350.6070.53030.54810.51580.581
0.40.7420.56580.5510.63760.8415
0.450.75340.62850.72580.69680.8522
0.50.82830.72790.97580.77510.836
0.550.86710.73751.04350.80350.8611
0.60.91550.8841.18380.82881.0792
0.650.93250.94831.22781.03171.2311
0.71.02011.01561.36061.16871.6888
0.751.02311.16061.58291.22261.484
我要拟合的是二元函数,也就是说两个变量的,其中x是a,y是b。那么最后得出的就是z=f(x,y)的形式的二元函数,但要拟合之前要先构造一个函数,然后才能通过拟合得到公式的相关参数,从而得到一个比较好的公式。
就是在构造这个参数的时候总构造不好,拟合出来的误差比较大。请教高手这个初始构造的非线性函数怎么构造???数据就是上面的那些数据。急。。。请多帮忙。谢谢
最佳答案

2021-01-24 02:02
非性线拟合一般是根据数据产生的特点来的(就是说数据产生符合什么分布函数)
对你这样的应用,我个人感觉使用线性拟合简单易行:
如下给定数据的拟合曲线:
x=[0.5,1.0,1.5,2.0,2.5,3.0];
y=[1.75,2.45,3.81,4.80,7.00,8.60];
p=polyfit(x,y,2)
plot(x,y)
计算结果为:
p =0.5614 0.8287 1.1560
即所得多项式为y=0.5614x^2+0.08287x+1.15560
-------------------------------------
如果你要非线性拟合,那么可以:
x=[1.1389 1.0622 0.9822 0.934 0.9251 0.9158];
y=[0.03 1 5.03 15.05 19.97 30.3];
myfunc=inline('-beta(1)*log(x+beta(2))-beta(3)','beta','x'); %非线性函数
beta=nlinfit(x,y,myfunc,[0 0 0]); %通过这个非线性函数进行拟合
k=beta(1),a=beta(2),b=beta(3)
%测试这个方程
xx=min(x):max(x);
yy=-k*log(x+a)-b;
plot(x,y,'o',x,yy,'r')
------------------------------------------------------------------------------------
以上x,y数据可以任意,就是你所提问的a,b。
全部回答

1楼
2021-01-24 02:49
设拟合的2元2次方程为
f(x,y)=b1*x²+b2*x*y+b3*y²+b4*x+b5*y+b6
用matlab的regress()函数拟合,也可以用自定义函数拟合。regress()函数命令格式为
[b,bint,r,rint,stats] = regress(y,x)
b——参数估计值,拟合函数系数
bint——b的置信区间
r——残差向量,测试值与拟合值的差值
rint——r的置信区间
stats——检验统计量,置信度、f统计量,p值
y——因变量观察值
x——自变量观察值
根据提供的数据,通过拟合得
b1 =0
b2 =-1734024.851
b3 =-31661318.71
b4 =3785724.073
b5 =9670754.012
b6 =-512586.098
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看