第六章医用薄膜渗透率的确定-曲线拟合 §6-3用 Matlab作最小二乘曲线拟合 1.用n次多项式作最小二乘拟合 已知 要从Hn中找一个Sn(x),使得 y:y0y1…ym 在节点处的总误差、∑(S(x)-y)达到最小 Matlab命令格式 系数数组= polyfit(节点数组,函数值数组,次数n) 例1:对函数C=C(测量得下面一组数据: t:123456789 C:4.54,4.99,5.35,565,5.90,6.10,626,639,6.50 试分别用1次、2次、3次、6次多项式作拟合,并画 图显示拟合效果 hold on x0=1:9y0=4.544.99,535.565,5906.10.6.266.39650] for F=1: 9 plot(xo(), yo(, + end al=polyfit(x0, y0, 1), a2=polyfit(x0, y0, 2) a3=polyfit(x0, y0, 3 ), a6=polyfit(x0, y0, 6) x=0:0.1:10 yl-polyval(al, x), y2=polyval(a2, x) 3=polyval(a3, x); y6=polyval(a6, x); plot(,yl, x,y2, x,y3, x, y6) hold off 执行得 al=0.23854.5497 a2=0.02360.47504.1162 a3=0.0015-0.04590.56864.0184 a6=0.00000.0004-0.00530.03640.1631 0.75283.9189 (如,其中a2的结果代表“用2次多项式作拟合”得到的多 项式为-00236x2+04750x+41162) 为了准确判断拟合效果,需计算“节点处的总误差”: (续前面程序) wcl=sqrt(sum((polyval(al, xO)-y0). 2) wc2=sqrt(sum((polyval(a2, x0)-y0). 2) wc3=sqrt(sum((polyval(a3, x0)-y0). 2) wc6=sqrt(sum((polyval(a6, x0)-y0). 2) 执行得: =04188 wc2=0.0565 wc3=0.0078 wc6=0.000705
第六章 医用薄膜渗透率的确定----曲线拟合 §6—3 用 Matlab 作最小二乘曲线拟合 1.用 n 次多项式作最小二乘拟合 已知 m m y y y y x x x x ... ... 0 1 0 1 : : ,要从 Hn 中找一个 S (x) n ,使得 在节点处的总误差 = − m i n i i S x y 0 2 ( ( ) ) 达到最小。 Matlab 命令格式: 系数数组=polyfit(节点数组,函数值数组,次数 n) 例 1:对函数 C=C(t)测量得下面一组数据: t : 1 2 3 4 5 6 7 8 9 C:4.54, 4.99, 5.35, 5.65, 5.90, 6.10, 6.26, 6.39, 6.50 试分别用 1 次、2 次、3 次、6 次多项式作拟合,并画 图显示拟合效果。 clear hold on x0=1:9;y0=[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50]; for i=1:9 plot(x0(i),y0(i),'+') end a1=polyfit(x0,y0,1),a2=polyfit(x0,y0,2) a3=polyfit(x0,y0,3),a6=polyfit(x0,y0,6) x=0:0.1:10; y1=polyval(a1,x);y2=polyval(a2,x); y3=polyval(a3,x);y6=polyval(a6,x); plot(x,y1,x,y2,x,y3,x,y6) hold off 执行得: a1=0.2385 4.5497 a2 =-0.0236 0.4750 4.1162 a3 =0.0015 -0.0459 0.5686 4.0184 a6 =-0.0000 0.0004 -0.0053 0.0364 -0.1631 0.7528 3.9189 (如,其中 a2 的结果代表“用 2 次多项式作拟合”得到的多 项式为 -0.0236 2 x +0.4750 x +4.1162 ) 为了准确判断拟合效果,需计算“节点处的总误差”: (续前面程序) wc1=sqrt(sum((polyval(a1,x0)-y0).^2)) wc2=sqrt(sum((polyval(a2,x0)-y0).^2)) wc3=sqrt(sum((polyval(a3,x0)-y0).^2)) wc6=sqrt(sum((polyval(a6,x0)-y0).^2)) 执行得: wc1 =0.4188 wc2 =0.0565 wc3 =0.0078 wc6 =0.000705
2.用一般函数作最小二乘拟合 己解y1x…,要用一个函数f(x)来近 x0x1…x 似代表y,此函数中含有几个待定参数a1a2,an,现 在的任务是:确定参数的值,使得在节点处的总误差 ∑(x)-y)达到最小 用 Matlab计算: 先按照f(x)建立一个函数文件,文件第一句格式 为 function f=文件名(参数组,节点数组) 再用下面命令格式 参数组= Isqcurvefi(函数文件名,参数组初值,节点数 组,函数值数组) 例2:对例1中的数据,用函数y=a1+ae作 拟合,并画图显示拟合效果,给出节点处总误差。 先建立并保存函数文件:文件名syp78hsw内容为 function f=-syp78hswj(a, xO) f=a(1)+a(2)°exp(-a(3)*xO) 再下面主程序 clear hold on x0=19y0=4.54499,535,565590,6.10,6.26639650] for F=1: 9 plot(xO()y0①)2+) end cSce=[1, 1, 1: a=lsqcurvefit('syp78hswj, cscz, xO,yo) = 0: 0.2: 10 f-syp78hswj(a, x), plot(x, f) f-syp78hswj(a, x0); wc=sqrt(sum((f-y0). 2) hold off 执行得:(a1a2a3)=(69805-2991102031) 节点处总误差wc=0.0076
2.用一般函数作最小二乘拟合 已知 m m y y y y x x x x ... ... 0 1 0 1 : : ,要用一个函数 f (x) 来近 似代表 y ,此函数中含有几个待定参数 a a an , ,..., 1 2 ,现 在的任务是:确定参数的值,使得在节点处的总误差 = − m i i i f x y 0 2 ( ( ) ) 达到最小。 用 Matlab 计算: 先按照 f (x) 建立一个函数文件,文件第一句格式 为 function f=文件名(参数组, 节点数组) 再用下面命令格式 参数组=lsqcurvefit(‘函数文件名’,参数组初值,节点数 组,函数值数组) 例 2:对例 1 中的数据,用函数 a x y a a e 3 1 2 − = + 作 拟合,并画图显示拟合效果,给出节点处总误差。 先建立并保存函数文件:文件名 syp78hswj 内容为: function f=syp78hswj(a,x0) f=a(1)+a(2)*exp(-a(3)*x0); 再下面主程序: clear hold on x0=1:9;y0=[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50] ; for i=1:9 plot(x0(i),y0(i),'+') end cscz=[1,1,1]; a=lsqcurvefit('syp78hswj',cscz,x0,y0) x=0:0.2:10;f=syp78hswj(a,x);plot(x,f) f=syp78hswj(a,x0); wc=sqrt(sum((f-y0).^2)) hold off 执行得: ( , , ) (6.9805, 2.9911,0.2031) a1 a2 a3 = − 节点处总误差 wc=0.0076