- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]matlab物理案例分析
Matlab及其应用 * 例2——有空气阻力抛射体的运动 步骤一:给定小球质量m,重力加速度g,拖曳系数C和小球面积A(半径为r),根据D=rou*C*A/2求出D 步骤二:给定小球的初始速度v(1)(大小和方向角theta),小球的位置(x(1)和y(1)。设定时间间隔detat 步骤三:选定最大的间隔数N(或者最大的时间 ) Matlab及其应用 * 求解步骤 步骤四:当nN或者t 时循环步骤五到步骤九 步骤五:计算加速度分量 步骤六:打印或者画 Matlab及其应用 * 步骤七:计算新的速度分量 步骤八:计算新的位移坐标 步骤九:时间上增加一个间隔 步骤十:结束 Matlab及其应用 * Matlab程序 g=9.8; m=0.145; C=0.5; r=0.0366; A=pi*r^2; rou=1.2; D=(rou*C*A)/2; detat=0.01; theta=(35/180*pi); x(1)=0; y(1)=0; V(1)=50; Vx(1)=V(1)*cos(theta); Vy(1)=V(1)*sin(theta); N=700; Matlab及其应用 * for n=1:N V(n)=sqrt(Vx(n)^2+Vy(n)^2) ax(n)=-(D/m)*V(n)*Vx(n); ay(n)=-g-(D/m)*V(n)*Vy(n); Vx(n+1)=Vx(n)+ax(n)*detat; Vy(n+1)=Vy(n)+ay(n)*detat; x(n+1)=x(n)+Vx(n)*detat+0.5*ax(n)*detat^2; y(n+1)=y(n)+Vy(n)*detat+0.5*ay(n)*detat^2; px(n)=Vx(1)*n*detat; py(n)=Vy(1)*n*detat-0.5*g*(n*detat)^2; end plot(x,y,r,px,py,g); grid xlabel(x),ylabel(y); title(Projectile motion with air resistance); Matlab及其应用 * 结果 Matlab及其应用 * 例3——有空气阻力的落体运动。 一个质量为75kg的人在某一高度静止下落,空气阻力F与v的关系满足F=-k ,其中常数k=0.22kg/m,根据牛顿第二定律知 若令g=9.80m/ ,求下落过程中速度v(t)和位移x(t)的表达式,并画图。 Matlab及其应用 * 推导 Matlab及其应用 * Matlab程序 v=dsolve(m*D2v+2*k*v*Dv=0,v(0)=0,Dv(0)=g,t) x=dsolve(m*g-k*(Dx)^2=m*D2x,x(0)=0,Dx(0)=0,D2x(0)=g,t) m=75; k=0.22; g=9.8 t=0:0.5:30; v =tanh(t.*(g*m*k)^(1/2)/m)*(g*m*k)^(1/2)/k %x=(m/k)*log(cosh(t.*(k*g/m)^1/2)) plot(t,v),gtext(v(t)) hold on plot(t,x),gtext(x(t)) Matlab及其应用 * 结果 Matlab及其应用 * 例4-小球碰撞问题 质量为m的小球以速度 正面碰撞质量为M的静止小球,假设碰撞是完全弹性的,即没有能量损失,求碰撞后两球的速度,及它们与两球质量比K=M/m的关系。 ◆建模 设碰撞后两球速度都与 同向,球m的速度为u,球M的速度为v,列出动量守恒和能量守恒方程,引入质量比K=M/m和无量纲速度ur=u/ ,vr=v/ 后,有 Matlab及其应用 * 推导过程 动量守恒 动能守恒 化为 (1) (2) (3) (4) Matlab及其应用 * 由(3) 代入(4) 展开并整理多项式 (6)得 可用roots命令求根 (5) (6) Matlab及其应用 * MATLAB程序 clear K=logspace(-1,1,11); %设自变量数组K,从K=0.1~ 10,按等比取11个点 for i=1:length(K) %对各个K循环计算 ur1=roots([(1+1/K(i)),-2/K(i),(1/K(i)-1)]
文档评论(0)