MATLAB 语言程序设计基础(2)
- 格式:docx
- 大小:30.79 KB
- 文档页数:16
程序设计实验报告(matlab)实验一: 程序设计基础实验目的:初步掌握机器人编程语言Matlab。
实验内容:运用Matlab进行简单的程序设计。
实验方法:基于Matlab环境下的简单程序设计。
实验结果:成功掌握简单的程序设计和Matlab基本编程语法。
实验二:多项式拟合与插值实验目的:学习多项式拟合和插值的方法,并能进行相关计算。
实验内容:在Matlab环境下进行多项式拟合和插值的计算。
实验方法:结合Matlab的插值工具箱,进行相关的计算。
实验结果:深入理解多项式拟合和插值的实现原理,成功掌握Matlab的插值工具箱。
实验三:最小二乘法实验目的:了解最小二乘法的基本原理和算法,并能够通过Matlab进行计算。
实验内容:利用Matlab进行最小二乘法计算。
实验方法:基于Matlab的线性代数计算库,进行最小二乘法的计算。
实验结果:成功掌握最小二乘法的计算方法,并了解其在实际应用中的作用。
实验六:常微分方程实验目的:了解ODE的基本概念和解法,并通过Matlab进行计算。
实验内容:利用Matlab求解ODE的一阶微分方程组、变系数ODE、高阶ODE等问题。
实验方法:基于Matlab的ODE工具箱,进行ODE求解。
实验结果:深入理解ODE的基本概念和解法,掌握多种ODE求解方法,熟练掌握Matlab的ODE求解工具箱的使用方法。
总结在Matlab环境下进行程序设计实验,使我对Matlab有了更深刻的认识和了解,也使我对计算机科学在实践中的应用有了更加深入的了解。
通过这些实验的学习,我能够灵活应用Matlab进行各种计算和数值分析,同时也能够深入理解相关的数学原理和算法。
这些知识和技能对我未来的学习和工作都将有着重要的帮助。
实验项目1 MATLAB熟悉使用及编程基础MATLAB是美国Mathworks公司推出的一套高件能的数值分析和计算软件,它将矩阵运算、数值分析、图形处理、编程处术结合在一起,为用户提供了一个强有力的科学及工程问题分析计算和程序设计的工具。
MATLAB本身也在不断改进和创新,特别是2000年以出的版本6,无论在界面设计、计算方法、编程阶段和工具等方面都有了巨大的突破,全面引入了面向对象编程的概念和方法,使MATLAB真正成为了具有全部高级语言功能和特征的新一代软件开发平台。
MATLAB开发环境是一组工具和组件的集成,这些工具是图形化的用户接口,它们包括 MATLAB桌面、命令窗口、命令历史窗口、编辑调试窗口以及帮助信信息、工作空间、文件和搜索路径等浏览器。
MATLAB集成了丰富的数学函数库,其强大的计算能力覆盖了从基本函数(如求和、正弦、余弦和复数运算等)到特殊函数(如矩阵求逆、矩阵特征值、贝塞尔函数和快速傅里叶变换等)的范围。
MATLAB语言是一种高级编程语言,包括控制流的描述、函数、数据结构、输入输出及面对对象编程,既可以编制适用于快速使用的小程序,也可以编制大型复杂的应用程序。
MATLAB提供了功能强大的图形系统,既可以完成二维和三维数据的可视化、图像处理、动画和图形表达等功能,也可以定制图形的外观,如建立一个完整的图形用户界由的应用程序。
1.实验目的:掌握MA TLAB编程语言和偏微分方程PDE工具箱对电磁场的基本问题进行仿真;2 实验内容:1、MATLAB启动MA TLAB安装到硬盘后,启动方法有:(1)点击Windows桌面上自动生成的快捷方式图标;(2)点击matlab 6\文件夹下快捷方式图标令MATLAB(3)点击matlab/bin/win32文件夹中的Matlab.exe2、m文件编写熟悉基本指令、基本数学运算,借助help、lookfor等命令实现在线帮助。
建立M文件的一般步骤如下:(1)打开文件编辑器:指的是MA TLAB内部编辑/调试器,可以有几种不同的方法打开文件编辑器,最简单的方法是在操作桌面助工具栏上选择蹦(建立新文件)或选择瞪(打开已有的文件),也可以在命令窗口输入命令edit建立新文件或输入命令edit filename,打开名为fi1ename的M文件。
%第六章微分方程问题的解法% 微分方程的解析解方法% 常微分方程问题的数值解法% 微分方程问题算法概述% 四阶定步长Runge-Kutta算法及MATLAB 实现% 一阶微分方程组的数值解% 微分方程转换% 特殊微分方程的数值解% 边值问题的计算机求解% 偏微分方程的解% 6.1 微分方程的解析解方法% y=dsolve(f1, f2, …, fm ,'x')% syms t; u=exp(-5*t)*cos(2*t+1)+5;% uu=5*diff(u,t,2)+4*diff(u,t)+2*u% syms t y;% y=dsolve(['D4y+10*D3y+35*D2y+50*Dy+24*y='...%'87*exp(-5*t)*cos(2*t+1)+92*exp(-5*t)*sin(2*t+1)+10'],'y(0)=3','Dy(0)=2','D2y(0)=0','D3y(0)=0')% [x,y]=dsolve('D2x+2*Dx=x+2*y-exp(-t)',...% 'Dy=4*x+3*y+4*exp(-t)')% syms t x;% x=dsolve('Dx=x*(1-x^2)+1')% Warning: Explicit solution could not be found; implicit solution returned.% > In D:\MATLAB6p5\toolbox\symbolic\dsolve.m at line 292% x =% t-Int(1/(a-a^3+1),a=``..x)+C1=0% 故只有部分非线性微分方程有解析解。
% 6.2 微分方程问题的数值解法% 6.2.1 微方程问题算法概述%Euler算法%%function [outx,outy]=MyEuler(fun,x0,xt,y0,PointNum)% fun 表示f(x,y); x0,xt:自变量的初值和终值;% y0:函数在x0处的值,其可以为向量形式;% PointNum表示自变量在[x0,xt]上取的点数% if nargin<5 |PointNum<=0 %PointNum 默认值为100% PointNum=100;% end% if nargin<4 % y0默认值为0% end% h=(xt-x0)/PointNum; %计算步长h% x=x0+[0:PointNum]'*h; %自变量数组% y(1,:) = y0(:)'; %将输入存为行向量,输入为列向量形式% for k = 1:PointNum% f=feval(fun,x(k),y(k,:)); f=f(:)'; %计算f(x,y)在每个迭代点的值% y(k + 1,:) =y(k,:) +h*f; %对于所取的点x迭代计算y值% end% outy=y; outx=x;% plot(x,y) %画出方程解的函数图% end% [x1,y1]=MyEuler('myfun',0,2*pi,1,16);% myfun=incline'Dy=sin(x)+y'% function [Xout,Yout]=MyEulerPro(fun,x0,xt,y0,PointNumber)% %MyEulerPro 用改进的欧拉法解微分方程% if nargin<5 | PointNumber<=0% %PointNumer默认值为100% PointNumer=100;% end% if nargin<4 %y0默认值为0% y0=0;% end% h=(xt-x0)/PointNumber;% %计算所取的两离% 散点之间的距离% x=x0+[0:PointNumber]'*h;% %表示出离散的自变量x% y(1,:)=y0(:)';% for i=1:PointNumber %迭代计算过程% f1=h*feval(fun,x(i),y(i,:)); f1=f1(:)';% f2=h*feval(fun,x(i+1),y(i,:)+f1); f2=f2(:)';% y(i+1,:)=y(i,:)+1/2*(f1+f2);% end% Xout=x;Yout=y;%6.2.2 四阶定步长Runge-Kutta算法及MATLAB 实现%6.2.3 一阶微分方程组的数值解%6.2.3.1 四阶五级Runge-Kutta-Felhberg算法%6.2.3.2 基于MATLAB 的微分方程% 求解函数% 格式1:直接求解% [t,x]=ode45(Fun,[t0,tf],x0)% 格式2:带有控制参数% [t,x]=ode45(Fun,[t0,tf],x0,options)% 格式3:带有附加参数% *t,x+=ode45(Fun,*t0,tf+,x0,options,p1,p2,…)% [t0,tf]求解区间,x0初值问题的初始状态变量。
% 描述需要求解的微分方程组:% 不需附加变量的格式% function xd=funname(t,x)% 可以使用附加变量% function xd=funname(t,x,flag,p1,p2,…)% t是时间变量或自变量(必须给),x为状态向量,xd为返回状态向量的导数. % flag用来控制求解过程,指定初值,即使初值不用指定,也必须有该变量占位。
% 修改变量:options唯一结构体变量,用odeset( )修改。
% options=odeset(‘RelTol’,1e-7);% options= odeset; options. RelTol= 1e-7;%6.2.3.3 MATLAB 下带有附加参数的微分方程求解% 6.2.4 微分方程转换% 6.2.4.1 单个高阶常微分方程处理方法% 6.2.4.2 高阶常微分方程组的变换方法%% 6.3特殊微分方程的数值解% 6.3.1 刚性微分方程的求解% MATLAB采用求解函数ode15s(),该函数的调用格式和ode45()完全一致。
% *t,x+=ode15s(Fun,*t0,tf+,x0,options,p1,p2,…)%% 6.3.2 隐式微分方程求解% 6.3.3 微分代数方程求解% 6.3.4延迟微分方程求解%% 6.4边值问题的计算机求解% 6.4.1 边值问题的打靶算法% 6.4.2 线性微分方程的有限差分算法%% 6.5 偏微分方程求解入门% 6.5.1 偏微分方程组求解% pdepe()函数可求解% 函数描述% [c,f,s]=pdefun(x,t,u,ux)% 边界条件函数描述% [pa,qa,pb,qb]=pdebc(x,t,u,ux)% 初值条件函数描述% u0=pdeic(x)% 求解偏微分方程% sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)%% 6.5.2 二阶偏微分方程的数学描述% 椭圆型;抛物线型;双曲线型;特征值型偏微分方程%% 6.5.3 偏微分方程的求解界面应用简介% 6.5.3.1 偏微分方程求解程序概述% 启动偏微分方程求解界面% 在MATLAB 下键入pdetool% 该界面分为四个部分:菜单系统;工具栏;集合编辑;求解区域% 6.5.3.2 偏微分方程求解区域绘制% 1)用工具栏中的椭圆、矩形等绘制一些区域。
% 2)在集合编辑栏中修改其内容。
如(R1+E1+E2)-E3% 3)单击工具栏中按纽可得求解边界。
% 4)选择Boundary-Remove All Subdomain Borders菜单项,消除相邻区域中间的分隔线。
% 5)单击按纽可将求解区域用三角形划分成网格。
可用按纽加密。
%% 6.5.3.3 偏微分方程边界条件描述% 选择Boundary-Specify Boundary Conditions菜单% 狄利克雷条件,诺伊曼条件。
% 6.5.3.4 偏微分方程求解举例% 6.5.3.5 函数参数的偏微分方程求解% 第七章代数方程与最优化问题的求解% 代数方程的求解% 无约束最优化问题的计算机求解% 有约束最优化问题的计算机求解% 整数规划问题的计算机求解% 7.1代数方程的求解% 7.1.1 代数方程的图解法% 7.1.2 多项式型方程的准解析解法% 由于方程阶次可能太高,不存在解析解。
然而,% 可利用MATLAB的符号工具箱得出原始问题的高精度数值解,故称之为准解析解。
% 一般多项式方程的根可为实数,可为复数。
MATLAB符号工具箱中的solve( )函数。
% 最简调用格式:S=solve(eqn1,eqn2,…,eqnn)% (返回一个结构题型变量S,如S.x表示方程的根。
)% 直接得出根:(变量返回到MATLAB工作空间)% *x,…+=solve(eqn1,eqn2,…,eqnn)% 同上,并指定变量% [x,…]=solve(eqn1,eqn2,…,eqnn,’x,…')% 7.1.3 一般非线性方程数值解% 非线性方程的标准形式为f(x)=0% 函数fzero% 格式x = fzero (fun,x0) %用fun定义表达式f(x),x0为初始解。
% x = fzero (fun,x0,options)% *x,fval+=fzero(…) %fval=f(x)% *x,fval,exitflag+=fzero(…)% *x,fval,exitflag,output+=fzero(…)% 说明该函数采用数值解求方程f(x)=0的根。
%% 7.1.4 一般非线性方程组数值解% 格式:最简求解语句% x=fsolve(Fun, x0)% 一般求解语句% *x, f, flag, out+=fsolve(Fun, x0,opt, p1, p2,…)% 若返回的flag 大于0,则表示求解成功,否则求解出现问题,% opt 求解控制参数,结构体数据。
% 获得默认的常用变量opt=optimset;% 用这两种方法修改参数(解误差控制量)% opt.Tolx=1e-10;或set(opt.‘Tolx’, 1e-10)% 可先用用图解法选取初值,再调用fsolve( )函数数值计算% 7.2无约束最优化问题求解% 7.2.1 解析解法和图解法%% 单变量函数求最小值% 函数fminbnd (最值可能在端点,需要考虑)% 格式x = fminbnd(fun,x1,x2)% x = fminbnd(fun,x1,x2,options)% [x,fval] = fminbnd(…) % fval为目标函数的最小值% *x,fval,exitflag+ = fminbnd(…)% exitflag为终止迭代的条件,若exitflag>0,收敛于x,exitflag=0,% 表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;% *x,fval,exitflag,output+ = fminbnd(…)% output为优化信息,若output=iterations表示迭代次数,% output=funccount表示函数赋值次数,output=algorithm表示所使用的算法%% 7.2.2 基于MATLAB的数值解法%求解无约束最优化的函数:fminsearch()% x=fminunc(Fun,x0) %最简求解语句% [x,f,flag,out]=fminunc(Fun,x0,opt,p1,p2,...)% 一般求解格式% 比较可知fminunc()函数效率高于fminsearch()函数,但% 当所选函数高度不连续时,使用fminsearch效果较好。