当前位置:文档之家› 仿真实验报告.doc

仿真实验报告.doc

实 验 报 告 一实验名称:矩阵Matlab 表示与运算 实验地点:5栋504 实验时间: 第2周实验人员: 姓名:龚永贵 专业: 计算机科学与技术 年级:2008级 实验目的: 1、熟练掌握Matlab 的矩阵表示功能。

2、熟练掌握Matlab 的矩阵运算功能。

实验平台: Windows XP /Matlab 7.0 实验步骤:1.对matlab 的矩阵表示:(1)用方括号 “[ ]” 括起;(2)矩阵同一行中的元素之间用空格或逗号分隔;(3)矩阵行与行之间用分号分开;(4)直接输入法中,分号可以用回车代替。

2. 利用M 文件建立矩阵:对于比较大且比较复杂的矩阵,可以为它专门建立一个M 文件。

其步骤为:第一步:使用编辑程序输入文件内容。

第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。

第三步:在MATLAB 命令窗口中输入mymatrix ,就会自动建立一个名为AM 的矩阵,可供以后显示和调用。

3.利用公式直接进行赋值计算本金P 以每年n 次,每次i%的增值率(n 与i 的乘积为每年增值额的百分比)增加,当增加到r ×P时所花费的时间T 为:(利用复利计息公式可得到下式))01.01ln(ln )01.01(i n rT i P P r nT +=⇒+=⨯(12,5.0,2===n i r )MATLAB 的表达形式及结果如下: >> r=2;i=0.5;n=12; %变量赋值 >> T=log(r)/(n*log(1+0.01*i)) 计算结果显示为:T = 11.5813即所花费的时间为T=11.5813 年。

若r 在[1,9]变化,i 在[0.5,3.5]变化;我们将MATLAB 的表达式作如下改动,结果如图1。

r=1:0.5:9;例:i=0.5:0.5:3.5; n=12;p=1./(n*log(1+0.01*i)); T=log(r')*p; plot(r,T)xlabel('r') %给x 轴加标题 ylabel('T') %给y 轴加标题 q=ones(1,length(i));text(7*q-0.2,[T(14,1:5)+0.5,T(14,6)-0.1,T(14,7)-0.9],num2str(i'))123456789510152025303540rT0.511.522.5 33.5图1从图1中既可以看到T 随r 的变化规律,而且还能看到i 的不同取值对T —r 曲线的影响(图中的六条曲线分别代表i 的不同取值)。

实验心得:通过本次实验,我们掌握了matlab 的具体表示方法,理解了矩阵的定义,掌握了矩阵的基本率,掌握了几类特殊矩阵的定义与性质。

学习了MATLAB 的基本算术运算有+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)等,能进行熟练的运算。

运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。

教师签名:___________实 验 报 告 二实验名称: Matlab 语言下图形的绘制 实验地点:5栋504 实验时间: 第6周实验人员: 姓名:龚永贵 专业:计算机科学与技术 年级:2008级 实验目的: 1、熟练掌握Matlab 语言下基本二维图形的绘制。

2、熟练掌握Matlab 语言下特殊图形和三维曲面的绘制。

实验平台: Windows XP /Matlab 7.0 实验步骤:1. 在数学建模竞赛中,我们常会遇到这种数据表格问题,如果我们仅凭眼睛观察,很难看到其中的规律,也就更难写出有效的数学表达式从而建立数学模型。

因此可以利用MATLAB 的拟合函数, 即polyfit() 函数,并结合MATLAB 的绘图功能(利用plot()函数),得到直观的表示。

例:在化学反应中,为研究某化合物的浓度随时间的变化规律,测得一组数据如下表: 分析:MATLAB 的表达形式如下:t=[1:16]; %数据输入y=[4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6]; plot(t,y,'o') %画散点图 p=polyfit(t,y,2) %二次多项式拟合 hold onxi=linspace(0,16,160); %在[0,16]等间距取160 个点 yi=polyval(p,xi); %由拟合得到的多项式及xi ,确定yi plot(xi,yi) %画拟合曲线图 执行程序得到图1;2468101214164567891011图1显示的结果为T (分) 1 2 3 4 5 6 7 8 y 4 6.4 8.0 8.4 9.28 9.5 9.7 9.86T (分) 9 10111213141516y1010.2 10.32 10.42 10.5 10.55 10.58 10.6p=-0.0445 1.0711 4.3252p 的值表示二阶拟合得到的多项式为:y= -0.0445t 2+1.0711t+ 4.3252 2. 三维图形绘制假设有一个时间向量t ,对该向量进行下列运算则可以构成三个坐标值向量t z t y t x ===,cos ,sin对于上面的方程可以利用ezplot3()函数或plot3()函数绘制三维曲线。

这里仅列举ezplot3()函数的使用。

