南昌大学教务处MATLAB实验报告詹如平5901112154机制124班机电工程学院南昌大学教务处实验五matlab求解多项式(常微分方程)一、实验目的1、了解MATLAB中主要用dsolve求符号解析解,ode45,ode23,ode15s求数值解。注释:s=dsolve(‘方程1’,‘方程2’,…,’初始条件1’,’初始条件2’…,’自变量’)用字符串方程表示,自变量缺省值为t。导数用D表示,2阶导数用D2表示,以此类推。S返回解析解。在方程组情形,s为一个符号结构。[tout,yout]=ode45(‘yprime’,[t0,tf],y0)采用变步长四阶Runge-Kutta法和五阶Runge-Kutta-Felhberg法求数值解,yprime是用以表示f(t,y)的M文件名,t0表示自变量的初始值,tf表示自变量的终值,y0表示初始向量值。输出向量tout表示节点(t0,t1,…,tn)T,输出矩阵yout表示数值解,每一列对应y的一个分量。若无输出参数,则自动作出图形。ode45是最常用的求解微分方程数值解的命令,对于刚性方程组不宜采用。ode23与ode45类似,只是精度低一些。ode12s用来求解刚性方程组,是用格式同ode45。可以用helpdsolve,helpode45查阅有关这些命令的详细信息.二、实验要求(选作下列习题)1.求下列微分方程的解析解南昌大学教务处程序:symsxya;s1=dsolve('D2y+Dy*2-3*y=exp(-3*x)','x')s2=dsolve('D2y-3*Dy=2*sin(x)*exp(2*x)','x')s3=dsolve('D2y+y*a^2=sin(x)','x')s4=dsolve('D2y*y-Dy*Dy-1=0','x')s5=dsolve('Dy=y^3./(2*(x*y^2-x^2))','y(1)=1','x')s6=dsolve('D2y+Dy+y=cos(x)','y(0)=0,Dy(0)=1.5','x')s7=dsolve('D2y+y=exp(x)+cos(x)','y(0)=1,Dy(0)=1','x')s8=dsolve('D3y+2*D2y+Dy=0','y(0)=2,Dy(0)=0,D2y(0)=-1','x')南昌大学教务处结果:s1=exp(x)*C2+exp(-3*x)*C1-1/4*x*exp(-3*x)s2=-1/5*cos(x)*exp(2*x)-3/5*sin(x)*exp(2*x)+1/3*exp(3*x)*C1+C2s3=sin(a*x)*C2+cos(a*x)*C1+sin(x)/(a^2-1)s4=1/2*C1*(1/exp(1/C1*x)^2/exp(1/C1*C2)^2+1)*exp(1/C1*x)*exp(1/C1*C2)1/2*C1*(exp(1/C1*x)^2*exp(1/C1*C2)^2+1)/exp(1/C1*x)/exp(1/C1*C2)s5=exp(-1/2*lambertw(-exp(-1)/x)-1/2)s6=1/3*exp(-1/2*x)*sin(1/2*3^(1/2)*x)*3^(1/2)+sin(x)s7=1/2*sin(x)+1/2*exp(x)+1/2*cos(x)+1/2*sin(x)*xs8=南昌大学教务处1+exp(-x)+exp(-x)*x2.求方程3)0(',1)0(,'2)1(2yyxyyx的解析解和数值解,并进行比较解方程程序:symsxy;y=dsolve('D2y*(1+x^2)=2*x*Dy','y(0)=1,Dy(0)=3','x')结果:y=1+3*x+x^3a.程序建立函数文件fun.mfunctionf=fun(x,y)f=y-x^3+3*x^2-3*x+2;b.主程序:[x,y]=ode45('fun',[0,1],1);plot(x,y1,'rp')holdonx=0:0.1:1;y2=1+x.^3+3*x;plot(x,y2,'b')南昌大学教务处结果;南昌大学教务处实验七函数文件一、实验目的1、理解函数文件的概念。2、掌握定义和调用MATLAB函数的方法。二、实验内容(选作2题)1、定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。建立函数文件hansu.mfunction[a,b,c,d]=hanshu(x)a=exp(x);b=log(x);c=sin(x);d=cos(x);%a指数函数值%b对数函数值%c正弦函数值%d余弦函数值南昌大学教务处主程序:x=input('输入x=');[a,b,c,d]=hanshu(x)结果:输入x=1a=2.7183b=0c=0.8415d=0.5403南昌大学教务处2、一个物理系统可用下列方程组来表示:11121112220cossin0sin0cos000sin000cos1ammamgmNmNmg从键盘输入m1、m2和的值,求a1、a2、N1、N2的值。其中g取’9.8,输入时以角度为单位。要求:定义一个求解线性方程组AX=B的函数文件,然后在命令文件中调用该函数文件。建立函数文件solve.mfunctionx=solve(A,B)x=A\B;主程序;m1=input('输入m1=')m2=input('输入m2=')theta1=input('输入theta=')g=9.8;theta=theta1*180/pi;A=[m1*cos(theta),-m1,-sin(theta),0;南昌大学教务处m1*sin(theta),0,cos(theta),0;0,m2,-sin(theta),0;0,0,-cos(theta),1];B=[0;m1*g;0;m2*g];x=solve(A,B);a1=x(1)a2=x(2)N1=x(3)N2=x(4)结果:输入m1=2输入m2=2输入theta=30a1=-6.8768a2=3.1365南昌大学教务处N1=-15.3084N2=33.56413、一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称是绝对素数。例如13是绝对素数。试求所有两位绝对素数。建立函数文件mat.mfunctionflag=mat(x)flag=1;fori=2:sqrt(x)ifrem(x,i)==0flag=0;break;endend主程序:南昌大学教务处fori=10:99j=10*rem(i,10)+fix(i/10);ifmat(i)&mat(j)disp(i)endend结果:1113173137717379974、设241120.130.01fxxx,编写一个MATLAB函数文件fx.m,使得调用f(x)时,x可用矩阵代入,得出的f(x)为同阶矩阵。南昌大学教务处建立函数文件fx.mfunctionfx=fx(x)fx=1./((x-2).^2+0.1)+1./((x-3)^4+0.01);主程序:x=input('输入矩阵:')fx=fx(x)结果:输入矩阵:[1,2,3;1,2,3;1,2,3]x=123123123南昌大学教务处fx=0.927610.0370100.90910.927610.0370100.90910.927610.0370100.90915、已知403020fyff(1)当f(n)=n+10ln25n时,求y的值。建立函数文件fn.mfunctionx=fn(n)x=n+10*log(n^2+5);主程序:y=fn(40)/(fn(30)+fn(20))结果:y=南昌大学教务处0.6390(2)当1223341fnnn时,求y的值。建立函数文件fn.mfunctionx=fn(n)x=0;forn=1:nx=x+n*(n+1);End主程序:y=fn(40)/(fn(30)+fn(20))结果:y=1.7662实验八,九MATLAB程序设计(循环、选择)一、实验目的南昌大学教务处1、掌握利用if语句实现选择结构的方法;2、掌握利用switch语句实现多分支选择结构的方法;3、掌握循环结构的程序书写方法。二、实验内容1、硅谷公司员工的工资计算方法如下:(1)工作时数超过120小时者,超过部分加发15%;(2)工作时数低于60小时者,扣发700元;(3)其余按每小时84元计发。编程按输入的工号和该号员工的工作时数,计算应发工资。程序:m=input('输入工号:');n=input('工作小时数:');ifn=120y=84*n+(n-120)*0.15elseifn60y=84*n-700elseifn=60&n120y=84*nend南昌大学教务处结果:输入工号:0001工作小时数:50y=35002、用switch…case语句得出各月份的季节(如3,4,5月输出为春季)。程序:x=input('输入月份:');switchxcase1disp([Num2str(x),'月是冬季'])case2disp([Num2str(x),'月是冬季'])case3disp([Num2str(x),'月是春季'])case4disp([Num2str(x),'月是春季'])case5南昌大学教务处disp([Num2str(x),'月是春季'])case6disp([Num2str(x),'月是夏季'])case7disp([Num2str(x),'月是夏季'])case8disp([Num2str(x),'月是夏季'])case9disp([Num2str(x),'月是秋季'])case10disp([Num2str(x),'月是秋季'])case11disp([Num2str(x),'月是秋季'])case12disp([Num2str(x),'月是冬季'])End结果:输入月份:11月是冬季南昌大学教务处3、计算1+3+5+…+99的值,当和大于1000的时候终止计算,要求显示终止时候的求和结果以及最后一位计算的整数值。程序:sum=0;fori=1:2:99sum=sum+i;if(sum1000)break;endenda=sum;b=i;disp(['求和结果为:',num2str(a)])disp(['最后一位计算的整数值为:',num2str(b)])结果:求和结果为:1024最后一位计算的整数值为:63南昌大学教务处4、分别采用循环语句和sum语句实现63263022212iiK的计算。循环实现:y=0;fori=0:63y=y+2^i;i=i+1;enda=y结果:a=1.8447e+019sum求和实现:i=[1:63];b=2.^i;a=sum(b)结果:南昌大学教务处a=1.8447e+0195、编写一个函数文件,实现两个矩阵的乘积和点乘,并在命令文件中调用该函数。建立函数文件文件cheng.mfunction[x,y]=cheng(A,B)x=A.*B;y=A*B;主程序:A=input('输入矩阵A:')B=input('输入能与矩阵A相乘的矩阵B:')[x,y]=cheng(A,B)结果:输入矩阵A:[2,3;4,9]A=南昌大学教务处2349输入能与矩阵A相乘的矩阵B:[2,1;7,3]B=2173x=432827y=25117131三、实验要求1、预习,写出自己设计的实验步骤;2、按照实验室规范使用计算机;3、做好实验记录(包括程序和结果)。四、思考题1、break语句和continue语句有什么区别?南昌大学教务处答:while循环、do-while循环和for循环中,可以用break语句跳出循环,用continue语句结束本次循环,而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。contin