MATLAB数学建模编程资料.doc_第1页
MATLAB数学建模编程资料.doc_第2页
MATLAB数学建模编程资料.doc_第3页
MATLAB数学建模编程资料.doc_第4页
MATLAB数学建模编程资料.doc_第5页
已阅读5页,还剩217页未读 继续免费阅读

下载本文档

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

文档简介

内部资料数学建模编程培训数学建模教练组编写2008年7月215目 录1Matlab软件11.1基本介绍11.1.1软件简介11.1.2工作环境介绍11.1.3数据结构31.1.4Matlab语言的特点31.1.5Matlab中的常量与特殊变量31.1.6特殊符号31.1.7Matlab常用函数41.2矩阵函数71.2.1构造矩阵71.2.2矩阵变换操作91.2.3设置输出格式101.3程序设计入门101.3.1变量101.3.2基本语句111.3.3分支判断语句111.3.4循环语句131.3.5Matlab程序M文件131.3.6函数与子函数141.3.7建立内部函数171.4字符串函数171.4.1函数简介171.4.2例子181.4.3文件处理函数191.4.4读取格式化文件例子201.5二维作图211.5.1基本图形211.6Matlab编程练习题231.6.1练习1231.6.2练习2241.7编程中经常发现的问题242Mathematica快速入门262.1Mathematica简介262.1.1命令输入与运行262.1.2数、表达式和变量282.1.3常用的内部函数302.1.4自定义函数332.1.5常用菜单352.2基本绘图命令、数组与数据拟合382.2.1基本绘图命令382.2.2数组运算422.2.3数据拟合442.3极限、微积分与极值命令452.3.1极限452.3.2微积分452.3.3极值472.3.4LinearProgramming472.3.5ConstrainedMin482.3.6ConstrainedMax482.4方程与方程组求解482.4.1定义方程482.4.2一般方程(组)求解492.4.3微分方程(组)求解502.4.4不等式(组)求解512.5程序设计简介512.5.1Mathematica程序设计基本命令512.5.2Mathematica动画制作简介533递归程序设计553.1计算阶乘553.2组合数学中的Pascal公式553.3汉诺塔问题563.3.1“Hanoi塔”问题563.3.2问题求解563.3.3实现程序563.4案例:商人安全过河问题573.4.1问题分析573.4.2模型建立583.4.3模型求解583.4.4进一步的思考题583.4.5程序运行结果593.4.6递归算法求解程序594优化模型及其求解664.1案例:背包问题664.1.1问题分析664.1.2变量与符号说明664.1.3模型建立664.1.4模型求解及结果674.1.5贪婪法684.1.6贪婪法求解程序684.1.7贪婪法求解结果694.1.8穷举法求解程序694.1.9穷举法程序运行结果714.2案例:高速公路问题714.2.1问题分析724.2.2变量说明724.2.3模型假设724.2.4模型建立724.2.5模型求解734.2.6模型结果及分析734.2.7求解模型的主程序文件734.3随机跳跃法744.3.1随机跳跃法简介744.3.2求解高速公路问题的随机跳跃法程序754.3.3程序运行结果764.4网格法764.4.1网格法简介764.4.2求解高速公路问题的网格法程序774.4.3程序运行结果784.5实验:开放式基金的投资问题785系统模拟805.1概述805.1.1模拟技术805.1.2模拟时间805.1.3模拟语言815.1.4随机数的模拟815.1.5随机数的产生815.1.6模拟均匀分布随机变量的函数825.1.7模拟指数分布随机变量的函数835.1.8模拟正态分布随机变量的函数835.2蒙特卡罗模拟法835.2.1模拟寻求近似圆周率835.2.2用蒙特卡罗法估算定积分845.2.3用蒙特卡罗法估计体积865.3案例:渡口模型875.3.1问题描述875.3.2问题分析875.3.3模型建立875.3.4模拟程序设计885.3.5模型求解结果及分析885.3.6模拟程序885.3.7思考题905.4案例:核反应堆屏蔽层设计问题905.4.1问题描述与分析905.4.2模型假设:915.4.3中子运动的数学描述915.4.4模拟过程915.4.5模拟结果925.4.6模拟程序925.4.7思考题945.5案例:理发店系统研究945.5.1问题分析945.5.2模型假设:945.5.3变量说明:955.5.4模型建立955.5.5系统模拟:955.5.6系统模拟算法设计965.5.7系统模拟程序965.6实验题目1005.6.1实验:赶上火车的概率1005.6.2实验:小狗追人的故事1015.6.3实验:一个修理厂的模拟1045.6.4实验:超市收费服务系统1056编程中常见错误1056.1常见语法错误1056.1.1引用未定义变量1056.1.2下标越界1056.1.3维数不同赋值1066.2逻辑错误1066.2.1变量未初始化1066.2.2变量名误用1066.2.3程序实现错误1076.3如何查找程序中的错误1076.3.1查找错误的一般原则1076.3.2一般查错顺序1077动态规划建模举例1077.1动态规划方法介绍1087.2动态规划求解示例1087.2.1背包问题1087.3例子:运载问题1107.3.1前向算法建立动态规划模型1107.3.2后向算法建立动态规划模型1147.3.3求解方法结果对比分析1167.4应用中面临的问题1178连续系统建模与模型求解选讲1188.1常用Mathematica命令1188.2案例:冷却模型1218.2.1问题分析1218.2.2基本假设1218.2.3变量说明1218.2.4建立模型1218.2.5求解1228.2.6进一步思考1228.3案例:战斗模型1228.3.1问题分析1228.3.2基本假设1238.3.3变量说明1238.3.4建立模型1238.3.5求解模型1238.3.6进一步分析1248.4案例:人口增长预测1258.4.1问题分析1258.4.2基本假设1258.4.3建立模型1258.4.4求解模型1258.4.5进一步分析1268.5案例:狼追击兔子的问题1278.5.1问题重述与分析1278.5.2变量说明1278.5.3模型假设1278.5.4模型建立1288.5.5微分方程数值解1298.5.6系统模拟法求解问题1308.6实验习题1329统计问题建模及求解1349.1常用Mathematica命令1349.2案例:合金的抗拉强度控制1359.3建模习题14110Matlab优化工具箱14210.1简介14210.2一元非线性方程求根14410.3非线性方程组求解14510.4无约束非线性最小化14610.4.1fminbnd求单变量函数最小值点14610.4.2fminunc14810.4.3fminsearch求多变量函数最小值点14810.5有约束非线性最小化fmincon14910.6线性规划linprog15110.7最小二乘和曲线拟合15210.7.1线性最小二乘15210.8非线性曲线拟合lsqcurvefit15311数学建模案例15511.1案例:节水洗衣机15511.1.1问题重述与分析15511.1.2基本假设及说明15511.1.3符号和变量说明15611.1.4建模准备15611.1.5模型建立15711.1.6模型求解15811.1.7思考题16312Lingo数学软件16412.1LINGO快速入门16412.2LINGO中的集16512.3模型的数据部分和初始部分16912.4LINGO函数17212.5LINGO WINDOWS命令18312.6LINGO的命令行命令19912.7综合举例2031 Matlab软件1.1 基本介绍1.1.1 软件简介它已经成为世界上应用最广泛的数学软件之一,尤其在工程计算领域、高校应用最广。该软件以矩阵运算为基础,将计算、可视化、程序设计融合在简单易用的交互式环境中。运用MATLAB可以实现工程计算、数学建模、计算机模拟、算法研究、数据分析与处理、科学与工程绘图、应用软件开发、数值计算、图形、图像处理,支持递归函数,还有多种工具箱(不同领域)。Matlab部分工具箱:控制系统工具箱(Control System Toolbox)小波工具箱(Wavelet Toolbox)模糊逻辑工具箱(Fuzzy Logic Toolbox)神经网络工具箱(Neural Network Toolbox)通信工具箱(Communication Toolbox)图象处理工具箱(Image Processing Toolbox)优化工具箱(Optimization Toolbox)财政金融工具箱(Financial Toolbox)样条工具箱(Spline Toolbox) 统计工具箱(Statistics Toolbox)信号处理工具箱(Signal Processing Toolbox)1.1.2 工作环境介绍1.1.2.1 搜索路径管理(1)命令形式设置:path查看或设置当前的搜索路径用法:path(path,p)path(p,path)举例:path(path,d:mywork)path(d:mcmuse,path)addpath用于添加路径用法:addpath dirname将目录dirname放在原有目录的前面addpath dirname -beginaddpath dirname -end 新增加一个搜索目录,放在原有目录最后addpth dir1 dir2 dir3 增加多个搜索目录,放在搜索目录最前面rmpath用于删除路径用法:rmpath dirname删除搜索目录dirnamermpath dir1 dir2 dir3 删除多个搜索目录pwd查看当前指向目录举例:cd用法:cd dirname 将dirname 作为当前目录cd返回当前目录cd .将当前目录设置其上级目录(有空格)(2)界面设置通过菜单File-Set Path会打开一个窗口,用于添加、删除搜索路径,可以方便的打开、运行MATLAB文件。1.1.2.2 工作环境管理查看工作空间变量菜单方式:通过File选择“Show WorkSpace”菜单条可以显示当前工作环境内的变量。执行如下命令:clear allx=rand(3,1)x = 0.9501 0.2311 0.6068通过open按钮可以打开变量进行编辑。命令方式:who显示当前工作空间的变量名whos显示当前工作空间的每个变量的信息who global显示当前工作空间全局变量名whos global显示当前工作空间全局变量的信息1.1.3 数据结构在MATLAB中基本数据结构是矩阵,而矩阵一般分为:数值矩阵、字符串矩阵。例如:a=1:10a=ones(3,2) %前2行为数值矩阵s=hello world %为1行11列字符串矩阵1.1.4 Matlab语言的特点 语言简介,编程效率高 变量名区分大小写:如:count与Count,num、Num与NUM在MATLAB指的是不同的变量。 丰富的内部函数、外部函数、工具箱 易扩展性1.1.5 Matlab中的常量与特殊变量i,j:虚数单位,如3+2i,2+3j,4j+30,这里的i,j必须是小写字母pi:圆周率3.14159265358979,必须为小写realmax:realmin:inf:无穷大NaN:表示不是一个数值,意思是Not a Numberver或version:版本信息ans:变量,用于存储当前语句未保存的计算结果1.1.6 特殊符号符号说明例子:产生向量,用于循环V=1:3;v=-1:0.5:3;,用于分割命令或元素;命令结束符号,运算结果不显示;用于创建矩阵分行A=1 2 3; 4 5 6,B=A2;例子:for i=1:3, for j=1:4, tmp=j, m(i,j)=i*100+j; endend1.1.7 Matlab常用函数1、 ones产生元素均为一的矩阵常见用法:ones(n)产生nn矩阵ones(m,n)或ones(m n) 产生mn矩阵ones(size(A)产生与A同样维数的矩阵举例:ones(3,5)ans = 1 1 1 1 1 1 1 1 1 11 1 1 1 12、 zeros产生0矩阵,用法与ones相同用法:zeros(n)zeros(m,n)或zeros(m n)zeros(size(A)3、 length返回向量的长度,length(x)等价于max(size(x) 举例:a=ones(1,5)a = 1 1 1 1 1length(a)ans = 5end用法:表示for,while,if等语句的中断符号也可表示最后一个元素的索引,如a(end);还可以用a(end+1)来增加元素举例:a=1 3 2 5a = 1 3 2 5a(end)ans = 5a(end+1)=8a = 1 3 2 5 84、 rand用法:rand产生一个在(0,1)之间的均匀分布的数5、 randn产生正态分布随机数用法:randn产生一个在服从N(0,1)正态分布的随机数randn(n)randn(m,n)举例:randans = 0.9501rand(2,3)ans = 0.2311 0.4860 0.7621 0.6068 0.8913 0.4565randnans = 0.6565randn(3,2)ans = -1.1678 -1.2132 -0.4606 -1.3194 -0.2624 0.93126、 findfind 找出非0元素。也可以查找指定条件的元素,并返回元素所在位置索引。(1)例子x=8 5 6 9 4 7 10;find(x5)输出结果:ans =1 3 4 6 7(2)例子:x=fix(rand(5)*10),r,c=find(x5);r=r,c=c,length(r)-length(find(x5)输出结果:x = 0 3 4 6 4 0 6 4 7 7 1 7 3 4 8 5 6 1 5 2 0 0 6 1 2r = 2 3 4 5 1 2 2 3c = 2 2 2 3 4 4 5 5ans = 0(3)例子:vec= fix(rand(1,10)*100)id= find(vec=60 & vec0时,为主对角线以上,当k0位于主对角线以上,k0位于主对角线以上,k0位于主对角线以下1.2.3 设置输出格式命令:formatformat命令控制MATLAB的显示输出格式,但不影响其计算与存储命令说明例子format short5位定点数format long15位定点数format short e5位浮点数Format long e15位浮点数format short g最佳5位定点数或浮点数format long g最佳15位定点数或浮点数format hex十六进制数format bank精确到分(金融格式)format rat用有理分式表示format +用+表示正数,-表示负数,空格表示为零元素format compact压缩额外的空行format loose显示变量之间插入空行1.3 程序设计入门1.3.1 变量1.3.1.1 命名规则给变量(包括函数)命名时应该遵循一下规则:(1) 必须以字母开头(2) 可由字母、数字、下划线混合(3) 变量名和函数名字符长度不超过31个字符,如果变量前31个字符相等而后面字符不同,则作为同一变量处理1.3.1.2 变量定义:局部变量和全局变量变量并不都需要显示的申明局部变量在程序中可以定义变量。每个函数体内部也可以定义自己的变量,这些变量如果不用global声明,则不能从其他函数和MATLAB工作空间中访问这些变量,这样的变量就是局部变量。全局变量如果要使得其他函数和MATLAB工作空间使用这些变量,则定义为全局变量,用“global”声明。全局变量需要在函数体对变量的赋值语句前说明,整个函数以及所有对函数的递归调用都可以利用全局变量。变量命名建议:变量名尽量反映其含义,如汽车数量用numcar,捕鱼收入用incomefish。局部变量名尽量采用小写,全局变量名尽量大写1.3.2 基本语句赋值语句是Matlab中的基本语句。其结构为:(1)变量名列表表达式例子:a=rand(2,5);a(1,2)=10*rand(2)另外一个语句可以只有表达式,而没有变量名列表和等号,这样改语句的结果将自动赋值给MATLAB内部变量“ans”。例子:rand(1,5)size(a)1.3.3 分支判断语句1.3.3.1 if分支判断语句其通用格式: IF expression statements ELSEIF expression statements ELSE statements END比较操作符相等小于大于小于等于大于等于不等于=.逻辑操作符名称表示符号与(and)&或(or)|非(not)例子:grade=yesinput(情输入你的成绩,0,0 100);if grade=90 sprintf(成绩优异)elseif grade=80 & grade=60 & grade80 sprintf(成绩中等)else sprintf(居然还没有及格)end1.3.3.2 Switch分支判断语句Switch语句通用格式:SWITCH switch_exprCASE case_expr,statement, ., statementCASE case_expr1, case_expr2, case_expr3,.statement, ., statement.OTHERWISE,statement, ., statementEND例子:对输入的成绩进行判别grade=yesinput(请输入成绩,0,0 100);grade=fix(grade/10)switch gradecase 9,10, sprintf(成绩优异)case 8, sprintf(成绩优秀)case 6,7, sprintf(成绩一般)otherwise, sprintf(还没有及格)end1.3.4 循环语句1.3.4.1 FOR语句通用格式:FOR variable = expr, statement, ., statement END例子:构造一个5行4列的矩阵,并赋值for i=1:5 for j=1:4 m(i,j)=i*100+j; endend1.3.4.2 WHILE语句通用格式: WHILE expression statements END例子:将输入的字符串反序str=input(请输入字符串: ,s)tmpstr=str;i=1;len=length(str);while i=n1 , r =(n2-n1+1)*(n1+n2)/2;else r=(n1-n2+1)*(n1+n2)/2; end输入: sum2(1,100)ans = 50501.3.6.3 函数的参数参数的传递规则每个函数有自己专用的工作空间,函数内部变量与MATLAB工作空间的联系只通过输入参数与输出参数来建立。参数的传递属于值传递,即输入参数变量的值在函数内部改变了,而在调用改函数时没有作为返回参数,那么这个输入参数变量的并没有改变。例如:function r=test1(a)%改变输入参数a的值r=;a=999;r=a;运行:a=100;test1(a);a输出:a = 100说明a的值并没有改变,可以这样调用来改变a的值。 a=100;a=test1(a);a输出:a = 9991.3.6.4 子函数函数文件可以包含一个以上的函数,该文件中的第一个函数时主函数,后面定义的所有函数都是子函数,子函数只允许同一个文件中的函数及其它函数访问。函数文件名要与主函数名相同。function s=mymainfunnum=input(输入一个正整数:)sprintf(从1到整数%d的和为%d,num,mysum(num)function s=mysum(num)%求1到num所有整数相加之和s=0;for i=1:num, s=s+i;end私有函数私有函数指位于private目下的函数,它们只能被其上一层目录的函数访问,对于其它目录的函数是部可见的,这就允许私有函数可以与其它目录下的函数同名。MATLAB在执行某个程序或函数时,如果它有私有目录,则先查找私有目录,在根据MATLAB的PATH查找其它目录下的函数。如果建立了私有函数目录,则不要添加到MATLAB的查找路径当中。技巧:1.3.7 建立内部函数命令:inline语法:inline(expr) 根据expr建立内部函数,函数自变量根据表达式自动搜索;inline(expr, arg1, arg2, .) 指定参数,arg1等参数是字符串参数inline(expr, N) 参数为x,P1,P2,PN为例子:g = inline(t2)f = inline(xyz,x,y,z)g = inline(xP1+xP2,2)例子:运行如下f = inline(x2+y3)f = Inline function: f(x,y) = x2+y3f(3,1)ans = 101.4 字符串函数1.4.1 函数简介在MATLAB程序设计中,在处理数据的输入与输出时,字符串函数是比较常用的。表字符串操作函数函数名调用格式功能strcatT=STRCAT(S1,S2,S3,.) 连接字符串strvcatS=STRVCAT(T1,T2,T3,.)垂直连接字符串strcmpSTRCMP(S1,S2)比较字符串,S1与S2相同返回1,不同则返回0,区别大小写strncmpSTRNCMP(S1,S2,N)比较2字符串的前N个字符,区别大小写strcmpiSTRCMPI(S1,S2)比较字符串,忽略大小写strncmpiSTRNCMPI(S1,S2,N) Compare first N characters of strings ignoring case. 不区别大小写findstrK = FINDSTR(S1,S2)寻找较短的字符串在较长字符串中的位置索引strjustT=STRJUST(S)T= STRJUST(S,right)T= STRJUST(S,center)T= STRJUST(S,left)调整字符串strmatchI = STRMATCH(STR,STRS) 在字符串矩阵STRS中寻找以STR开头的字符串strrepS = STRREP(S1,S2,S3) 将S1中包含的字符串S2替换为S3,要区分大小写strtokSTRTOK(S)t,r=STRTOK(S,D)返回字符串中除去开始的空白串的第一个标记字符串upperB = UPPER(A) 将字符串转换成大写lowerB = LOWER(A)将字符串转换成小写字符串与数值转换函数函数名调用格式功能num2strt=num2str(x)t=num2str(x,n)将数值转换成字符串n表示转换精度int2strs = int2str(x)将整数转换成字符串mat2strstr=mat2str(mat)将矩阵mat转换成可以计算的字符串str2doublex=str2double(s)将字符串转换成双精度数str2numx=str2num(s)将字符串矩阵转换成数值矩阵sprintfs,errmsg=sprintf(format,a,)format是格式化字符串,a,.是矩阵参数,errmsg是可选的sscanfa,count,errmsg,nextindx=sscanf(s,format,size)Count,errmsg,nextindex,size是可选的输入、输出参数Size指定所读的元素个数,若没有则整个字符串都读取1.4.2 例子例子1:num2str(randn(2,2),3)输出:ans =-0.433 0.125 -1.67 0.288例子2:mat=magic(3)str=mat2str(mat)matnew=eval(s

温馨提示

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

评论

0/150

提交评论