版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Matlab数据处理》幻灯片本课件PPT仅供大家学习使用学习完请自行删除,谢谢!本课件PPT仅供大家学习使用学习完请自行删除,谢谢!《Matlab数据处理》幻灯片本课件PPT仅供大家学1声明和致谢课件取自网络电子课件?中科院MATLAB课件?,只进展了很少的编辑和加工,对不知名的网络电子课件作者表示感谢!声明和致谢课件取自网络电子课件?中科院MATL2主要内容微积分问题的解析解函数的级数展开与级数求和问题求解概率分布与伪随机数生成数据插值数据拟合主要内容微积分问题的解析解34.1微积分问题的解析解单变量函数的极限格式1:L=limit(fun,x,x0)格式2:L=limit(fun,x,x0,‘left’或‘right’)4.1微积分问题的解析解单变量函数的极限4例:试求解极限问题>>symsxab;>>f=x*(1+a/x)^x*sin(b/x);>>L=limit(f,x,inf)L=exp(a)*b例:求解单边极限问题>>symsx;>>limit((exp(x^3)-1)/(1-cos(sqrt(x-sin(x)))),x,0,'right')ans=12例:试求解极限问题5在(-0.1,0.1)区间绘制出函数曲线:>>x=-0.1:0.001:0.1;>>y=(exp(x.^3)-1)./(1-cos(sqrt(x-sin(x))));Warning:Dividebyzero.(Type"warningoffMATLAB:divideByZero"tosuppressthiswarning.)>>plot(x,y,'-',[0],[12],'o')在(-0.1,0.1)区间绘制出函数曲线:6函数的导数和高阶导数格式:y=diff(fun,x)%求导数(默认为1阶)
y=diff(fun,x,n)%求n阶导数例:一阶导数:>>symsx;f=sin(x)/(x^2+4*x+3);>>f1=diff(f);pretty(f1)函数的导数和高阶导数7cos(x)sin(x)(2x+4)-----------------------------------222x+4x+3(x+4x+3)原函数及一阶导数图:>>x1=0:.01:5;>>y=subs(f,x,x1);>>y1=subs(f1,x,x1);>>plot(x1,y,x1,y1,‘:’)更高阶导数:>>tic,diff(f,x,100);tocelapsed_time=4.6860cos(x)sin(x)8原函数4阶导数>>f4=diff(f,x,4);pretty(f4)2sin(x)cos(x)(2x+4)sin(x)(2x+4)------------+4--------------------12-----------------22223x+4x+3(x+4x+3)(x+4x+3)3sin(x)cos(x)(2x+4)cos(x)(2x+4)+12----------------24-----------------+48----------------222423(x+4x+3)(x+4x+3)(x+4x+3)42sin(x)(2x+4)sin(x)(2x+4)sin(x)+24------------------72-----------------+24---------------252423(x+4x+3)(x+4x+3)(x+4x+3)原函数4阶导数9多元函数的偏导:格式:f=diff(diff(f,x,m),y,n)或f=diff(diff(f,y,n),x,m)例:求其偏导数并用图表示。>>symsxyz=(x^2-2*x)*exp(-x^2-y^2-x*y);>>zx=simple(diff(z,x))zx=-exp(-x^2-y^2-x*y)*(-2*x+2+2*x^3+x^2*y-4*x^2-2*x*y)多元函数的偏导:10>>zy=diff(z,y)zy=(x^2-2*x)*(-2*y-x)*exp(-x^2-y^2-x*y)直接绘制三维曲面>>[x,y]=meshgrid(-3:.2:3,-2:.2:2);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>surf(x,y,z),axis([-33-22-0.71.5])《Matlab数据处理》教学课件11>>contour(x,y,z,30),holdon%绘制等值线>>zx=-exp(-x.^2-y.^2-x.*y).*(-2*x+2+2*x.^3+x.^2.*y-4*x.^2-2*x.*y);>>zy=-x.*(x-2).*(2*y+x).*exp(-x.^2-y.^2-x.*y);%偏导的数值解>>quiver(x,y,zx,zy)%绘制引力线>>contour(x,y,z,30),holdon12例>>symsxyz;f=sin(x^2*y)*exp(-x^2*y-z^2);>>df=diff(diff(diff(f,x,2),y),z);df=simple(df);>>pretty(df)
22222-4zexp(-xy-z)(cos(xy)-10cos(xy)yx+42422422sin(xy)xy+4cos(xy)xy-sin(xy))例13不定积分的推导:格式:F=int(fun,x)例:用diff()函数求其一阶导数,再积分,检验是否可以得出一致的结果。>>symsx;y=sin(x)/(x^2+4*x+3);y1=diff(y);>>y0=int(y1);pretty(y0)%对导数积分sin(x)sin(x)-1/2------+1/2------x+3x+1不定积分的推导:14对原函数求4阶导数,再对结果进展4次积分>>y4=diff(y,4);>>y0=int(int(int(int(y4))));>>pretty(simple(y0))sin(x)------------2x+4x+3对原函数求4阶导数,再对结果进展4次积分15例:证明>>symsax;f=simple(int(x^3*cos(a*x)^2,x))f=1/16*(4*a^3*x^3*sin(2*a*x)+2*a^4*x^4+6*a^2*x^2*cos(2*a*x)-6*a*x*sin(2*a*x)-3*cos(2*a*x)-3)/a^4>>f1=x^4/8+(x^3/(4*a)-3*x/(8*a^3))*sin(2*a*x)+...(3*x^2/(8*a^2)-3/(16*a^4))*cos(2*a*x);>>simple(f-f1)%求两个结果的差ans=-3/16/a^4例:证明16定积分与无穷积分计算:格式:I=int(f,x,a,b)格式:I=int(f,x,a,inf)定积分与无穷积分计算:17例:>>symsx;I1=int(exp(-x^2/2),x,0,1.5)%无解I1=1/2*erf(3/4*2^(1/2))*2^(1/2)*pi^(1/2)>>vpa(I1,70)ans=>>I2=int(exp(-x^2/2),x,0,inf)I2=1/2*2^(1/2)*pi^(1/2)
例:18多重积分问题的MATLAB求解例:>>symsxyz;f0=-4*z*exp(-x^2*y-z^2)*(cos(x^2*y)-10*cos(x^2*y)*y*x^2+...4*sin(x^2*y)*x^4*y^2+4*cos(x^2*y)*x^4*y^2-sin(x^2*y));>>f1=int(f0,z);f1=int(f1,y);f1=int(f1,x);>>f1=simple(int(f1,x))f1=exp(-x^2*y-z^2)*sin(x^2*y)多重积分问题的MATLAB求解19>>f2=int(f0,z);f2=int(f2,x);f2=int(f2,x);>>f2=simple(int(f2,y))f2=2*exp(-x^2*y-z^2)*tan(1/2*x^2*y)/(1+tan(1/2*x^2*y)^2)>>simple(f1-f2)ans=0顺序的改变使化简结果不同于原函数,但其误差为0,说明二者实际完全一致。这是由于积分顺序不同,得不出实际的最简形式。《Matlab数据处理》教学课件20例:>>symsxyz>>int(int(int(4*x*z*exp(-x^2*y-z^2),x,0,1),y,0,pi),z,0,pi)ans=(Ei(1,4*pi)+log(pi)+eulergamma+2*log(2))*pi^2*hypergeom([1],[2],-pi^2)Ei(n,z)为指数积分,无解析解,但可求其数值解:>>vpa(ans,60)ans=例:21主要内容微积分问题的解析解函数的级数展开与级数求和问题求解概率分布与伪随机数生成数据插值数据拟合主要内容微积分问题的解析解224.2函数的级数展开与
级数求和问题求解4.2函数的级数展开与
级数求和问题求解23《Matlab数据处理》教学课件24《Matlab数据处理》教学课件25例:>>symsx;f=sin(x)/(x^2+4*x+3);>>y1=taylor(f,x,9);pretty(y1)
2233344408753067651527373864598
1/3x-4/9x+--x-----x+------x-------x+----------x----------x5481972072901224720918540例:26>>taylor(f,x,9,2)ans=
>>symsa;taylor(f,x,5,a)%结果较冗长,显示从略ans=sin(a)/(a^2+3+4*a)+(cos(a)-sin(a)/(a^2+3+4*a)*(4+2*a))/(a^2+3+4*a)*(x-a)+(-sin(a)/(a^2+3+4*a)-1/2*sin(a)-(cos(a)*a^2+3*cos(a)+4*cos(a)*a-4*sin(a)-2*sin(a)*a)/(a^2+3+4*a)^2*(4+2*a))/(a^2+3+4*a)*(x-a)^2+…>>taylor(f,x,9,2)27例:对y=sinx进展Taylor幂级数展开,并观察不同阶次的近似效果。>>x0=-2*pi:0.01:2*pi;y0=sin(x0);symsx;y=sin(x);>>plot(x0,y0,'r-.'),axis([-2*pi,2*pi,-1.5,1.5]);holdon>>forn=[8:2:16]p=taylor(y,x,n),y1=subs(p,x,x0);line(x0,y1);endp=x-1/6*x^3+1/120*x^5-1/5040*x^7p=x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^9p=x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^9-1/39916800*x^11p=x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^9-1/39916800*x^11+1/6227020800*x^13例:对y=sinx进展Taylor幂级数展开,并观察不同阶次28p=p=29是在符号工具箱中提供的是在符号工具箱中提供的30例:计算>>formatlong;sum(2.^[0:63])%数值计算ans=1.844674407370955e+019>>sum(sym(2).^[0:200])%或symsk;symsum(2^k,0,200)%把2定义为符号量可使计算更准确ans=>>symsk;symsum(2^k,0,200)ans=例:计算31例:试求解无穷级数的和>>symsn;s=symsum(1/((3*n-2)*(3*n+1)),n,1,inf)%采用符号运算工具箱s=1/3>>m=1:10000000;s1=sum(1./((3*m-2).*(3*m+1)));%数值计算方法,双精度有效位16,“大数吃小数〞,无法准确>>formatlong;s1%以长型方式显示得出的结果s1=0.33333332222165例:试求解无穷级数的和32例:求解>>symsnx>>s1=symsum(2/((2*n+1)*(2*x+1)^(2*n+1)),n,0,inf);>>simple(s1)%对结果进展化简,MATLAB6.5及以前版本因本身bug化简很麻烦ans=log((((2*x+1)^2)^(1/2)+1)/(((2*x+1)^2)^(1/2)-1))%实际应为log((x+1)/x)例:求解33例:求>>symsmn;limit(symsum(1/m,m,1,n)-log(n),n,inf)ans=eulergamma
>>vpa(ans,70)%显示70位有效数字ans=
例:求34格式:假设z矩阵是建立在等间距的形式生成的网格根底上,那么实际梯度为《Matlab数据处理》教学课件35例:计算梯度,绘制引力线图:>>[x,y]=meshgrid(-3:.2:3,-2:.2:2);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>[fx,fy]=gradient(z);>>fx=fx/0.2;fy=fy/0.2;>>contour(x,y,z,50);>>holdon;>>quiver(x,y,fx,fy)%绘制等高线与引力线图例:36绘制误差曲面:>>zx=-exp(-x.^2-y.^2-x.*y).*(-2*x+2+2*x.^3+x.^2.*y-4*x.^2-2*x.*y);>>zy=-x.*(x-2).*(2*y+x).*exp(-x.^2-y.^2-x.*y);>>surf(x,y,abs(fx-zx));axis([-33-220,0.08])>>figure;surf(x,y,abs(fy-zy));axis([-33-220,0.11])%建立一个新图形窗口绘制误差曲面:37为减少误差,对网格加密一倍:>>[x,y]=meshgrid(-3:.1:3,-2:.1:2);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>[fx,fy]=gradient(z);fx=fx/0.1;fy=fy/0.1;>>zx=-exp(-x.^2-y.^2-x.*y).*(-2*x+2+2*x.^3+x.^2.*y-4*x.^2-2*x.*y);>>zy=-x.*(x-2).*(2*y+x).*exp(-x.^2-y.^2-x.*y);>>surf(x,y,abs(fx-zx));axis([-33-220,0.02])>>figure;surf(x,y,abs(fy-zy));axis([-33-220,0.06])为减少误差,对网格加密一倍:38主要内容微积分问题的解析解函数的级数展开与级数求和问题求解概率分布与伪随机数生成数据插值数据拟合主要内容微积分问题的解析解394.3概率分布与伪随机数生成
4.3概率分布与伪随机数生成
40通用函数计算概率密度函数值
函数pdf格式
P=pdf(‘name’,K,A)P=pdf(‘name’,K,A,B)P=pdf(‘name’,K,A,B,C)说明返回在X=K处、参数为A、B、C的概率密度值,对于不同的分布,参数个数是不同;name为分布函数名。例如二项分布:设一次试验,事件Y发生的概率为p,那么,在n次独立重复试验中,事件Y恰好发生K次的概率P_K为:P_K=P{X=K}=pdf('bino',K,n,p)通用函数计算概率密度函数值函数pdf41例:计算正态分布N〔0,1〕的随机变量X在点0.6578的密度函数值。解:>>pdf('norm',0.6578,0,1)ans=0.3213例:自由度为8的卡方分布,在点2.18处的密度函数值。解:>>pdf('chi2',2.18,8)ans=0.0363例:计算正态分布N〔0,1〕的随机变量X在点0.6578的42随机变量的累积概率值(分布函数值)
通用函数cdf用来计算随机变量的概率之和〔累积概率值〕函数cdf格式cdf(‘name’,K,A)cdf(‘name’,K,A,B)cdf(‘name’,K,A,B,C)说明返回以name为分布、随机变量X≤K的概率之和的累积概率值,name为分布函数名.随机变量的累积概率值(分布函数值)通用43例:求标准正态分布随机变量X落在区间(-∞,0.4)内的概率。
解:>>cdf('norm',0.4,0,1)ans=0.6554例:求自由度为16的卡方分布随机变量落在[0,6.91]内的概率。解:>>cdf('chi2',6.91,16)ans=0.0250例:求标准正态分布随机变量X落在区间(-∞,0.4)内的44随机变量的逆累积分布函数
MATLAB中的逆累积分布函数是,求x。命令icdf计算逆累积分布函数格式icdf(‘name’,K,A)icdf(‘name’,K,A,B)icdf(‘name’,K,A,B,C)说明返回分布为name,参数为a1,a2,a3,累积概率值为P的临界值,这里name与前面一样。如果F=cdf(‘name’,X,A,B,C),那么X=icdf(‘name’,F,A,B,C)随机变量的逆累积分布函数MATLAB中的逆累积分布函数是,45例:在标准正态分布表中,假设F=0.6554,求X解:>>icdf('norm',0.6554,0,1)ans=0.3999例:公共汽车门的高度是按成年男子与车门顶碰头的时机不超过1%设计的。设男子身高X〔单位:cm〕服从正态分布N〔175,6〕,求车门的最低高度。解:设h为车门高度,X为身高。求满足条件F{X>h}<=0.99,即F{X<h}>=0.01故>>h=icdf('norm',0.99,175,6)h=188.9581例:在标准正态分布表中,假设F=0.6554,求X46其要求x是正整数。其要求x是正整数。47其中:x为选定的一组横坐标向量,y为x各点处的概率密度函数值。其中:x为选定的一组横坐标向量,48例:绘制l=1,2,5,10时Poisson分布的概率密度函数与概率分布函数曲线。>>x=[0:15]';y1=[];y2=[];lam1=[1,2,5,10];>>fori=1:length(lam1)y1=[y1,poisspdf(x,lam1(i))];y2=[y2,poisscdf(x,lam1(i))];end>>plot(x,y1),figure;plot(x,y2)例:绘制l=1,2,5,10时Poisson分布的49正态分布的概率密度函数为:正态分布的概率密度函数为:50例:>>x=[-5:.02:5]';y1=[];y2=[];>>mu1=[-1,0,0,0,1];sig1=[1,0.1,1,10,1];sig1=sqrt(sig1);>>fori=1:length(mu1)y1=[y1,normpdf(x,mu1(i),sig1(i))];y2=[y2,normcdf(x,mu1(i),sig1(i))];end>>plot(x,y1),figure;plot(x,y2)例:51《Matlab数据处理》教学课件52例:>>x=[-0.5:.02:5]‘;%x=[-eps:-0.02:-0.5,0:0.02:5];x=sort(x’);替代>>y1=[];y2=[];a1=[1,1,2,1,3];lam1=[1,0.5,1,2,1];>>fori=1:length(a1)y1=[y1,gampdf(x,a1(i),lam1(i))];y2=[y2,gamcdf(x,a1(i),lam1(i))];end>>plot(x,y1),figure;plot(x,y2)例:53〔卡方分布〕其为一特殊的分布,a=k/2,l=1/2。〔卡方分布〕其为一特殊的分布,a=k/2,l54例:>>x=[-eps:-0.02:-0.5,0:0.02:2];x=sort(x');>>k1=[1,2,3,4,5];y1=[];y2=[];>>fori=1:length(k1)y1=[y1,chi2pdf(x,k1(i))];y2=[y2,chi2cdf(x,k1(i))];end>>plot(x,y1),figure;plot(x,y2)例:55
分布概率密度函数为:其为参数k的函数,且k为正整数。分布概率密度函数为:其为参数k的函数,且k为正整数。56例:>>x=[-5:0.02:5]';k1=[1,2,5,10];y1=[];y2=[];>>fori=1:length(k1)y1=[y1,tpdf(x,k1(i))];y2=[y2,tcdf(x,k1(i))];end>>plot(x,y1),figure;plot(x,y2)例:57《Matlab数据处理》教学课件58例:>>x=[-eps:-0.02:-0.5,0:0.02:5];x=sort(x');>>b1=[.5,1,3,5];y1=[];y2=[];>>fori=1:length(b1)y1=[y1,raylpdf(x,b1(i))];y2=[y2,raylcdf(x,b1(i))];end>>plot(x,y1),figure;plot(x,y2)例:59F分布其为参数p,q的函数,且p,q均为正整数。F分布其为参数p,q的函数,且p,q均为正整数。60例:分别绘制〔p,q〕为〔1,1),(2,1),(3,1)(3,2),(4,1)时F分布的概率密度函数与分布函数曲线。>>x=[-eps:-0.02:-0.5,0:0.02:1];x=sort(x');>>p1=[12334];q1=[11121];y1=[];y2=[];>>fori=1:length(p1)y1=[y1,fpdf(x,p1(i),q1(i))];y2=[y2,fcdf(x,p1(i),q1(i))];end>>plot(x,y1),figure;plot(x,y2)例:分别绘制〔p,q〕为〔1,1),(2,1),(3,1)(61图4-9图4-962例:>>b=1;p1=raylcdf(0.2,b);p2=raylcdf(2,b);P1=p2-p1P1=0.8449>>p1=raylcdf(1,b);P2=1-p1P2=0.6065例:63例:>>symsxy;f=x^2+x*y/3;>>P=int(int(f,x,0,1/2),y,0,1/2)P=5/192>>symsxy;f=x^2+x*y/3;P=int(int(f,x,0,1),y,0,2)P=1例:64《Matlab数据处理》教学课件65《Matlab数据处理》教学课件66例:>>b=1;p=raylrnd(1,30000,1);>>xx=0:.1:4;yy=hist(p,xx);%hist()找出随机数落入各个子区间的点个数,并由之拟合出生成数据的概率密度。>>yy=yy/(30000*0.1);>>bar(xx,yy),>>y=raylpdf(xx,1);>>line(xx,y)例:67主要内容微积分问题的解析解函数的级数展开与级数求和问题求解概率分布与伪随机数生成数据插值数据拟合主要内容微积分问题的解析解68一个多项式的幂级数形式可表示为:也可表为嵌套形式或因子形式
N阶多项式n个根,其中包含重根和复根。假设多项式所有系数均为实数,那么全部复根都将以共轭对的形式出现4.4数据插值
关于多项式MATLAB命令一个多项式的幂级数形式可表示为:4.4数据插值
关于多项69幂系数:在MATLAB里,多项式用行向量表示,其元素为多项式的系数,并从左至右按降幂排列。
例:
被表示为>>p=[2145]>>poly2sym(p)ans=2*x^3+x^2+4*x+5Roots:多项式的零点可用命令roots求的。
例:>>r=roots(p)得到r=0.2500+1.5612i0.2500-1.5612i-1.0000所有零点由一个列向量给出。幂系数:在MATLAB里,多项式用行向量表示,其元素为多项式70poly:由零点可得原始多项式的各系数,但可能相差一个常数倍。例:>>poly(r)ans=1.00000.50002.00002.5000注意:假设存在重根,这种转换可能会降低精度。例:>>r=roots([1-615-2015-61])r=1.0042+0.0025i1.0042-0.0025i1.0000+0.0049i1.0000-0.0049i0.9958+0.0024i0.9958-0.0024i舍入误差的影响,与计算精度有关。poly:由零点可得原始多项式的各系数,但可能相差一个常71polyval:可用命令polyval计算多项式的值。例:计算y(2.5)
>>c=[3,-7,2,1,1];xi=2.5;yi=polyval(c,xi)yi=23.8125如果xi是含有多个横坐标值的数组,那么yi也为与xi长度一样的向量。>>c=[3,-7,2,1,1];xi=[2.5,3];>>yi=polyval(c,xi)yi=23.812576.0000polyval:可用命令polyval计算多项式的值。72polyfit:给定n+1个点将可以唯一确定一个n阶多项式。利用命令polyfit可容易确定多项式的系数。例:>>x=[1.1,2.3,3.9,5.1];>>y=[3.887,4.276,4.651,2.117];>>a=polyfit(x,y,length(x)-1)a=-0.20211.4385-2.74775.4370>>poly2sym(a)ans=-403/2000*x^3+2877/2000*x^2-27477/10000*x+5437/1000多项式为Polyfit的第三个参数是多项式的阶数。polyfit:给定n+1个点将可以唯一确定一个n阶多项式。73多项式积分:
功能:求多项式积分调用格式:py=poly_itg(p)p:被积多项式的系数py:求积后多项式的系数poly_itg.mfunctionpy=poly_itg(p)n=length(p);py=[p.*[n:-1:1].^(-1),0]不包括最后一项积分常数多项式积分:74多项式微分:Polyder:求多项式一阶导数的系数。调用格式为:b=polyder(c)c为多项式y的系数,b是微分后的系数,其值为:
多项式微分:75两个多项式的和与差:命令poly_add:求两个多项式的和,其调用格式为:c=poly_add(a,b)
多项式a减去b,可表示为:c=poly_add(a,-b)两个多项式的和与差:76功能:两个多项式相加调用格式:b=poly_add(p1,p2)b:求和后的系数数组poly_add.mfunctionp3=poly_add(p1,p2)n1=length(p1);n2=length(p2);ifn1==n2p3=p1+p2;endifn1>n2p3=p1+[zeros(1,n1-n2),p2];endifn1<n2p3=[zeros(1,n2-n1),p1]+p2;end功能:两个多项式相加77m阶多项式与n阶多项式的乘积是d=m+n阶的多项式:计算系数的MATLAB命令是:c=conv(a,b)多项式除多项式的除法满足:其中是商,是除法的余数。多项式和可由命令deconv算出。例:[q,r]=deconv(a,b)m阶多项式与n阶多项式的乘积是d=m+n阶的多项式:78例>>a=[2,-5,6,-1,9];b=[3,-90,-18];>>c=conv(a,b)c=6-195432-4539-792-162>>[q,r]=deconv(c,b)q=2-56-19r=0000000>>poly2sym(c)ans=6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162
例794.4数据插值
方法介绍对给定的n个插值点及对应的函数值,利用构造的n-1次Lagrange插值多项式,那么对插值区间内任意x的函数值y可通过下式求的:MATLAB实现4.4数据插值
方法介绍80functiony=lagrange(x0,y0,x)ii=1:length(x0);y=zeros(size(x));fori=iiij=find(ii~=i);y1=1;forj=1:length(ij),y1=y1.*(x-x0(ij(j)));endy=y+y1*y0(i)/prod(x0(i)-x0(ij));end算例:给出f(x)=ln(x)的数值表,用Lagrange计算ln(0.54)的近似值。>>x=[0.4:0.1:0.8];>>y=[-0.916291,-0.693147,-0.510826,-0.356675,-0.223144];>>lagrange(x,y,[0.54,0.55,0.78])ans=-0.6161-0.5978-0.2484〔准确解-0.616143)functiony=lagrange(x0,y0,x)81方法介绍不少实际问题不但要求在节点上函数值相等,而且要求导数值也相等,甚至要求高阶导数值也相等,满足这一要求的插值多项式就是Hermite插值多项式。下面只讨论函数值与一阶导数值个数相等且的情况。n个插值点及对应的函数值和一阶导数值。那么对插值区间内任意x的函数值y的Hermite插值公式:方法介绍82MATLAB实现%hermite.mfunctiony=hermite(x0,y0,y1,x)n=length(x0);m=length(x);fork=1:myy=0.0;fori=1:nh=1.0;a=0.0;forj=1:nifj~=ih=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;a=1/(x0(i)-x0(j))+a;endendyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));endy(k)=yy;endMATLAB实现83算例:对给定数据,试构造Hermite多项式求出sin0.34的近似值。>>x0=[0.3,0.32,0.35];>>y0=[0.29552,0.31457,0.34290];>>y1=[0.95534,0.94924,0.93937];>>y=hermite(x0,y0,y1,0.34)y=0.3335>>sin(0.34)%与准确值比较ans=0.3335算例:对给定数据,试构造Hermite多项式求出sin0.384>>x=[0.3:0.005:0.35];y=hermite(x0,y0,y1,x);
>>plot(x,y)
>>y2=sin(x);holdon
>>plot(x,y2,'--r')>>x=[0.3:0.005:0.35];y=hermit85问题的提出:根据区间[a,b]上给出的节点做插值多项式p(x)的近似值,一般总认为p(x)的次数越高那么逼近f(x)的精度就越好,但事实并非如此。反例:在区间[-5,5]上的各阶导数存在,但在此区间上取n个节点所构成的Lagrange插值多项式在全区间内并非都收敛。取n=10,用Lagrange插值法进展插值计算。问题的提出:根据区间[a,b]上给出的节点做插值多项式p(x86>>x=[-5:1:5];y=1./(1+x.^2);x0=[-5:0.1:5];>>y0=lagrange(x,y,x0);>>y1=1./(1+x0.^2);%绘制图形>>plot(x0,y0,'--r')%插值曲线>>holdon>>plot(x0,y1,‘-b')%原曲线为解决Rung问题,引入分段插值。>>x=[-5:1:5];y=1./(1+x.^2);87算法分析:所谓分段插值就是通过插值点用折线或低次曲线连接起来逼近原曲线。MATLAB实现可调用内部函数。命令1interp1功能:一维数据插值〔表格查找〕。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。格式1yi=interp1(x,Y,xi)%返回插值向量yi,每一元素对应于参量xi,同时由向量x与Y的内插值决定。参量x指定数据Y的点。假设Y为一矩阵,那么按Y的每列计算。算例对于t,beta、alpha分别有两组数据与之对应,用分段线性插值法计算当t=321,440,571时beta、alpha的值。算法分析:所谓分段插值就是通过插值点用折线或低次曲线连接起来88>>temp=[300,400,500,600]';>>beta=1000*[3.33,2.50,2.00,1.67]';>>alpha=10000*[0.2128,0.3605,0.5324,0.7190]';>>ti=[321,400,571]';>>propty=interp1(temp,[beta,alpha],ti);%propty=interp1(temp,[beta,alpha],ti,’linear’);>>[ti,propty]ans=1.0e+003*0.32103.15572.43820.40002.50003.60500.57101.76576.6489>>temp=[300,400,500,600]';89格式2yi=interp1(Y,xi)%假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。格式3yi=interp1(x,Y,xi,method)%用指定的算法计算插值:’nearest’:最近邻点插值,直接完成计算;’linear’:线性插值〔缺省方式〕,直接完成计算;’spline’:三次样条函数插值。’cubic’:分段三次Hermite插值。其它,如’v5cubic’。对于超出x范围的xi的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1将对超出的分量执行外插值算法。yi=interp1(x,Y,xi,method,'extrap')yi=interp1(x,Y,xi,method,extrapval)%确定超出x范围的xi中的分量的外插值extrapval,其值通常取NaN或0。格式2yi=interp1(Y,xi)90算例>>year=1900:10:2021;>>product=[75.995,91.972,105.711,123.203,131.669,...150.697,179.323,203.212,226.505,249.633,256.344,267.893];>>p1995=interp1(year,product,1995)p1995=252.9885>>x=1900:1:2021;>>y=interp1(year,…product,x,'cubic');>>plot(year,…product,'o',x,y)算例91例:的数据点来自函数
根据生成的数据进展插值处理,得出较平滑的曲线
直接生成数据。>>x=0:.12:1;>>y=(x.^2-3*x…+5).*exp(-5*x…).*sin(x);>>plot(x,y,x,y,'o')例:的数据点来自函数
根据生成的数据进展插值处理,得出较92调用interp1()函数:>>x1=0:.02:1;y0=(x1.^2-3*x1+5).*exp(-5*x1).*sin(x1);>>y1=interp1(x,y,x1);y2=interp1(x,y,x1,'cubic');>>y3=interp1(x,y,x1,'spline');y4=interp1(x,y,x1,'nearest');>>plot(x1,[y1',y2',y3',y4'],':',x,y,'o',x1,y0)误差分析>>[max(abs(y0(1:49)…-y2(1:49))),max(abs(y0-y3)),max(abs(y0-y4))]ans=0.01770.00860.1598调用interp1()函数:93>>x0=-1+2*[0:10]/10;>>y0=1./(1+25*x0.^2);>>x=-1:.01:1;>>y=lagrange(x0,y0,x);%Lagrange插值>>ya=1./(1+25*x.^2);>>plot(x,ya,x,y,':')例例94>>y1=interp1(x0,y0,x,'cubic');y2=interp1(x0,y0,x,'spline');>>plot(x,ya,x,y1,':',x,y2,'--')>>y1=interp1(x0,y0,x,'cubic')95命令2interp2功能二维数据内插值〔表格查找〕格式1ZI=interp2(X,Y,Z,XI,YI)%返回矩阵ZI,其元素包含对应于参量XI与YI〔可以是向量、或同型矩阵〕的元素。参量X与Y必须是单调的,且一样的划分格式,就像由命令meshgrid生成的一样。假设Xi与Yi中有在X与Y范围之外的点,那么相应地返回NaN。格式2ZI=interp2(Z,XI,YI)%缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进展计算。格式3ZI=interp2(X,Y,Z,XI,YI,method)%用指定的算法method计算二维插值:’linear’:双线性插值算法〔缺省算法〕;’nearest’:最临近插值;’spline’:三次样条插值;’cubic’:双三次插值。命令2interp296算例:>>years=1950:10:1990;>>service=10:10:30;>>wage=[150.697199.592187.625179.323195.072250.287203.212179.092322.767226.505153.706426.730249.633120.281598.243];>>w=interp2(service,years,wage,15,1975)w=190.6288算例:97例>>[x,y]=meshgrid(-3:.6:3,-2:.4:2);>>z=(x.^2-2*x).*exp…(-x.^2-y.^2-x.*y);>>surf(x,y,z),axis([-3,3,-2,2,-0.7,1.5])例98选较密的插值点,用默认的线性插值算法进展插值>>[x1,y1]=meshgrid(-3:.2:3,-2:.2:2);>>z1=interp2(x,y,z,x1,y1);>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])选较密的插值点,用默认的线性插值算法进展插值99立方和样条插值:>>z1=interp2(x,y,z,x1,y1,'cubic');>>z2=interp2(x,y,z,x1,y1,'spline');>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])>>figure;surf(x1,y1,z2),axis([-3,3,-2,2,-0.7,1.5])立方和样条插值:100算法误差的比较>z=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z-z1)),axis([-3,3,-2,2,0,0.08])>>figure;surf(x1,y1,abs(z-z2)),axis([-3,3,-2,2,0,0.025])算法误差的比较101二维一般分布数据的插值功能:可对非网格数据进展插值格式:z=griddata(x0,y0,z0,x,y,’method’)’v4’:MATLAB4.0提供的插值算法,公认效果较好;’linear’:双线性插值算法〔缺省算法〕;’nearest’:最临近插值;’spline’:三次样条插值;’cubic’:双三次插值。例:在x为[-3,3],y为[-2,2]矩形区域随机选择一组坐标,用’v4’与’cubic’插值法进展处理,并对误差进展比较。二维一般分布数据的插值功能:可对非网格数据进展插值102>>x=-3+6*rand(200,1);y=-2+4*rand(200,1);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>[x1,y1]=meshgrid(-3:.2:3,-2:.2:2);>>z1=griddata(x,y,z,x1,y1,'cubic');>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])>>z2=griddata(x,y,z,x1,y1,'v4');>>figure;surf(x1,y1,z2),axis([-3,3,-2,2,-0.7,1.5])>>x=-3+6*rand(200,1);y=-2+4*r103误差分析>>z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z0-z1)),axis([-3,3,-2,2,0,0.15])>>figure;surf(x1,y1,abs(z0-z2)),axis([-3,3,-2,2,0,0.15])误差分析104例:在x为[-3,3],y为[-2,2]矩形区域随机选择一组坐标中,对分布不均匀数据,进展插值分析。>>x=-3+6*rand(200,1);y=-2+4*rand(200,1);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);%生成数据>>plot(x,y,'x')%样本点的二维分布>>figure,plot3(x,y,z,'x'),axis([-3,3,-2,2,-0.7,1.5]),grid例:105去除在(-1,-1/2)点为圆心,以0.5为半径的圆内的点。>>x=-3+6*rand(200,1);y=-2+4*rand(200,1);%重新生成样本点>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>ii=find((x+1).^2+(y+0.5).^2>0.5^2);%找出满足条件的点坐标>>x=x(ii);y=y(ii);z=z(ii);plot(x,y,'x')>>t=[0:.1:2*pi,2*pi];x0=-1+0.5*cos(t);y0=-0.5+0.5*sin(t);>>line(x0,y0)%在图形上叠印该圆,可见,圆内样本点均已剔除去除在(-1,-1/2)点为圆心,以0.5为半径的圆内的点。106用新样本点拟合出曲面>>[x1,y1]=meshgrid(-3:.2:3,-2:.2:2);>>z1=griddata(x,y,z,x1,y1,'v4');>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])用新样本点拟合出曲面107误差分析>>z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z0-z1)),axis([-3,3,-2,2,0,0.1])>>contour(x1,y1,abs(z0-z1),30);holdon,plot(x,y,‘x’);line(x0,y0)%误差的二维等高线图误差分析108命令3interp3
三维网格生成用meshgrid()函数,调用格式:[x,y,z]=meshgrid(x1,y1,z1)
其中x1,y1,z1为这三维所需要的分割形式,应以向量形式给出,返回x,y,z为网格的数据生成,均为三维数组。
griddata3()三维非网格形式的插值拟合命令4interpnn维网格生成用ndgrid()函数,调用格式:
[x1,x2,…,xn]=ndgrid[v1,v2,…,vn]griddatan()n维非网格形式的插值拟合interp3()、interpn()调用格式同interp2()函数一致;griddata3()、griddatan()调用格式同griddata()函数一致。命令3interp3109例:通过函数生成一些网格型样本点,试根据样本点进展拟合,并给出拟合误差。>>[x,y,z]=meshgrid(-1:0.2:1);[x0,y0,z0]=meshgrid(-1:0.05:1);>>V=exp(x.^2.*z+y.^2.*x+z.^2.*y…>>V0=exp(x0.^2.*z0+y0.^2.*x0…>>V1=interp3(x,y,z,V,x0,y0,z0,'spline');err=V1-V0;max(err(:))ans=0.0419例:110《Matlab数据处理》教学课件111定义一个三次样条函数类:
S=csapi(x,y)
其中x=[x1,x2,….,xn],y=[y1,y2,…,yn]为样本点。S返回样条函数对象的插值结果,包括子区间点、各区间点三次多项式系数等。可用fnplt()绘制出插值结果,其调用格式:fnplt(S)对给定的向量xp,可用fnval()函数计算,其调用格式:
yp=fnval(S,xp)其中得出的yp是xp上各点的插值结果。定义一个三次样条函数类:112例:>>x0=[0,0.4,1,2,pi];y0=sin(x0);>>sp=csapi(x0,y0),fnplt(sp,':');holdon,sp=form:'pp'breaks:[00.4000123.1416]coefs:[4x4double]pieces:4order:4dim:1>>ezplot('sin(t)',[0,pi]);plot(x0,y0,'o')>>sp.coefsans=-0.16270.00760.99650-0.1627-0.18760.92450.38940.0244-0.48040.52380.84150.0244-0.4071-0.36370.9093例:113在(0.4000,1)区间内,插值多项式可以表示为:在(0.4000,1)区间内,插值多项式可以表示为:114例点,用三次样条插值的方法对这些数据进行拟合>>x=0:.12:1;y=(x.^2-3*x+5).*exp(-5*x).*sin(x);>>sp=csapi(x,y);fnplt(sp)>>c=[sp.breaks(1:4)'sp.breaks(2:5)'sp.coefs(1:4,:),...sp.breaks(5:8)'sp.breaks(6:9)'sp.coefs(5:8,:)]c=Columns1through700.120024.7396-19.35884.515100.48000.12000.240024.7396-10.45260.93770.30580.60000.24000.36004.5071-1.5463-0.50220.31050.72000.36000.48001.91390.0762-0.67860.23580.8400
例点,用三次样条插值的方法对这些数据进行拟合>>x=0:.115Columns8through120.6000-0.24040.7652-0.57760.15880.7200-0.47740.6787-0.40430.10010.8400-0.45590.5068-0.26210.06050.9600-0.45590.3427-0.16010.0356Columns8through12116格式S=csapi({x1,x2,…,xn},z)处理多个自变量的网格数据三次样条插值类:格式处理多个自变量的网格数据三次样条插值类:117>>x0=-3:.6:3;y0=-2:.4:2;[x,y]=ndgrid(x0,y0);%注意这里只能用ndgrid,否那么生成的z矩阵顺序有问题>>z=(x.^2-2*x).*…exp(-x.^2-y.^2-x.*y);>>sp=csapi({x0,y0},z);>>fnplt(sp);例>>x0=-3:.6:3;y0=-2:.4:2;[x,118函数spline功能三次样条数据插值格式yy=spline(x,y,xx)例:对离散分布在y=exp(x)sin(x)函数曲线上的数据点进展样条插值计算:>>x=[024581212.817.219.920];>>y=exp(x).*sin(x);>>xx=0:.25:20;>>yy=spline(x,y,xx);>>plot(x,y,'o',xx,yy)函数spline119《Matlab数据处理》教学课件120主要内容微积分问题的解析解函数的级数展开与级数求和问题求解概率分布与伪随机数生成数据插值数据拟合主要内容微积分问题的解析解1214.5数据拟合用插值的方法对一函数进展近似,要求所得到的插值多项式经过插值节点;在n比较大的情况下,插值多项式往往是高次多项式,这也就容易出现振荡现象〔龙格现象〕,即虽然在插值节点上没有误差,但在插值节点之外插值误差变得很大,从“整体〞上看,插值逼近效果将变得“很差〞。所谓数据拟合是求一个简单的函数,例如是一个低次多项式,不要求通过的这些点,而是要求在整体上“尽量好〞的逼近原函数。这时,在每个点上就会有误差,数据拟合就是从整体上使误差,尽量的小一些。4.5数据拟合用插值的方法对一函数进展近似,要求所得到的插122多项式拟合n次多项式:曲线与数据点的残差为:残差的平方和为:为使其最小化,可令R关于的偏导数为零,即:多项式拟合n次多项式:123或或矩阵形式:或124多项式拟合MATLAB命令:polyfit
格式:p=polyfit(x,y,n)多项式拟合MATLAB命令:polyfit
格式:p=po125>>x0=0:.1:1;y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0);>>p3=polyfit(x0,y0,3);vpa(poly2sym(p3),10)%可以如下显示多项式ans=2.839962923*x^3-4.789842696*x^2+1.943211631*x+.5975248921e-1例例126绘制拟合曲线:>>x=0:.01:1;ya=(x.^2-3*x+5).*exp(-5*x).*sin(x);>>y1=polyval(p3,x);plot(x,y1,x,ya,x0,y0,'o')绘制拟合曲线:127就不同的次数进展拟合:>>p4=polyfit(x0,y0,4);y2=polyval(p4,x);>>p5=polyfit(x0,y0,5);y3=polyval(p5,x);>>p8=polyfit(x0,y0,8);y4=polyval(p8,x);>>plot(x,ya,x0,y0,'o',x,y2,x,y3,x,y4)就不同的次数进展拟合:128拟合最高次数为8的多项式:>>vpa(poly2sym(p8),5)ans=-8.2586*x^8+43.566*x^7-101.98*x^6+140.22*x^5-125.29*x^4+74.450*x^3-27.672*x^2+4.9869*x+.42037e-6Taylor幂级数展开:>>symsx;y=(x^2-3*x+5)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品生产质量管理规范GMP基础知识培训试题及答案
- 仓储企业仓库安全管理制度
- 棚户区改造项目海绵城市工程评估施工方案-施工作业指导书
- 桥梁盖梁施工方案
- 医疗器械生产监督管理培训测试卷附答案
- 物业小区消防应急疏散演练脚本
- 2026年11月物业管理师操作技能考试题及答案
- 危险货物运输企业安全管理员定期维护安全操作规程
- 淮阴美术面试题及答案
- 大学生心理健康教育(配心理学效应手册) 教案 专题9、10:钟摆效应-洞察情绪密码提升调节能力;南风效应-提升交往技巧 建立积极关系
- 2026河北石家庄市栾城区殡仪馆公开招聘工作人员2名考试模拟试题及答案详解
- 2026年新疆医科大学第四附属医院(新疆维吾尔自治区中医医院)招聘编制外工作人员(125人)笔试备考试题及答案详解
- 市政给水管网专项施工方案
- 施工现场安全管理方案
- 2026贵州能源集团有限公司第三批综合管理岗公开招聘100人笔试备考试题及答案详解
- 2025北京画院招聘10人备考题库附答案
- 牛结节病的症状和治疗方法
- 2024年建筑三类人员考试题库(多选题)
- (高清版)JTGT 5440-2018 公路隧道加固技术规范
- 新闻评论写作五步法课件
- 工程造价咨询服务方案(技术方案)
评论
0/150
提交评论