帕德逼近算法_第1页
帕德逼近算法_第2页
帕德逼近算法_第3页
帕德逼近算法_第4页
帕德逼近算法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《MATLAB程序设计实践》课程作业一、用MATLAB编程实现“帕德逼近”的科学计算算法,及举例应用。1)帕德逼近算法说明如下:帕德逼近是一种有理分式逼近,逼近公式如下:大量实验表明,当L+M为常数时,取L=M,帕德逼近精确度最好,而且速度最快。此时,分子与分母中的系数可通过以下方式求解。首先,求解线形方程Aq=b,得到(…)的值,其中,,然后,通过下式求出的值。注意,函数的帕德逼近不一定存在。在MATLAB中编程实现的帕德逼近法函数为:Pade。功能:用帕德形式的有理分式逼近已知函数。调用格式:f=Pade(y,n)或f=Pade(y,n,x0)。其中,y为已知函数;n为帕德有理分式的分母多项式的最高次数;x0为逼近点的x坐标;f为求得的帕德有理分式或在x0处的逼近值。2)程序源代码如下:①在m文件中编写实现函数的Pade逼近的代码如下:functionf=Pade(y,n,x0)%用帕德形式的有理分式逼近已知函数%已知函数:y%帕德有理分式的分母多项式的最高次数:n%逼近点的坐标:x0%求得的帕德有理分式或在x0处的逼近值:fsymst;A=zeros(n,n);q=zeros(n,1);p=zeros(n+1,1);b=zeros(n,1);yy=0;a(1:2*n)=0.0;for(i=1:2*n)yy=diff(sym(y),findsym(sym(y)),n);a(i)=subs(sym(yy),findsym(sym(yy)),0.0)/factorial(i);end;for(i=1:n)for(j=1:n)A(i,j)=a(i+j-1);end;b(i,1)=-a(n+i);end;q=A\b;p(1)=subs(sym(y),findsym(sym(y)),0.0);for(i=1:n)p(i+1)=a(n)+q(i)*subs(sym(y),findsym(sym(y)),0.0);for(j=2:i-1)p(i+1)=p(i+1)+q(j)*a(i-j);endendf_1=0;f_2=1;for(i=1:n+1)f_1=f_1+p(i)*(t^(i-1));endfor(i=1:n)f_2=f_2+q(i)*(t^i);endif(nargin==3)f=f_1/f_2;f=subs(f,'t',x0);elsef=f_1/f_2;f=vpa(f,6);end3)算法实现流程图如下:开始开始定义变量,输入:定义变量,输入:symst;A=zeros(n,n);q=zeros(n,1);p=zeros(n+1,1);b=zeros(n,1);赋初始值,输入赋初始值,输入yy=0;a(1:2*n)=0.0No开始循环判断No开始循环判断i≤2nYesYesyy=diff(sym(y),findsym(sym(y)),n);yy=diff(sym(y),findsym(sym(y)),n);a(i)=subs(sym(yy),findsym(sym(yy)),0.0)/factorial(i);开始循环判断开始循环判断i≤nNoNoYesYesNo开始循环判断No开始循环判断j≤nq=A\b;q=A\b;p(1)=subs(sym(y),findsym(sym(y)),0.0);b(i,1)=-a(n+i)Yesb(i,1)=-a(n+i)YesA(i,j)=a(i+j-1)A(i,j)=a(i+j-1)No开始循环判断No开始循环判断j≤nYesYesp(i+1)=a(n)+q(i)*subs(sym(y),findsym(sym(y)),0.0)p(i+1)=a(n)+q(i)*subs(sym(y),findsym(sym(y)),0.0)f_1=0;f_1=0;f_2=1;No开始循环判断No开始循环判断2≤j≤i-1YesYesp(i+1)=p(i+1)+q(j)*a(i-j)p(i+1)=p(i+1)+q(j)*a(i-j)开始循环判断开始循环判断1≤j≤n+1NoNoYesYesf_1=f_1+p(i)*(t^(i-1))f_1=f_1+p(i)*(t^(i-1))开始循环判断1开始循环判断1≤i≤nNoNoYesYesf_2=f_2+q(i)*(t^i)f_2=f_2+q(i)*(t^i)对对nargin==3进行循环判断NoNoYesYes输出结果f=f_1/f_2;输出结果f=f_1/f_2;f=vpa(f,6)输出结果f=f_1/f_2;f=subs(f,'t',x0);结束结束4)用勒让德公式(取4项)逼近函数,并求当x=0.5时的函数值。源代码及运算结果如下:>>f=Pade('1/(1-x)',4)f=(1.+1.00060*t+.988095*t^2+.821429*t^3+2.92857*t^4)/(1.+.595238e-3*t-.119048e-1*t^2+.107143*t^3-.500000*t^4)>>f=Pade('1/(1-x)',4,0.5)f=2.0757实现流程图为:开始开始输入:f=Pade('1/(1-x)',4)输出结果,其形式为帕德有理分式调用帕德函数,分母最高次项为4次调用帕德函数,分母最高次项为4次,计算x=0.5时的逼近值输入:f=Pade(‘1/(1-x)’,4,0.5)输出结果,其形式为x=0.5时的逼近值结束二、求解工程问题,计算立柱的直径。已知:P=15kN,[σ]=35Mpa,l=0.4m1)建模:钻床受力图如下:llPPM=PlA钻床受力图AA立柱受力图A-A如图所示,钻床立柱受到拉力P和弯矩M=Pl的作用,立柱受到的拉应力之和为P与M的共同作用,其最大值σ(max)应小于许用拉应力[σ],即:σσ(max)=P/F+M/W≤[σ](1)其中,对于圆柱体而言,F=πd2/4为立柱截面积,W=πd3/32为抗弯系数,将FW带入(1)式后,可得:σσ=4P/πd2+32M/πd3≤[σ](2)化简上式,可得立柱直径d应满足:[[σ]πd3/32-Pd/8-Pl≥0(3)于是,该工程问题可以看作是单变量三次代数方程的求根问题!2)算法实现fzero函数:fzero函数用于求解单变量非线性方程根据(3)式的关系,将立柱直径d的系数项依次算出:[σ]=35*106MPa,P=15000N,l=0.4m,并带入到关系式中:在命令窗口输入:>>x=fzero('(35*10^6*pi)/32*x^3-(15000/8)*x-15000*0.4',[01])x=0.1219流程图为:开始开始调用fzero函数输入:x=fzero(f,x0)输出:区间[0,1]的根,x=0.1219m结束三、用MATLAB的符号解法,求解常微分方程:1:>>x=dsolve('D2x=(-2/t)*D1x+(2/(t^2))*x-(10*cos(ln(t)))/(t^2)','x(1)=1','x(3)=3')x=1/13*t*(28*tan(1/2*log(3))^2+1+9*tan(1/2*log(3)))/(1+tan(1/2*log(3))^2)-9/13/t^2*(6*tan(1/2*log(3))^2+3+tan(1/2*log(3)))/(1+tan(1/2*log(3))^2)-(3*tan(1/2*log(t))^2+2*tan(1/2*log(t))-3)/(1+tan(1/2*log(t))^2)>>t=[1.5,2,2.5]t=1.50002.00002.5000>>x=subs(sym(x),findsym(x),t)x=2.47762.83362.9391plot(t,x,'-r')流程图如下:x=x=dsolve('D2x=(-2/t)*D1x+(2/(t^2))*x-(10*cos(ln(t)))/(t^2)''x(1)=1','x(3)=3''x(1)=1','x(3)=3'x=x=?t=[1.5,2,2.5]x=subs(sym(x),findsym(x),t)t=[1.5,2,2.5]x=subs(sym(x),findsym(x),t)x=x=?plot(t,x,'-r')plot(t,x,'-r')2>>y=dsolve('D2y+(1/t)*Dy+(1-1/(4*t^2))*y=sqrt(t)*cos(t)','y(1)=1','y(6)=-0.5')y=1/4/t^(1/2)*sin(t)*(-240*cos(1)*sin(1)^4+160*cos(1)*sin(1)^6-210*sin(1)+1330*sin(1)^3-2240*sin(1)^5+1120*sin(1)^7+90*cos(1)*sin(1)^2-4+72*sin(1)^2-192*sin(1)^4+128*sin(1)^6-2*6^(1/2)*cos(1)-5*cos(1))/(5-20*sin(1)^2+16*sin(1)^4)/sin(1)-1/2/t^(1/2)*cos(t)*(-112*sin(1)^4+80*sin(1)^6-105*sin(1)*cos(1)-560*cos(1)*sin(1)^5+560*cos(1)*sin(1)^3+35*sin(1)^2-12*cos(1)-64*cos(1)*sin(1)^4+64*cos(1)*sin(1)^2-6^(1/2))/(5-20*sin(1)^2+16*sin(1)^4)+1/4*(t*cos(t)+sin(t)*t^2-sin(t))/t^(1/2)>>t=[2,3,4.5]t=2.00003.00004.5000>>y=subs(sym(y),findsym(y),t)y=0.9544-0.2187-2.7915plot(t,y,'-r')流程图如下:y=dsolve('D2y+(1/t)*Dy+(1-1/(4*t^2))*y=sqrt(t)*cos(t)',y=dsolve('D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论