MATLAB 的表达形式如下:>> ezplot3('sin(t)','cos(t)','t',[0,6*pi]) 执行程序得到图2:绘制下述曲面:πθθθ20,10),3cos(),(3≤≤≤≤=r r r z 其中 MATLAB 的表达形式如下: nr=12;nth=50; r=linspace(0,1,nr); theta=linspace(0,2*pi,nth); [R,T]=meshgrid(r,theta) x=cos(theta')*r; y=sin(theta')*r;surf(x,y,R.^3.*cos(3*T)) 执行程序得到图3。

-1-0.50.51-1-0.500.515101520xx = sin(t), y = cos(t), z = tyz图2 图3实验心得: 通过本次实验,我掌握Matlab 语言下基本二维图形的绘制和Matlab 语言下特殊图形和三维曲面的绘制。

学到了更多的matlab 函数及其具体的应用。

教师签名:___________实验报告三实验名称: Matlab在动态规划及其路径规划中的应用实验地点:5栋504实验时间: 第12周实验人员: 姓名:龚永贵专业计算机科学与技术年级:2008级实验目的: 1、熟练掌握图的矩阵表示。

2、熟练掌握Matlab语言下有向图的路径寻优。

实验平台: Windows XP /Matlab 7.0实验步骤:1. 划分阶段按照问题的时间或空间特征,把问题分为若干个阶段。

这些阶段必须是有序的或者是可排序的(即无后向性) ,否则,应用无效。

2. 选择状态将问题发展到各个阶段时所处的各种客观情况用不同的状态表示,即称为状态。

状态的选择要满足无后效性和可知性,即状态不仅依赖于状态的转移规律,还依赖于允许决策集合和指标函数结构。

3. 确定决策变量与状态转移方程当过程处于某一阶段的某个状态时,可以做出不同的决策,描述决策的变量称为决策变量。

在决策过程中,由一个状态到另一个状态的演变过程称为状态转移。

状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。

4. 写出动态规划的基本方程动态规划的基本方程一般根据实际问题可分为两种形式,逆序形式和顺序式。

以下是一个具体问题:如图所示的矩形图中找到一条从左下角到右上角的最短路径,图中数字表示边的长度。

只能向右或向上走。

1.【输入文件】第一行两个数,N,M 矩形的点有N行M列。

(0<N,M<1000)接下来N行每行M-1个数描述横向边的长度。

接下来N-1行每行M个数描述纵向边的长度。

边的长度小于10。

2.【输出文件】一个数——最短路径长度。

3.【输入样例】4 53 74 84 6 3 53 6 3 55 46 27 6 3 5 32 8 5 9 48 7 4 3 74.【输出样例】285.【问题分析】因为只能向右或向上走,所以阶段应该是这样的:如果把图再做个改动看看:这样就想是上面说的数塔问题了,只不过数塔问题的数在点上而街道问题的数在边上。

但是并不影响问题的求解我们可以用数塔问题的思路来解这个问题。

设计一个二维状态opt[i,j]表示走到(i,j)的最短路径,显然这个路径只可能是左边或上边走来的,所以决策就是这两个方向上加上经过的边的和中一个较短的路。

于是有下面的状态转移方程:opt[i+1,j]+z[i,j] (j=1)opt[i,j]=opt[i,j-1]+h[i,j] (i=n)min{opt[i+1,j]+z[i,j],opt[i,j-1]+h[i,j]} (0<i<=n,0<j<=m)和数塔问题一样,这个问题也可以做类似的预处理:初始化opt的值是一个很大的数,保证解不会超过他,但要注意不要太的了,太大了可能有225问题。

opt[0,0]=0。

这样就可以把方程整理为:opt[i,j]= min{opt[i+1,j]+z[i,j],opt[i,j-1]+h[i,j]}复杂度:状态数O(N2)*转移代价O(1)=O(N2)这一类问题是很经典的问题。

思考这样一个问题:如果让找出一条最短路径,一条较短路径,且两条路径不重合该怎么办呢?这个问题先留给大家思考,在后面的多维状态中会详细的讲。

6.【源代码】program way;constfin='way.in';fout='way.out';maxn=1010;varh,z,opt:array[0..maxn,0..maxn] of longint;n,m:longint;procedure init;vari,j:longint;beginassign(input,fin);reset(input);assign(output,fout);rewrite(output);read(n,m);for i:=1 ton dofor j:=2 to m doread(h[i,j]);for i:=1 to n-1 dofor j:=1 to m doread(z[i,j]);close(input);end;function min(x,y:longint):longint;beginmin:=y;if x<y then min:=x;end;procedure main;vari,j:longint;beginfillchar(opt,sizeof(opt),$7F);opt[n,0]:=0;for i:=n downto 1 dofor j:=1 to m doopt[i,j]:=min(opt[i+1,j]+z[i,j],opt[i,j-1]+h[i,j]);end;procedure print;beginwriteln(opt[1,m]);close(output);end;begininit;main;print;end.实验心得:通过本次实验,我掌握了熟练掌握图的矩阵表示和Matlab语言下有向图的路径寻优。

相关主题