用MATLAB作曲线拟合
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12 10 8 6 4
2)计算结果: )计算结果: A = -9.8108 20.1293 -0.0317
2
0 -2 0 0.2 0.4 0.6 0.8 1
f ( x ) = − 9 . 8108 x 2 + 20 . 1293 x − 0 . 0317
2.非线性拟 2.非线性拟 合 Matlab的提供了两个求非线性最小二乘拟合的函数 的提供了两个求非线性最小二乘拟合的函数: Matlab的提供了两个求非线性最小二乘拟合的函数: lsqcurvefit和lsqnonlin 两个命令都要先建立M 文件fun.m lsqnonlin。 fun.m, lsqcurvefit lsqnonlin。两个命令都要先建立M-文件fun.m, 在其中定义函数f(x) 但两者定义f(x)的方式是不同的, f(x), f(x)的方式是不同的 在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参 考例题. 考例题 (1) lsqcurvefit 已知数据点 数据点: xdata=(xdata1,xdata2,…,xdatan), xdata=( 数据点 , ydata=( ydata=(ydata1,ydata2,…,ydatan) , lsqcurvefit用以求含参量 用以求含参量x 向量) lsqcurvefit用以求含参量x(向量)的向量值函数 F(x,xdata)=( ),…, F(x,xdata)=(F(x,xdata1), ,F(x,xdatan))T 中的参变量x(向量),使得 中的参变量x(向量),使得 x(向量),
c (t ) = a + be 0.0.2 kt 例2 用下面一组数据拟合
中的参数a, , 中的参数 ,b,k
tj
100 200 300 400 500 600 700 800 900 1000
c j ×103 4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59
解:输入以下命令: 输入以下命令: x=0:0.1:1; y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; A=polyfit(x,y,2) %作出数据点和拟合曲线的图形 作出数据点和拟合曲线的图形 z=polyval(A,x); plot(x,y,'k+',x,z,'r')
该问题即解最优化问题: 该问题即解最优化问题:
min F (a, b, k ) = ∑ [a + be
j =1 10 − 0.02 kt j
− c j ]2
解法1 用命令lsqcurvefit 解法1. 用命令lsqcurvefit F(x,tdata)= (a + be−0.02kt1 ,⋯, a + be−0.02kt10 )T ,x=(a,b,k) 1)编写M-文件 curvefun1.m 编写M function f=curvefun1(x,tdata) f=x(1)+x(2)*exp(-0.02*x(3)*tdata) %其中 x(1)=a; x(2)=b;x(3)=k; 其中 ; 2)输入命令 ) tdata=100:100:1000 cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39, cdata= *[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39, 6.50,6.59]; x0=[0.2,0.05,0.05]; x=lsqcurvefit ('curvefun1',x0,tdata,cdata) f= curvefun1(x,tdata)
多项式在 x 处的值 y 可用以下命令计算: 可用以下命令计算: y=polyval( y=polyval(a,x)
例 对下面一组数据作二次多项式拟合
xi yi 0.1 1.978 0.2 3.28 0.4 6.16 0.5 0.6 0.7 9.58 0.8 0.9 1
7.34 7.66
9.48 9.30 11.2
n 2 i i
∑ ( F ( x, xdata ) − ydata )
i =1
最小
输入格式为: 输入格式为: (1) x = lsqcurvefit (‘fun’,x0,xdata,ydata); (2) x =lsqcurvefit (‘fun’,x0,xdata,ydata,options); (3) x = lsqcurvefit (‘fun’,x0,xdata,ydata,options,’grad’); (4) [x, options] = lsqcurvefit (‘fun’,x0,xdata,ydata,…); (5) [x, options,funval] = lsqcurvefit (‘fun’,x0,xdata,ydata,…); (6) [x, options,funval, Jacob] = lsqcurvefit (‘fun’,x0,xdata,ydata,…); 说明:x = lsqcurvefit (‘fun’,x0,xdata,ydata,options); fun是一个事先建立的 是一个事先建立的 定义函数F(x,xdata) 的 定义函数 M-文件 自变量为 和 文件, 文件 自变量为x和 xdata 选项见无 迭代初值 已知数据点 约束优化
用MATLAB作曲线拟合 作曲线拟合
1. 线性拟合 作多项式f(x)=a1xm+ …+amx+am+1拟合,可用以下命令 拟合,可用以下命令: 作多项式 a=polyfit(x,y,m) 输出拟合多项式系数 a=[a1, …am , am+1] (数组)) 数组) 数组 输入同长度 的数组X, 的数组 ,Y 拟合多项 式次数
函数curvefun2的自变量是 ,cdata和tdata是已 的自变量是x, 函数 的自变量是 和 是已 知参数,故应将cdata tdata的值写在 知参数,故应将 的值写在 curvefun2.m中 中
2)输入命令: )输入命令 x0=[0.2,0.05,0.05]; x=lsqnonlin('cu法2 解法2: 用命令 lsqnonlin f(x)=F(x,tdata,ctada)= (a + be −0.02 kt1 − c1 , ⋯ , a + be −0.02 kt10 − c1 )T x=(a,b,k) ( , , ) 1)编写M-文件 curvefun2.m 编写M 编写 function f=curvefun2(x) tdata=100:100:1000; cdata=1e-03*[4.54,4.99,5.35,5.65,5.90, 6.10,6.26,6.39,6.50,6.59]; f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata
2. lsqnonlin 已知数据点: 已知数据点: xdata=(xdata1,xdata2,…,xdatan) ydata=(ydata1,ydata2,…,ydatan) lsqnonlin用以求含参量x(向量)的向量值函数 用以求含参量x 向量) 用以求含参量 f(x)=(f (x),…,f f(x)=(f1(x),f2(x), ,fn(x))T
t
5
7
9
V (伏) 6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63 求拟合函数: 求拟合函数: v(t ) = V − (V − V0 )e
−
τ
T 2 2
中的参量x 中的参量x,使得
2
f ( x) f ( x) = f1 ( x) + f 2 ( x) + ⋯ + f n ( x)
最小。 最小。 其中 fi(x)=f(x,xdatai,ydatai) ) ( , =F(x,xdatai)-ydatai
输入格式为: 输入格式为: 1) x=lsqnonlin(‘fun’,x0); 2) x= lsqnonlin (‘fun’,x0,options); 3) x= lsqnonlin (‘fun’,x0,options,‘grad’); 4) [x,options]= lsqnonlin (‘fun’,x0,…); 5) [x,options,funval]= lsqnonlin (‘fun’, 说明:x= , , ); x0,…); lsqnonlin (‘fun’,x0,options); fun是一个事先建立的 是一个事先建立的 定义函数f(x)的M-文件, 文件, 定义函数 的 文件 自变量为x 自变量为 选项见无 迭代初值 约束优化
例. 由数据
温度t( 温度 0C) 20.5 32.7 51.0 73.0 95.7 电阻R(Ω 电阻 Ω) 765 826 873 942 1032
拟合R=a1t+a2 拟合
用命令: 用命令: polyfit(x,y,m) 得到 a1=3.3940, a2=702.4918
练习1 练习 用给定的多项式,如y=x3-6x2+5x-3,产生一组数 据(xi,yi,i=1,2,…,n),再在yi上添加随机干扰(可用rand产生 (0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数), 然后用xi和添加了随机干扰的yi作的3次多项式拟合,与原 系数比较。 如果作2或4次多项式拟合,结果如何? 练习2. 已知数据: 练习2. 已知数据: t (秒) 0.5 1 2 3 4
3)运算结果为: 运算结果为 f =0.0043 0.0062 x = 0.0063 0.0051 0.0062 -0.0034 0.0056 0.0063 0.2542 0.0059 0.0063 0.0061 0.0063
4)拟合得a=0.0063 b=-0.0034 k=0.2542 拟合得 可以看出,两个命令的计算结果是相同的 可以看出 两个命令的计算结果是相同的. 两个命令的计算结果是相同的
2)计算结果: )计算结果: A = -9.8108 20.1293 -0.0317
2
0 -2 0 0.2 0.4 0.6 0.8 1
f ( x ) = − 9 . 8108 x 2 + 20 . 1293 x − 0 . 0317
2.非线性拟 2.非线性拟 合 Matlab的提供了两个求非线性最小二乘拟合的函数 的提供了两个求非线性最小二乘拟合的函数: Matlab的提供了两个求非线性最小二乘拟合的函数: lsqcurvefit和lsqnonlin 两个命令都要先建立M 文件fun.m lsqnonlin。 fun.m, lsqcurvefit lsqnonlin。两个命令都要先建立M-文件fun.m, 在其中定义函数f(x) 但两者定义f(x)的方式是不同的, f(x), f(x)的方式是不同的 在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参 考例题. 考例题 (1) lsqcurvefit 已知数据点 数据点: xdata=(xdata1,xdata2,…,xdatan), xdata=( 数据点 , ydata=( ydata=(ydata1,ydata2,…,ydatan) , lsqcurvefit用以求含参量 用以求含参量x 向量) lsqcurvefit用以求含参量x(向量)的向量值函数 F(x,xdata)=( ),…, F(x,xdata)=(F(x,xdata1), ,F(x,xdatan))T 中的参变量x(向量),使得 中的参变量x(向量),使得 x(向量),
c (t ) = a + be 0.0.2 kt 例2 用下面一组数据拟合
中的参数a, , 中的参数 ,b,k
tj
100 200 300 400 500 600 700 800 900 1000
c j ×103 4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59
解:输入以下命令: 输入以下命令: x=0:0.1:1; y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; A=polyfit(x,y,2) %作出数据点和拟合曲线的图形 作出数据点和拟合曲线的图形 z=polyval(A,x); plot(x,y,'k+',x,z,'r')
该问题即解最优化问题: 该问题即解最优化问题:
min F (a, b, k ) = ∑ [a + be
j =1 10 − 0.02 kt j
− c j ]2
解法1 用命令lsqcurvefit 解法1. 用命令lsqcurvefit F(x,tdata)= (a + be−0.02kt1 ,⋯, a + be−0.02kt10 )T ,x=(a,b,k) 1)编写M-文件 curvefun1.m 编写M function f=curvefun1(x,tdata) f=x(1)+x(2)*exp(-0.02*x(3)*tdata) %其中 x(1)=a; x(2)=b;x(3)=k; 其中 ; 2)输入命令 ) tdata=100:100:1000 cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39, cdata= *[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39, 6.50,6.59]; x0=[0.2,0.05,0.05]; x=lsqcurvefit ('curvefun1',x0,tdata,cdata) f= curvefun1(x,tdata)
多项式在 x 处的值 y 可用以下命令计算: 可用以下命令计算: y=polyval( y=polyval(a,x)
例 对下面一组数据作二次多项式拟合
xi yi 0.1 1.978 0.2 3.28 0.4 6.16 0.5 0.6 0.7 9.58 0.8 0.9 1
7.34 7.66
9.48 9.30 11.2
n 2 i i
∑ ( F ( x, xdata ) − ydata )
i =1
最小
输入格式为: 输入格式为: (1) x = lsqcurvefit (‘fun’,x0,xdata,ydata); (2) x =lsqcurvefit (‘fun’,x0,xdata,ydata,options); (3) x = lsqcurvefit (‘fun’,x0,xdata,ydata,options,’grad’); (4) [x, options] = lsqcurvefit (‘fun’,x0,xdata,ydata,…); (5) [x, options,funval] = lsqcurvefit (‘fun’,x0,xdata,ydata,…); (6) [x, options,funval, Jacob] = lsqcurvefit (‘fun’,x0,xdata,ydata,…); 说明:x = lsqcurvefit (‘fun’,x0,xdata,ydata,options); fun是一个事先建立的 是一个事先建立的 定义函数F(x,xdata) 的 定义函数 M-文件 自变量为 和 文件, 文件 自变量为x和 xdata 选项见无 迭代初值 已知数据点 约束优化
用MATLAB作曲线拟合 作曲线拟合
1. 线性拟合 作多项式f(x)=a1xm+ …+amx+am+1拟合,可用以下命令 拟合,可用以下命令: 作多项式 a=polyfit(x,y,m) 输出拟合多项式系数 a=[a1, …am , am+1] (数组)) 数组) 数组 输入同长度 的数组X, 的数组 ,Y 拟合多项 式次数
函数curvefun2的自变量是 ,cdata和tdata是已 的自变量是x, 函数 的自变量是 和 是已 知参数,故应将cdata tdata的值写在 知参数,故应将 的值写在 curvefun2.m中 中
2)输入命令: )输入命令 x0=[0.2,0.05,0.05]; x=lsqnonlin('cu法2 解法2: 用命令 lsqnonlin f(x)=F(x,tdata,ctada)= (a + be −0.02 kt1 − c1 , ⋯ , a + be −0.02 kt10 − c1 )T x=(a,b,k) ( , , ) 1)编写M-文件 curvefun2.m 编写M 编写 function f=curvefun2(x) tdata=100:100:1000; cdata=1e-03*[4.54,4.99,5.35,5.65,5.90, 6.10,6.26,6.39,6.50,6.59]; f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata
2. lsqnonlin 已知数据点: 已知数据点: xdata=(xdata1,xdata2,…,xdatan) ydata=(ydata1,ydata2,…,ydatan) lsqnonlin用以求含参量x(向量)的向量值函数 用以求含参量x 向量) 用以求含参量 f(x)=(f (x),…,f f(x)=(f1(x),f2(x), ,fn(x))T
t
5
7
9
V (伏) 6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63 求拟合函数: 求拟合函数: v(t ) = V − (V − V0 )e
−
τ
T 2 2
中的参量x 中的参量x,使得
2
f ( x) f ( x) = f1 ( x) + f 2 ( x) + ⋯ + f n ( x)
最小。 最小。 其中 fi(x)=f(x,xdatai,ydatai) ) ( , =F(x,xdatai)-ydatai
输入格式为: 输入格式为: 1) x=lsqnonlin(‘fun’,x0); 2) x= lsqnonlin (‘fun’,x0,options); 3) x= lsqnonlin (‘fun’,x0,options,‘grad’); 4) [x,options]= lsqnonlin (‘fun’,x0,…); 5) [x,options,funval]= lsqnonlin (‘fun’, 说明:x= , , ); x0,…); lsqnonlin (‘fun’,x0,options); fun是一个事先建立的 是一个事先建立的 定义函数f(x)的M-文件, 文件, 定义函数 的 文件 自变量为x 自变量为 选项见无 迭代初值 约束优化
例. 由数据
温度t( 温度 0C) 20.5 32.7 51.0 73.0 95.7 电阻R(Ω 电阻 Ω) 765 826 873 942 1032
拟合R=a1t+a2 拟合
用命令: 用命令: polyfit(x,y,m) 得到 a1=3.3940, a2=702.4918
练习1 练习 用给定的多项式,如y=x3-6x2+5x-3,产生一组数 据(xi,yi,i=1,2,…,n),再在yi上添加随机干扰(可用rand产生 (0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数), 然后用xi和添加了随机干扰的yi作的3次多项式拟合,与原 系数比较。 如果作2或4次多项式拟合,结果如何? 练习2. 已知数据: 练习2. 已知数据: t (秒) 0.5 1 2 3 4
3)运算结果为: 运算结果为 f =0.0043 0.0062 x = 0.0063 0.0051 0.0062 -0.0034 0.0056 0.0063 0.2542 0.0059 0.0063 0.0061 0.0063
4)拟合得a=0.0063 b=-0.0034 k=0.2542 拟合得 可以看出,两个命令的计算结果是相同的 可以看出 两个命令的计算结果是相同的. 两个命令的计算结果是相同的