函数逼近与曲线(面)拟合的MATLAB程序
更新时间:2023-06-08 19:15:01 阅读量: 实用文档 文档下载
函数逼近与曲线(面)拟合的MATLAB程序
7.1 曲线拟合、误差及其MATLAB程序
例7.1.1 已知函数y f(x) 5x3 14x 7sin2(2 x)和一组数据(xi,yi)列入表7–1中,比较最大误差,平均误差,均方根误差和误差平方和.
表7–1 例7.1.1的一组数据(
x,y)
解 由给定的函数和数据,在MATLAB工作窗口输入
>> x=[-2.5,-1.7,-1.1,-0.8,0,0.1,0.5,3.6]; n=length(x);
y=[-43.50 5.69 11.34 14.16 0 1.02 -6.37 185.84];
f=5.*x.^3-14.*x+7.*(sin(2*pi*x)).^2; fy=abs(f-y);
fy2=fy.^2; [x',y',f',fy',fy2'], Ew=max(fy),
E1=sum(fy)/n, E2=sqrt((sum(fy2))/n), E=sum(fy2)
运行后屏幕显示如下
x y f fy fy2
-2.5000 -43.5000 -43.1250 0.3750 0.1406
-1.7000 5.6900 5.5666 0.1234 0.0152
-1.1000 11.3400 11.1634 0.1766 0.0312
-0.8000 14.1600 14.9716 0.8116 0.6586
0 0 0 0 0
0.1000 1.0200 1.0234 0.0034 0.0000
0.5000 -6.3700 -6.3750 0.0050 0.0000
3.6000 185.8400 185.2984 0.5416 0.2933
Ew = E1 = E2 = E =
0.8116 0.2546 0.3773 1.1390
7.2 曲线拟合的线性最小二乘法及其MATLAB程序
例7.2.1 给出一组数据点(xi,yi)列入表7–2中,试用线性最小二乘法求拟合曲线,并用(7.2),(7.3)和(7.4)式估计其误差,作出拟合曲线.
表7–2 例7.2.1的一组数据(
x,y)
解 (1)在MATLAB工作窗口输入程序
>> x=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6];
y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.50 68.04];
plot(x,y,'r*'),
legend('实验数据(xi,yi)')
xlabel('x'), ylabel('y'),
title('例7.2.1的数据点(xi,yi)的散点图')
运行后屏幕显示数据的散点图(略).
(3)编写下列MATLAB程序计算f(x)在(xi,yi)处的函数值,即输入程序
>> syms a1 a2 a3 a4
x=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6];
fi=a1.*x.^3+ a2.*x.^2+ a3.*x+ a4
运行后屏幕显示关于a1,a2, a3和a4的线性方程组
函数逼近与曲线(面)拟合的MATLAB程序
-4913/1000*a1+289/100*a2-17/10*a3+a4,
-1331/1000*a1+121/100*a2-11/10*a3+a4,
-64/125*a1+16/25*a2-4/5*a3+a4,
a4, 1/1000*a1+1/100*a2+1/10*a3+a4,
27/8*a1+9/4*a2+3/2*a3+a4, 19683/1000*a1+729/100*a2+27/10*a3+a4, 5832/125*a1+324/25*a2+18/5*a3+a4]
编写构造误差平方和的MATLAB程序
>> y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.50 68.04];
fi=[-125/8*a1+25/4*a2-5/2*a3+a4,
-4913/1000*a1+289/100*a2-17/10*a3+a4,
-1331/1000*a1+121/100*a2-11/10*a3+a4,
-64/125*a1+16/25*a2-4/5*a3+a4, a4, 1/1000*a1+1/100*a2+1/10*a3+a4,
27/8*a1+9/4*a2+3/2*a3+a4,
19683/1000*a1+729/100*a2+27/10*a3+a4,
5832/125*a1+324/25*a2+18/5*a3+a4];
fy=fi-y; fy2=fy.^2; J=sum(fy.^2)
运行后屏幕显示误差平方和如下
J=
(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+2
89/100*a2-17/10*a3+a4+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/
2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2
为求a1,a2,a3,a4使J达到最小,只需利用极值的必要条件 J 0 (k 1,2,3,4), ak
得到关于a1,a2,a3,a4的线性方程组,这可以由下面的MATLAB程序完成,即输入程序
>> syms a1 a2 a3 a4
J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+
289/100*a2-17/10*a3+a4...+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2;
Ja1=diff(J,a1); Ja2=diff(J,a2); Ja3=diff(J,a3); Ja4=diff(J,a4);
Ja11=simple(Ja1), Ja21=simple(Ja2), Ja31=simple(Ja3), Ja41=simple(Ja4),
运行后屏幕显示J分别对a1, a2 ,a3 ,a4的偏导数如下
Ja11=
56918107/10000*a1+32097579/25000*a2+1377283/2500*a3+
23667/250*a4-8442429/625
Ja21 =
32097579/25000*a1+1377283/2500*a2+23667/250*a3+67*a4
+767319/625
Ja31 =
1377283/2500*a1+23667/250*a2+67*a3+18/5*a4-232638/125
Ja41 =
23667/250*a1+67*a2+18/5*a3+18*a4+14859/25
解线性方程组Ja11 =0,Ja21 =0,Ja31 =0,Ja41 =0,输入下列程序
>>A=[56918107/10000, 32097579/25000, 1377283/2500, 23667/250; 32097579/25000, 1377283/2500, 23667/250, 67; 1377283/2500, 23667/250, 67, 18/5; 23667/250, 67, 18/5, 18];
B=[8442429/625, -767319/625, 232638/125, -14859/25];
函数逼近与曲线(面)拟合的MATLAB程序
运行后屏幕显示拟合函数f及其系数C如下
C = 5.0911 -14.1905 6.4102 -8.2574
f=716503695845759/140737488355328*x^3
-7988544102557579/562949953421312*x^2
+1804307491277693/281474976710656*x
-4648521160813215/562949953421312
故所求的拟合曲线为
f(x) 5.0911x3 14.1905x2 6.4102x 8.2574.
(4)编写下面的MATLAB程序估计其误差,并作出拟合曲线和数据的图形.输入程序
>> xi=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6];
y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.50 68.04];
n=length(xi);
f=5.0911.*xi.^3-14.1905.*xi.^2+6.4102.*xi -8.2574;
x=-2.5:0.01: 3.6;
F=5.0911.*x.^3-14.1905.*x.^2+6.4102.*x -8.2574;
fy=abs(f-y); fy2=fy.^2; Ew=max(fy),
E1=sum(fy)/n, E2=sqrt((sum(fy2))/n)
plot(xi,y,'r*'), hold on, plot(x,F,'b-'), hold off
legend('数据点(xi,yi)','拟合曲线y=f(x)'),
xlabel('x'), ylabel('y'),
title('例7.2.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')
运行后屏幕显示数据(xi,yi)与拟合函数f的最大误差Ew,平均误差E1和均方根误差E2及其数据点(xi,yi)和拟合曲线y=f(x)的图形(略).
Ew = E1 = E2 =
3.105 4 0.903 4 1.240 9
7.3 函数rk(x)的选取及其MATLAB程序
例7.3.1 给出一组实验数据点(xi,yi)的横坐标向量为
x=(-8.5,-8.7,-7.1,-6.8,-5.10,-4.5,-3.6,-3.4,-2.6,-2.5, -2.1,-1.5, -2.7,-3.6),纵横坐标向量为y=(459.26,52.81,198.27,165.60,59.17,41.66,25.92, 22.37,13.47, 12.87, 11.87,6.69,14.87,24.22),试用线性最小二乘法求拟合曲线,并用(7.2),(7.3)和(7.4)式估计其误差,作出拟合曲线.
解 (1)在MATLAB工作窗口输入程序
>>x=[-8.5,-8.7,-7.1,-6.8,-5.10,-4.5,-3.6,-3.4,-2.6,-2.5,
-2.1,-1.5, -2.7,-3.6];
y=[459.26,52.81,198.27,165.60,59.17,41.66,25.92,
22.37,13.47, 12.87, 11.87,6.69,14.87,24.22];
plot(x,y,'r*'),legend('实验数据(xi,yi)')
xlabel('x'), ylabel('y'),
title('例7.3.1的数据点(xi,yi)的散点图')
运行后屏幕显示数据的散点图(略).
(3)编写下列MATLAB程序计算f(x)在(xi,yi)处的函数值,即输入程序
>> syms a b
x=[-8.5,-8.7,-7.1,-6.8,-5.10,-4.5,-3.6,-3.4,-2.6,-2.5,-2
.1,-1.5,-2.7,-3.6]; fi=a.*exp(-b.*x)
运行后屏幕显示关于a和b的线性方程组
fi =
[ a*exp(17/2*b), a*exp(87/10*b), a*exp(71/10*b),
a*exp(34/5*b), a*exp(51/10*b), a*exp(9/2*b), a*exp(18/5*b), a*exp(17/5*b), a*exp(13/5*b), a*exp(5/2*b), a*exp(21/10*b),
函数逼近与曲线(面)拟合的MATLAB程序
编写构造误差平方和的MATLAB程序如下
>>y=[459.26,52.81,198.27,165.60,59.17,41.66,25.92,22.37,
13.47,12.87, 11.87, 6.69,14.87,24.22];
fi =[ a*exp(17/2*b), a*exp(87/10*b), a*exp(71/10*b), a*exp(34/5*b), a*exp(51/10*b), a*exp(9/2*b), a*exp(18/5*b), a*exp(17/5*b), a*exp(13/5*b), a*exp(5/2*b), a*exp(21/10*b), a*exp(3/2*b), a*exp(27/10*b), a*exp(18/5*b)];
fy=fi-y;
fy2=fy.^2;
J=sum(fy.^2)
运行后屏幕显示误差平方和如下
J =
(a*exp(17/2*b)-22963/50)^2+(a*exp(87/10*b)-5281/100)^2+(
a*exp(71/10*b)-19827/100)^2+(a*exp(34/5*b)-828/5)^2+(a*exp(51/10*b)-5917/100)^2+(a*exp(9/2*b)-2083/50)^2+(a*exp(18/5*b)-648/25)^2+(a*exp(17/5*b)-2237/100)^2+(a*exp(13/5*b)-1347/100)^2+(a*exp(5/2*b)-1287/100)^2+(a*exp(21/10*b)-1187/100)^2+(a*exp(3/2*b)-669/100)^2+(a*exp(27/10*b)-1487/100)^2+(a*exp(18/5*b)-1211/50)^2
为求a,b使J达到最小,只需利用极值的必要条件,得到关于a,b的线性方程组,这可以由下面的MATLAB程序完成,即输入程序
>> syms a b
J=(a*exp(17/2*b)-22963/50)^2+(a*exp(87/10*b)-5281/100)^2
+(a*exp(71/10*b)-19827/100)^2+(a*exp(34/5*b)-828/5)^2+(a*exp(51/10*b)-5917/100)^2+(a*exp(9/2*b)-2083/50)^2+(a*exp(18/5*b)-648/
25)^2+(a*exp(17/5*b)-2237/100)^2+(a*exp(13/5*b)-1347/100)^2+(a*exp(5/2*b)-1287/100)^2+(a*exp(21/10*b)-1187/100)^2+(a*exp(3/2*b)-669/100)^2+(a*exp(27/10*b)-1487/100)^2+(a*exp(18/5*b)-1211/50)^2;
Ja=diff(J,a); Jb=diff(J,b);
Ja1=simple(Ja), Jb1=simple(Jb),
运行后屏幕显示J分别对a,b的偏导数如下
Ja1 =
2*a*exp(3*b)+2*a*exp(17*b)+2*a*exp(87/5*b)+2*exp(68/5*b)
*a+2*exp(9*b)*a+2*a*exp(34/5*b)-669/50*exp(3/2*b)-1487/50*exp(27/10*b)-2507/25*exp(18/5*b)-22963/25*exp(17/2*b)-5281/50*exp(87/10*b)-19827/50*exp(71/10*b)-2237/50*exp(17/5*b)-1656/5*exp(34/5*b)-1347/50*exp(13/5*b)-5917/50*exp(51/10*b)-1287/50*exp(5/2*b)-2083/25*exp(9/2*b)-1187/50*exp(21/10*b)+4*a*exp(36/5*b)+2*a*exp(26/5*b)+2*a*exp(71/5*b)+2*a*exp(51/5*b)+2*a*exp(5*b)+2*a*exp(21/5*b)+2*a*exp(27/5*b)
Jb1 =
1/500*a*(2100*a*exp(21/10*b)^2+8500*a*exp(17/2*b)^2+6800
*a*exp(34/5*b)^2-10035*exp(3/2*b)-40149*exp(27/10*b)-180504*exp(18/5*b)-3903710*exp(17/2*b)-459447*exp(87/10*b)-1407717*exp(71/10*b)-76058*exp(17/5*b)-1126080*exp(34/5*b)-35022*exp(13/5*b)-301767*exp(51/10*b)-32175*exp(5/2*b)-187470*exp(9/2*b)-24927*exp(21/10*b)+7100*a*exp(71/10*b)^2+5100*a*exp(51/10*b)^2+4500*a*exp(9/2*b)^2+7200*a*exp(18/5*b)^2+3400*a*exp(17/5*b)^2+2600*a*exp(13/5*b)^2+2500*a*exp(5/2*b)^2+1500*a*exp(3/2*b)^2+2700*a*exp(27/10*b)^2+8700*a*exp(87/10*b)^2)
用解二元非线性方程组的牛顿法的MATLAB程序求解线性方程组Ja1 =0,Jb1 =0,得
a = b=
2.811 0 0.581 6
故所求的拟合曲线(7.13)为
函数逼近与曲线(面)拟合的MATLAB程序
f(x) 2.8110e 0.5816x. (7.14)
(4)根据(7.2),(7.3),(7.4)和(7.14)式编写下面的MATLAB程序估计其误差,并做出拟合曲线和数据的图形.输入程序
>> xi=[-8.5 -8.7 -7.1 -6.8 -5.10 -4.5 -3.6 -3.4 -2.6 -2.5
-2.1 -1.5 -2.7 -3.6];
y=[459.26 52.81 198.27 165.60 59.17 41.66 25.92 22.37
13.47 12.87 11.87 6.69 14.87 24.22];
n=length(xi); f=2.8110.*exp(-0.5816.*xi); x=-9:0.01: -1;
F=2.8110.*exp(-0.5816.*x); fy=abs(f-y); fy2=fy.^2;
Ew=max(fy),
E1=sum(fy)/n, E2=sqrt((sum(fy2))/n), plot(xi,y,'r*'), hold on plot(x,F,'b-'), hold off,
legend('数据点(xi,yi)','拟合曲线y=f(x)')
xlabel('x'), ylabel('y'),
title('例7.3.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')
运行后屏幕显示数据(xi,yi)与拟合函数f的最大误差Ew = 390.141 5,平均误差E1=36.942 2和均方根误差E2=106.031 7及其数据点(xi,yi)和拟合曲线y=f(x)的图形(略).
7.4 多项式拟合及其MATLAB程序
例7.4.1 给出一组数据点(xi,yi)列入表7–3中,试用线性最小二乘法求拟合曲线,并用(7.2),(7.3)和(7.4)式估计其误差,作出拟合曲线.
表7–3 例7.4.1的一组数据(
x,y)
解 (1)首先根据表7–3给出的数据点ii,用下列MATLAB程序画出散点图. 在MATLAB工作窗口输入程序
>> x=[-2.9 -1.9 -1.1 -0.8 0 0.1 1.5 2.7 3.6];
y=[53.94 33.68 20.88 16.92 8.79 8.98 4.17 9.12
19.88];
plot(x,y,'r*'), legend('数据点(xi,yi)')
xlabel('x'), ylabel('y'),
title('例7.4.1的数据点(xi,yi)的散点图')
运行后屏幕显示数据的散点图(略).
(3)用作线性最小二乘拟合的多项式拟合的MATLAB程序求待定系数ak (k 1,2,3).输入程序
>> a=polyfit(x,y,2)
运行后输出(7.16)式的系数
a =
2.8302 -7.3721 9.1382
故拟合多项式为
f(x) 2.8302x2 7.3721x 9.1382.
(4)编写下面的MATLAB程序估计其误差,并做出拟合曲线和数据的图形.输入程序
>> xi=[-2.9 -1.9 -1.1 -0.8 0 0.1 1.5 2.7 3.6];
y=[53.94 33.68 20.88 16.92 8.79 8.98 4.17 9.12 19.88];
n=length(xi); f=2.8302.*xi.^2-7.3721.*xi+9.1382
x=-2.9:0.001:3.6;F=2.8302.*x.^2-7.3721.*x+8.79;
fy=abs(f-y); fy2=fy.^2; Ew=max(fy), E1=sum(fy)/n,
E2=sqrt((sum(fy2))/n), plot(xi,y,'r*', x,F,'b-'),
legend('数据点(xi,yi)','拟合曲线y=f(x)')
xlabel('x'), ylabel('y'),
title('例7.4.1 的数据点(xi,yi)和拟合曲线y=f(x)的图形')
函数逼近与曲线(面)拟合的MATLAB程序
运行后屏幕显示数据(xi,yi)与拟合函数f的最大误差Ew,平均误差E1和均方根误差E2及其数据点(xi,yi)和拟合曲线y=f(x)的图形(略).
Ew = E1 = E2 =
0.745 7, 0.389 2, 0.436 3
7.5 拟合曲线的线性变换及其MATLAB程序
例7.5.1 给出一组实验数据点(xi,yi)的横坐标向量为x=(7.5 6.8 5.10 4.5
3.6 3.4 2.6 2.5 2.1 1.5 2.7 3.6),纵横坐标向量为y=(359.26 165.60 59.17 41.66 25.92 22.37 13.47 12.87 11.87 6.69 14.87 24.22),试用线性变换和线性最小二乘法求拟合曲线,并用(7.2),(7.3)和(7.4)式估计其误差,作出拟合曲线.
解 (1)首先根据给出的数据点(xi,yi),用下列MATLAB程序画出散点图.
在MATLAB工作窗口输入程序
>> x=[7.5 6.8 5.10 4.5 3.6 3.4 2.6 2.5 2.1 1.5 2.7
3.6];
y=[359.26 165.60 59.17 41.66 25.92 22.37 13.47 12.87 11.87 6.69 14.87 24.22];
plot(x,y,'r*'), legend('数据点(xi,yi)')
xlabel('x'), ylabel('y'),
title('例7.5.1的数据点(xi,yi)的散点图')
运行后屏幕显示数据的散点图(略).
(2)根据数据散点图,取拟合曲线为
bx y ae (a 0,b 0), (7.19)
其中a,b是待定系数.令Y lny,A lna,B b,则(7.19)化为Y A Bx.在MATLAB工作窗口输入程序
>> x=[7.5 6.8 5.10 4.5 3.6 3.4 2.6 2.5 2.1 1.5 2.7
3.6];
y=[359.26 165.60 59.17 41.66 25.92 22.37 13.47 12.87 11.87 6.69 14.87 24.22];
Y=log(y); a=polyfit(x,Y,1); B=a(1);A=a(2); b=B,a=exp(A)
n=length(x); X=8:-0.01:1; Y=a*exp(b.*X); f=a*exp(b.*x);
plot(x,y,'r*',X,Y,'b-'), xlabel('x'),ylabel('y')
legend('数据点(xi,yi)','拟合曲线y=f(x)')
title('例7.5.1 的数据点(xi,yi)和拟合曲线y=f(x)的图形')
fy=abs(f-y); fy2=fy.^2; Ew=max(fy), E1=sum(fy)/n,
E2=sqrt((sum(fy2))/n)
bx运行后屏幕显示y ae的系数b =0.624 1,a =2.703 9,数据(xi,yi)与拟合函数f
的最大误差Ew =67.641 9,平均误差E1=8.677 6和均方根误差E2=20.711 3及其数据点(xi,yi)和拟合曲线f(x) 2.7039e0.6241x的图形(略).
7.6 函数逼近及其MATLAB程序
最佳均方逼近的MATLAB主程序
function [yy1,a,WE]=zjjfbj(f,X,Y,xx)
m=size(f);n=length(X);m=m(1);b=zeros(m,m); c=zeros(m,1);
if n~=length(Y)
error('X和Y的维数应该相同')
end
for j=1:m
for k=1:m
b(j,k)=0;
for i=1:n
函数逼近与曲线(面)拟合的MATLAB程序
end
end
c(j)=0;
for i=1:n
c(j)=c(j)+feval(f(j,:),X(i))*Y(i);
end
end
a=b\c;
WE=0;
for i=1:n
ff=0;
for j=1:m
ff=ff+a(j)*feval(f(j,:),X(i));
end
WE=WE+(Y(i)-ff)*(Y(i)-ff);
end
if nargin==3
return;
end
yy=[];
for i=1:m
l=[];
for j=1:length(xx)
l=[l,feval(f(i,:),xx(j))];
end
yy=[yy l'];
end
yy=yy*a; yy1=yy'; a=a';WE;
2例7.6.1 对数据X和Y, 用函数y 1,y x,y x进行逼近,用所得到的逼近函
数计算在x 6.5处的函数值,并估计误差.其中
X=(1 3 4 5 6 7 8 9); Y=(-11 -13 -11 -7 -1 7 17 29).
解 在MATLAB工作窗口输入程序
>> X=[ 1 3 4 5 6 7 8 9]; Y=[-11 -13 -11 -7 -1 7 17 29];
f=['fun0';'fun1';'fun2']; [yy,a,WE]=zjjfbj(f,X,Y,6.5)
运行后屏幕显示如下
yy =
2.75000000000003
a =
-7.00000000000010 -4.99999999999995 1.00000000000000
WE =
7.172323350269439e-027
2y cosx,y ex,y sinx例7.6.2 对数据X和Y,用函数y 1,y x,y x,
进行逼近,其中X=(0 0.50 1.00 1.50 2.00 2.50 3.00),Y=(0 0.4794 0.8415 0.9815 0.9126 0.5985 0.1645).
解 在MATLAB工作窗口输入程序
>> X=[ 0 0.50 1.00 1.50 2.00 2.50 3.00];
Y=[0 0.4794 0.8415 0.9815 0.9126 0.5985 0.1645];
f=['fun0';'fun1';'fun2';'fun3';'fun4';'fun5'];xx=0:0.2:3;
[yy,a,WE]=zjjfbj(f,X,Y, xx), plot(X,Y,'ro',xx,yy,'b-')
运行后屏幕显示如下(图略)
yy = Columns 1 through 7
-0.0005 0.2037 0.3939 0.5656 0.7141 0.8348 0.9236
Columns 8 through 14
函数逼近与曲线(面)拟合的MATLAB程序
0.5191
Columns 15 through 16
0.3444 0.1642
a = 0.3828 0.4070 -0.3901 0.0765 -0.4598 0.5653 WE = 1.5769e-004
即,最佳逼近函数为
y=0.3828+0.4070*x-0.3901*x^2+0.0765*exp(x) -0.4598*cos(x) +0.5653*sin(x).
7.7 三角多项式逼近及其MATLAB程序
计算三角多项式的MATLAB主程序
function [A,B,Y1,Rm]=sanjiao(X,Y,X1,m)
n= length(X)-1;max1=fix((n-1)/2);
if m > max1
m=max1;
end
A=zeros(1,m+1);B=zeros(1,m+1);
Ym=(Y(1)+Y(n+1))/2; Y(1)=Ym; Y(n+1)=Ym; A(1)=2*sum(Y)/n; for i=1:m
B(i+1)=sin(i*X)*Y'; A(i+1)=cos(i*X)*Y';
end
A=2*A/n; B=2*B/n; A(1)=A(1)/2;Y1=A(1);
for k=1:m
Y1=Y1+A(k+1)*cos(k*X1)+ B(k+1)*sin(k*X1);
Tm=A(1)+A(k+1).*cos(k*X)+ B(k+1).*sin(k*X); k=k+1;
end Y;Tm; Rm=(sum(Y-Tm).^2)/n;
例7.7.1 根据[ , ]上的n 13,60,350个等距横坐标点xi 2i n(i 0,1,2, ,n)和函数f(x) 2sinx. 3
(1)求f(x)的6阶三角多项式逼近,计算均方误差;
(2)将这三个三角多项式分别与f(x)的傅里叶级数
3 nn 1f(x) ( 1)sinnx 2 n 19n 1
的前6项进行比较;
(3)利用三角多项式分别计算Xi= -2, 2.5的值;
(4)在同一坐标系中,画出函数f(x),n 13,60,350的三角多项式和数据点的图形.
解 (1)输入程序
>> X1=-pi:2*pi/13:pi;Y1=2*sin(X1/3);X1i=[-2,2.5];
[A1,B1,Y11,Rm1]=sanjiao(X1,Y1,X1i,6),
X2=-pi:2*pi/60:pi;Y2=2*sin(X2/3);
[A2,B2,Y12,Rm2]=sanjiao(X2,Y2,X1i,6)
X3=-pi:2*pi/350:pi;Y3=2*sin(X3/3);
[A3,B3,Y13,Rm3]=sanjiao(X3,Y3,X1i,6)
X1i=[-2,2.5];Y1=2*sin(X1i/3)
for n=1:6
bi=(-1)^(n+1)*18*sqrt(3)*n/(pi*(9*n^2-1))
end
(2)画图,输入程序
>>X1=-pi:2*pi/13:pi;Y1=2*sin(X1/3);
Xi=-pi:0.001:pi; f=2*sin(Xi/3);
[A1,B1,Y1i,R1m]=sanjiao(X1,Y1,Xi,6);X2=-pi:2*pi/60:pi;
函数逼近与曲线(面)拟合的MATLAB程序
[A2,B2,Y2i,R2m]=sanjiao(X2,Y2,Xi,6);
[A3,B3,Y3i,R3m]=sanjiao(X3,Y3,Xi,6);
plot(X1,Y1,'r*', Xi, Y1i,'b-',Xi, Y2i,'g--', Xi, Y3i, 'm:',
Xi, f, 'k-.')
xlabel('x'),ylabel('y')
legend('数据点(xi,yi)','n=13的三角多项式','n=60的三角多项式
','n=350的三角多项式','函数f(x)')
title('例7.7.1 的数据点(xi,yi)、n=13,60,350的三角多项式T3
和函数f(x)的图形')
运行后图形(略).
7.8 随机数据点上的二元拟合及其MATLAB程序
例7.8.1 设节点(X,Y,Z)中的X和Y分别是在区间[ 3,3]和[ 2.5,3.5]上的50个随机数,Z是函数Z=7-3xe在(X,Y)的值,拟合点(XI,YI)中的XI=-3:0.2:3, YI=-2.5:0.2:3.5.分别用二元拟合方法中最近邻内插法、三角基线性内插法、三角基三次内插法和MATLAB 4网格化坐标方法计算在(XI,YI)处的值,作出它们的图形,并与被拟和曲面进行比较.
解 (1)最近邻内插法.输入程序
>> x=rand(50,1);
y=rand(50,1); %生成50个一元均匀分布随机数x和y, x,y .
X=-3+(3-(-3))*x;%利用x生成的随机变量.
Y=-2.5+(3.5-(-2.5))*y; %利用y生成的随机变量.
Z=7-3* X.^3 .* exp(-X.^2 - Y.^2); %在每个随机点(X,Y)处计算Z的值.
X1=-3:0.2:3;
Y1=-2.5:0.2:3.5;
[XI,YI] = meshgrid(X1,Y1); %将坐标(XI,YI)网格化.
ZI=griddata(X,Y,Z,XI,YI, 'nearest') %计算在每个插值点(XI,YI)处的插值ZI.
mesh(XI,YI, ZI) %作二元拟合图形.
xlabel('x'), ylabel('y'), zlabel('z'),
title('用最近邻内插法拟合函数z =7-3 x^3 exp(-x^2 - y^2) 的曲面和节点的图形')
%legend('拟合曲面','节点(xi,yi,zi)')
hold on %在当前图形上添加新图形.
plot3(X,Y,Z, 'bo') %用兰色小圆圈画出每个节点(X,Y,Z). hold of %结束在当前图形上添加新图形.
运行后屏幕显示用最近邻内插法拟合函数Z=7-3x3e在两组不同节点处的曲面及其插值ZI(略).
(2)三角基线性内插法.
输入程序
>> x=rand(50,1);
y=rand(50,1); %生成50个一元均匀分布随机数x和y, x,y .
X=-3+(3-(-3))*x;%利用x生成 上的随机变量.
Y=-2.5+(3.5-(-2.5))*y; %利用y生成 上的随机变量.
Z=7-3* X.^3 .* exp(-X.^2 - Y.^2); %在每个随机点(X,Y)处计算Z的值.
X1=-3:0.2:3;
Y1=-2.5:0.2:3.5;
[XI,YI] = meshgrid(X1,Y1); %将坐标(XI,YI)网格化.
-x2 -y23-x2 -y2
函数逼近与曲线(面)拟合的MATLAB程序
ZI=griddata(X,Y,Z,XI,YI, 'linear') %计算在每个插值点(XI,YI)处的插值ZI.
mesh(XI,YI, ZI) %作二元拟合图形.
xlabel('x'), ylabel('y'), zlabel('z'),
title('用三角基线性内插法拟合函数z =7-3 x^3 exp(-x^2 - y^2) 的曲面和节点的图形')
%legend('拟合曲面','节点(xi,yi,zi)')
hold on %在当前图形上添加新图形.
plot3(X,Y,Z, 'bo') %用兰色小圆圈画出每个节点(X,Y,Z). hold of %结束在当前图形上添加新图形.
运行后屏幕显示用三角基线性内插法拟合函数Z=7-3x3e在两组不同节点处的曲面和节点的图形及其插值ZI(略).
(3)三角基三次内插法.
输入程序
>> x=rand(50,1);
y=rand(50,1); %生成50个一元均匀分布随机数x和y, x,y .
X=-3+(3-(-3))*x;%利用x生成 上的随机变量.
Y=-2.5+(3.5-(-2.5))*y; %利用y生成 上的随机变量.
Z=7-3* X.^3 .* exp(-X.^2 - Y.^2); %在每个随机点(X,Y)处计算Z的值.
X1=-3:0.2:3;
Y1=-2.5:0.2:3.5;
[XI,YI] = meshgrid(X1,Y1); %将坐标(XI,YI)网格化.
ZI=griddata(X,Y,Z,XI,YI, 'cubic') %计算在每个插值点(XI,YI)处的插值ZI.
mesh(XI,YI, ZI) %作二元拟合图形.
xlabel('x'), ylabel('y'), zlabel('z'),
title('用三角基三次内插法拟合函数z =7-3 x^3 exp(-x^2 - y^2) 的曲面和节点的图形')
%legend('拟合曲面','节点(xi,yi,zi)')
hold on %在当前图形上添加新图形.
plot3(X,Y,Z, 'bo') %用兰色小圆圈画出每个节点(X,Y,Z). hold of %结束在当前图形上添加新图形.
运行后屏幕显示用三角基三次内插法拟合函数Z=7-3x3e在两组不同节点处的曲面和节点的图形及其插值ZI(略).
(4)MATLAB 4网格化坐标方法.
输入程序
>> x=rand(50,1);
y=rand(50,1); %生成50个一元均匀分布随机数x和y, x,y .
X=-3+(3-(-3))*x;%利用x生成 上的随机变量.
Y=-2.5+(3.5-(-2.5))*y; %利用y生成 上的随机变量.
Z=7-3* X.^3 .* exp(-X.^2 - Y.^2); %在每个随机点(X,Y)处计算Z的值.
X1=-3:0.2:3; Y1=-2.5:0.2:3.5;
[XI,YI] = meshgrid(X1,Y1); %将坐标(XI,YI)网格化.
ZI=griddata(X,Y,Z,XI,YI, 'v4') %计算在每个插值点(XI,YI)处的插值ZI.
mesh(XI,YI, ZI) %作二元拟合图形.
xlabel('x'), ylabel('y'), zlabel('z'),
title('用MATLAB 4网格化坐标方法拟合函数z =7-3 x^3 exp(-x^2 - y^2) 的曲面和节点的图形')
%legend('拟合曲面','节点(xi,yi,zi)')
-x2 -y2-x2 -y2
函数逼近与曲线(面)拟合的MATLAB程序
hold on %在当前图形上添加新图形.
plot3(X,Y,Z, 'bo') %用兰色小圆圈画出每个节点(X,Y,Z). hold of %结束在当前图形上添加新图形.
运行后屏幕显示用MATLAB 4网格化坐标方法拟合函数Z=7-3x3e-x
的曲面和节点的图形及其插值ZI(略).
3222 -y2在两组不同节点处(5)作被拟合曲面Z=7-3xe-x -y和节点的图形.
输入程序
>> x=rand(50,1);
y=rand(50,1); %生成50个一元均匀分布随机数x和y, x,y .
X=-3+(3-(-3))*x;%利用x生成随机变量.
Y=-2.5+(3.5-(-2.5))*y; %利用y生成随机变量.
Z=7-3* X.^3 .* exp(-X.^2 - Y.^2); %在每个随机点(X,Y)处计算Z的值.
X1=-3.:0.1:3.;
Y1=-2.5:0.1:3.5;
[XI,YI] = meshgrid(X1,Y1); %将坐标(XI,YI)网格化.
ZI=7-3* XI.^3 .* exp(-XI.^2 - YI.^2);
mesh(XI,YI, ZI) %作二元拟合图形.
xlabel('x'), ylabel('y'), zlabel('z'),
title('被拟合函数z =7-3 x^3 exp(-x^2 - y^2) 的曲面和节点的图形')
%legend('被拟合函数曲面','节点(xi,yi,zi)')
hold on %在当前图形上添加新图形.
plot3(X,Y,Z, 'bo') %用兰色小圆圈画出每个节点(X,Y,Z). hold of %结束在当前图形上添加新图形.
运行后屏幕显示被拟合函数Z=7-3x3e-x2 -y2
7.9 随机数据点上的n元拟合及其MATLAB程序
的曲面和节点的图形及其函数值ZI(略).
例7.9.1 首先利用MATLAB函数rand产生随机数据X1,Y1,Z1,然后用线性变换u at b (其中a 5,b 5)将随机数据X1,Y1 ,Z1 变换为节点坐标(X,Y,Z),再用函数
生成数据W, 用三元最近邻内插法方法计算函数w在插值点w 7 3xy(z 1)e
xi 3:0.5:10, yi 2:0.5:13,zi=yi 处拟合数据的值,并作其图形.
解 输入程序
>> X1=-5+5*rand(10,1);
Y1=-5+5*rand(10,1);
Z1=Y1;
[X,Y,Z] = meshgrid(X1,Y1,Z1);
W=7-3* X.^3 .* Y.*(Z+1).* exp(-X.^2 - Y.^2- Z.^2);
xi=-3:0.5:10;
yi=-2:0.5:13;
zi=yi;
[XI,YI,ZI] = meshgrid(xi,yi,zi);
W1=griddata3(X, Y, Z, W, XI, YI, ZI, 'nearest');
slice(XI,YI,ZI,W1,[-2 4 9.5],9,[-2 2 9]),
%shading flat
%lighting flat
xlabel('x'), ylabel('y'), zlabel('z'),
title('被拟合函数W=7-3X^3Y(Z+1)exp(-X^2 - Y^2- Z^2) '); hold on
colorbar('horiz')
view([-30 45]) 3 x2 y2 z2
函数逼近与曲线(面)拟合的MATLAB程序
运行后屏幕显示三元线性拟合值及其图形(略).
例7.9.2 设节点(X,Y,Z,W)中的X,Y和Z分别是在区间[ 3,3]和[ 2.5,3.5],Y=Z上的15个随机数,W是函数w 2 xe在(X,Y,Z)的值,拟合点(xi,yi,zi)中的xi=-3:0.2:3, yi=-2.5:0.2:3.5,zi=yi, 用'linear'方法计算拟合数据的值,并作 x2 y2 z2其图形.
解 输入程序
>> x=rand(15,1); y=rand(15,1);
X1=-3+(3-(-3))*x;
Y1=-2.5+(3.5-(-2.5))*y;Z1=Y1;
[X,Y,Z] = meshgrid(X1,Y1,Z1);
W=2+X.* exp(-X.^2 - Y.^2- Z.^2);
xi=-3:0.2:3; yi=-2.5:0.2:3.5; zi=yi;
[X2,Y2,Z2]=meshgrid(xi,yi,zi);
W1=griddata3(X, Y, Z, W, X2,Y2,Z2,'linear');
slice(X2,Y2,Z2,W1,[-1 0 1.5],2,[-2 3]),
shading flat,lighting flat,
xlabel('x'), ylabel('y'), zlabel('z'),
title('被拟合函数W=2+X exp(-X^2 - Y^2- Z^2)');
hold on,colorbar('horiz'), view([-3 5])
运行后屏幕显示三元线性拟合值及其图形(略).
正在阅读:
XXX堤防加固工程监理规划12-15
消毒供应室专业人员的基础培训05-29
贫困县名单10-03
企业经营战略历年整理的试卷03-09
《电工基础》理论试卷104-22
2018最新数学高考二轮复习专题能力训练18统计与统计案例11-03
西南大学《教育案例研究》复习思考题及答案10-23
人教版小学六年级数学上册第四单元知识点复习及测试题05-01
2018年山西省太原市中考数学二模试卷11-14
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 拟合
- 逼近
- 函数
- 曲线
- 程序
- MATLAB
- 福康医院启动诚信工程——为党的生日献礼
- BUDESONIDE布地奈德福莫特罗粉吸入剂台湾 ,用药 ,说明
- 东元伺服JSDE中文说明书5
- 中国移动集团客户营销体系对中国电信的启示
- 20182019食品安全管理方案员培训考试试卷试题与包括答案.docx
- 高三语文作文专题训练_3
- Ubuntu12.10-编译服务器安装
- 施工现场安全防护搭设方案
- 述职述廉述作风三述工作总结
- 经营型物业管理模式创新研究
- 第41章 氨基糖苷类抗生素
- 最新版2013年下半年大学英语四级新题听力模拟题
- 中国人民银行分支机构2011年人员录用招考简章
- 082 宝洁公司的广告测试方法
- 粮食安全问题一直以来都是一个热点问题
- 学生营养餐工作实名制管理岗位责任制
- 铸牢中华民族共同体意识为实现中华民族伟大复兴的中国梦而
- 你家的马桶真的节水吗?
- 现代生物科技专题复习-基因工程-单克隆抗体-03
- 高层建筑钢筋混凝土柱的置换加固措施与方案探讨