登录论坛

查看完整版本 : [MATLAB数学相关] 急求教:曲线拟合


olivetianqin
2009-04-22, 10:03
有这样两组数据:h和mu:
h=[-9000,-8000,-7000,-6000,-5000,-4000,-3000,-2000,-1500,-1100,-1000,-900,-800,-700,-600,-500,-400,-300,-250,-200,-160,-140,-120,-100,-90,-80,-70,-60,-50,-46,-40,-36,-30,-25,-20,-17,-15,-13,-11,-10,-9,-8,-7,-6.30000000000000,0,6.30000000000000,7,8,9,10,11,13,15,17,20,25,30,36,40,46,50,60,70,80,90,100,120,140,160,200,250,300,400,500,600,700,800,900,1000,1100,1500,2000,3000,4000,5000,6000,7000,8000,9000];


mu=[5.00000000000000e-06,7.50000000000000e-06,1.00000000000000e-05,1.00000000000000e-05,1.50000000000000e-05,2.00000000000000e-05,2.50000000000000e-05,3.50000000000000e-05,3.25000000000000e-05,6.25000000000000e-05,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000150000000000000,0.000200000000000000,0.000300000000000000,0.000325000000000000,0.000375000000000000,0.000750000000000000,0.000750000000000000,0.000750000000000000,0.00100000000000000,0.00150000000000000,0.00250000000000000,0.00300000000000000,0.00525000000000000,0.00541666700000000,0.00416666700000000,0.00583333300000000,0.00933333300000000,0.0140000000000000,0.0230000000000000,0.0350000000000000,0.0475000000000000,0.0600000000000000,0.102500000000000,0.130000000000000,0.145000000000000,0.145000000000000,0.117142857000000,0.0809523810000000,0.0476190480000000,0.0809523810000000,0.117142857000000,0.145000000000000,0.145000000000000,0.130000000000000,0.102500000000000,0.0600000000000000,0.0475000000000000,0.0350000000000000,0.0230000000000000,0.0140000000000000,0.00933333300000000,0.00583333300000000,0.00416666700000000,0.00541666700000000,0.00525000000000000,0.00300000000000000,0.00250000000000000,0.00150000000000000,0.00100000000000000,0.000750000000000000,0.000750000000000000,0.000750000000000000,0.000375000000000000,0.000325000000000000,0.000300000000000000,0.000200000000000000,0.000150000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,6.25000000000000e-05,3.25000000000000e-05,3.50000000000000e-05,2.50000000000000e-05,2.00000000000000e-05,1.50000000000000e-05,1.00000000000000e-05,1.00000000000000e-05,7.50000000000000e-06,5.00000000000000e-06];

以h为横坐标,mu 为纵坐标,用polyfit拟合的曲线偏差很大,怎样拟合能使曲线比较接近呢?能进行分段拟合再拼接么?

谢谢,~

slgu
2009-04-22, 19:53
fy=b(1)./(1+b(2)*x.^2+b(3)*x.^4+b(4)*exp(b(5)*x.^2));
b =[ -0.10245748, -0.015258002, 0.0000012473027, -4.589731, -0.028092274]
RSS =0.0009084860045
MSe = 1.0946e-005
R^2 = 0.99417

olivetianqin
2009-04-29, 16:27
在h为-150—-50,50—150之间的曲线很不光滑,这个可以改善吗?谢谢!~

slgu
2009-04-30, 15:49
如果只画这一段,尽量将X(横轴)的间隔变得小一点即可。

laosam280
2009-04-30, 16:43
不是已经给你解答过了吗?我画了三个不同的拟合函数图。

slgu
2009-05-01, 00:44
x=[-9000,-8000,-7000,-6000,-5000,-4000,-3000,-2000,-1500,-1100,-1000,-900,-800,-700,-600,-500,-400,-300,-250,-200,-160,-140,-120,-100,-90,-80,-70,-60,-50,-46,-40,-36,-30,-25,-20,-17,-15,-13,-11,-10,-9,-8,-7,-6.30000000000000,0,6.30000000000000,7,8,9,10,11,13,15,17,20,25,30,36,40,46,50,60,70,80,90,100,120,140,160,200,250,300,400,500,600,700,800,900,1000,1100,1500,2000,3000,4000,5000,6000,7000,8000,9000];
y=[5.00000000000000e-06,7.50000000000000e-06,1.00000000000000e-05,1.00000000000000e-05,1.50000000000000e-05,2.00000000000000e-05,2.50000000000000e-05,3.50000000000000e-05,3.25000000000000e-05,6.25000000000000e-05,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000150000000000000,0.000200000000000000,0.000300000000000000,0.000325000000000000,0.000375000000000000,0.000750000000000000,0.000750000000000000,0.000750000000000000,0.00100000000000000,0.00150000000000000,0.00250000000000000,0.00300000000000000,0.00525000000000000,0.00541666700000000,0.00416666700000000,0.00583333300000000,0.00933333300000000,0.0140000000000000,0.0230000000000000,0.0350000000000000,0.0475000000000000,0.0600000000000000,0.102500000000000,0.130000000000000,0.145000000000000,0.145000000000000,0.117142857000000,0.0809523810000000,0.0476190480000000,0.0809523810000000,0.117142857000000,0.145000000000000,0.145000000000000,0.130000000000000,0.102500000000000,0.0600000000000000,0.0475000000000000,0.0350000000000000,0.0230000000000000,0.0140000000000000,0.00933333300000000,0.00583333300000000,0.00416666700000000,0.00541666700000000,0.00525000000000000,0.00300000000000000,0.00250000000000000,0.00150000000000000,0.00100000000000000,0.000750000000000000,0.000750000000000000,0.000750000000000000,0.000375000000000000,0.000325000000000000,0.000300000000000000,0.000200000000000000,0.000150000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,0.000100000000000000,6.25000000000000e-05,3.25000000000000e-05,3.50000000000000e-05,2.50000000000000e-05,2.00000000000000e-05,1.50000000000000e-05,1.00000000000000e-05,1.00000000000000e-05,7.50000000000000e-06,5.00000000000000e-06];
fx=@(b,x)b(1)./(1+b(2)*x.^2+b(3)*x.^4+b(4)*exp(b(5)*x.^2));
b=[-0.10245748, -0.015258002, 0.0000012473027, -4.589731, -0.028092274];
x(1:24)=[];
y(1:24)=[];
x(42:65)=[];
y(42:65)=[];
plot(x,y,'o','markersize',10,'markerfacecolor','k')
x1=-95:95;
y1=fx(b,x1);
hold on
plot(x1,y1,'linewidth',3)
axis tight