数学建模-MATLAB-暑期培训资料
- 格式:doc
- 大小:434.00 KB
- 文档页数:16
烟台大学数学建模暑期培训陈传军2010.7.12第一部分MATLAB 入门1.MATLAB作为线性系统的一种分析和仿真工具,是理工科大学生应该掌握的技术工具,它作为一种编程语言和可视化工具,可解决工程、科学计算和数学学科中许多问题. 2.MATLAB建立在向量、数组和矩阵的基础上,使用方便,人机界面直观,输出结果可视化。
3.矩阵是MA TLAB的核心4.MATLAB的进入与运行方式(两种)一、变量与函数1、变量————不需要定义MATLAB中变量的命名规则是:(1)变量名必须是不含空格的单个词;(2)变量名区分大小写;(3)变量名最多不超过19个字符;(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号.特殊变量表2、数学运算符号及标点符号(1)MATLAB的每条命令后,若为逗号或无标点符号,则显示命令的结果;若命令后为分号,则禁止显示结果. (2)“%” 后面所有文字为注释.(3)“...”表示续行.点乘:矩阵与矩阵,向量与向量。
3、数学函数二、数组与矩阵1. 数组1、创建简单的数组x=[a b c d e f ]创建包含指定元素的行向量x=first:last创建从first开始,加1计数,到last结束的行向量x=first:increment:last创建从first开始,加increment计数,last结束的行向量x=linspace(first,last,n)创建从first开始,到last结束,有n个元素的行向量x=logspace(first,last,n)创建从first开始,到last结束,有n个元素的对数分隔行向量.2、数组元素的访问(1)访问一个元素:x(i)表示访问数组x的第i个元素.(2)访问一块元素:x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺损时为1.(3)直接使用元素编址序号. x([a b c d]) 表示提取数组x的第a、b、c、d个元素构成一个新的数组[x(a) x(b) x(c) x(d)].3、数组的方向前面例子中的数组都是一行数列,是行方向分布的. 称之为行向量. 数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示.产生列向量有两种方法:直接产生例c=[1;2;3;4]转置产生例b=[1 2 3 4]; c=b‟说明:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素.4、数组的运算(1)标量-数组运算数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算.设:a=[a1,a2,…,an], c=标量则:a+c=[a1+c,a2+c,…,an+c]a.*c=[a1*c,a2*c,…,an*c]a./c= [a1/c,a2/c,…,an/c](右除)a.\c= [c/a1,c/a2,…,c/an] (左除)a.^c= [a1^c,a2^c,…,an^c]c.^a= [c^a1,c^a2,…,c^an]当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的.设:a=[a1,a2,…,an], b=[b1,b2,…,bn]则:a+b= [a1+b1,a2+b2,…,an+bn]a.*b= [a1*b1,a2*b2,…,an*bn]a./b= [a1/b1,a2/b2,…,an/bn]a.\b=[b1/a1,b2/a2,…,bn/an]a.^b=[a1^b1,a2^b2,…,an^bn]2. 矩阵1、矩阵的建立逗号或空格用于分隔某一行的元素,分号用于区分不同的行. 除了分号,在输入矩阵时,按Enter键也表示开始一新行. 输入矩阵时,严格要求所有行有相同的列.例m=[1 2 3 4 ;5 6 7 8;9 10 11 12]p=[1 1 1 12 2 2 23 3 3 3]特殊矩阵的建立:a=[ ] 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零.b=zeros(m,n) 产生一个m行、n列的零矩阵c=ones(m,n) 产生一个m行、n列的元素全为1的矩阵d=eye(m,n) 产生一个m行、n列的单位矩阵2、矩阵中元素的操作(1)矩阵A的第r行:A(r,:)(2)矩阵A的第r列:A(:,r)(3)依次提取矩阵A的每一列,将A拉伸为一个列向量:A(:)(4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2, j1:j2)(5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:)(6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:A(:, j2:-1:j1)(7)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[ ](8)删除A的第j1~j2列,构成新矩阵:A(:,j1:j2)=[ ](9)将矩阵A和B拼接成新矩阵:[A B];[A;B]3、矩阵的运算同标量-数组运算。
数学建模-MATLAB-暑期培训资料数学建模暑期培训-MATLAB软件庄思发1熟悉软件操作界面1.1命令窗口MATLAB执行命令的主窗口,命令于提示符“>>”之后输入,回车确认执行;1.2命令历史窗口显示用户过去所使用过全部命令,可双击后重新执行,避免重新输入命令,或使用上、下方向键调出修改后再重新执行;1.3工作空间窗口显示当前MATLAB在计算机内存中存在的变量、数据等详细信息,以便用户查看,可删除其中若干个或全部删除;1.4当前工作目录窗口显示用户当前工作时所处在的目录位置,该目录是用户存放及打开文件时MATLAB指向的默认目录,可通过其目录选择器重新指向新用户目录;在该窗口中可以观察到当前目录中所有文件的详细情况,可以直接选定某人文件,通过单击右键运行或打开该文件进行编辑。
2 基本运算2.1 四则运算 + - * / \2.2 乘方、开方 “^” sqrt( )例:32:>>2^3↙ 312:>>2^(1/3) ↙ 2.3 指数函数 exp(x),e :exp(1);;2e :exp(2);2.4 标点符号 逗号(,)输出结果;分号(;)不输出结果2.5 常量与变量➢ 常量圆周率π:pi ;无穷大∞:inf ;等➢ 变量定义变量不必事先声明,MATLAB 会通过变量所获得的值自动识别,变量名必须以字母开头,后可接字母、数字或下划线,不可使用空格与标点符号;注意:变量名区分大、小写;2.6 常用函数:➢ 三角函数sin(x)、cos(x)、asin(x)、acos(x)、tan(x)、atan(x)、cot(x) acot(x). ➢ 指数、对数函数exp(x) log(x) log10(x) log2(x).➢ 四舍五入round(x)➢ 求余mod(x,y):余数符号与y相同;rem(x,y):余数符号与x相同.➢舍入函数fix(x):与零最接近的整数;floor(x):不大于x的整数;ceil(x):不小于x的整数.➢求模(绝对值)abs(x)3数值运算3.1向量运算➢向量(数组)表示元素用中括号括起,元素间用逗号或空格或分号隔开;例:>>a=[2 4 6 7 8]↙>>b=[1;4;7;9]↙➢等差向量冒号生成法初值:步长:终值;例:>>c=1:10;↙>>d=1:0.5:10↙linspace(初值,终值,分段数)例:>>e=linspace(1,10,10)↙>>linspace(0,10,6)↙➢向量(数组)运算向量(数组)与常数的加、减例:>>a=[2 3 5]↙>>a+3,a-2↙向量(数组)与常数的乘、除例:>>a*2,a/3↙向量与向量的加、减法:元素个数必须相同例:>>a=[1 3 5],b=[2,4,6],c=1:4,a+b,a-b,a+c ↙向量点积:dot(a,b);向量维数不超过3例:>>dot(a,b)↙向量叉积:cross(a,b);向量维数不超过3例:>>cross(a,b)↙数组的乘、除:.*;./;例:>>a.*b, a./b ↙数组的乘方:.^例:>>a.^2↙➢ 向量(数组)元素的选取单下标a([ ])例:>>a=1:10;a(7)↙%选取向量a 的第七个元素例:>>a([1 3 7])↙%选取向量a 的第1、3、7个元素 ➢ 向量(数组)排序sort(a):从小到大;例:>>a=rand(1,10),sort(a)↙%产生10个元素的行向量,并进行升序排列➢ 向量(数组)长度或大小的检测length(a);例:>>length(a)↙%显示向量元素个数size(a)例:>>size(a) ↙ %将以向量形式显示矩阵a 的行数与列数 ➢ 向量(数组)求和sum(a)例:>>sum(a)↙%求向量a 的元素总和➢ 向量与多项式表示:n n n a x a x a x p +++=-Λ110)(:],,,[10n a a a p Λ=(降幂排列)例:323)(341+++=x x x x p ,12)(232++=x x x p ,则该多项式在MATLAB 中可如下表示>>p1=[1 3 0 2 3],p2=[0 1 2 0 1]↙多项式相加、减:向量的相加、减(注意补零)例:>>p1+p2,p1-p2↙多项式的积:conv(p1,p2);例:>>conv(p1,p2)↙多项式的除:deconv(p1,p2);[q,r]=deconv(p1,p2)例:>>deconv(p1,p2)↙%只输出商式>>[q,r]=deconv(p1,p2)↙%输出商式与余式3.2 矩阵(多元数组)运算➢ 矩阵(多元数组)表示元素用中括号括起,元素间用逗号或空格分列,用分号分行;例:矩阵⎪⎪⎪⎭⎫ ⎝⎛268493561,在MATLAB 中可如下输入:>>A=[1 6 5;3 9 4;8 6 2]↙➢ 特殊矩阵全1矩阵与全零矩阵:ones(m,n);zeros(m,n);作用:预分配空间 例:>>ones(3)↙%产生3阶全1方阵>>ones(3,4)↙%产生3行4列的全1矩阵随机矩阵:rand(m,n):产生元素介于0,1之间的矩阵例:>>rand(3),rand(3,4)↙%分别产生3阶与3行4列随机矩阵 ➢ 矩阵(多元数组)的运算矩阵(多元数组)与常数的加、减例:>>A+3↙ >>A-3,5-A ↙矩阵(多元数组)与常数的乘、除例:>>A*3↙ >>A/2↙矩阵与矩阵的加、减法:形状大小必须相同例:>>A+B↙ %A,B行、列数相同矩阵与矩阵的乘、除法:*;与/ 或\:遵循矩阵乘除运算法则例:>>A*B,A/B↙ %矩阵B的行列式不为0矩阵的乘方:^:要求为方阵例:>>A^2↙多元数组的乘、除法:.*;.\;./;例:>>C.*3↙>>C./2↙ %矩阵C的每个元素与常数相乘除;多元数组的乘方:.^例:>>C.^3↙ %计算C的第个元素的立方。
➢矩阵(多元数组)元素的选取单下标A(m)或双下标A(i,j) A([1 3],[2 4])➢矩阵(多元数组)的排序sort(A,1):按列方向排序;sort(A,2):按行方向排序➢矩阵(多元数组)大小的检测size(A):显示行数与列数➢矩阵(多元数组)的求和sum(a,1):按列方向求和;sum(a,2):按行方向求和;➢矩阵与线性代数矩阵的行列式:det(A)矩阵的逆:inv(A),其中A的行列式不为0矩阵的转置:A’矩阵的特征值与特征向量:[v,d]=eig(A):线性方程组的解:A\b:A:系数矩阵;b:常数列向量3.3简单数理统计➢算术平均值mean(a)或mean(a,1)或mean(a,2):a是向量或矩阵➢方差var(a):a是向量或矩阵➢标准差std(a) :a是向量或矩阵4符号运算4.1符号变量、表达式的定义➢符号变量的定义>>sym(‘a’)↙>>sym(‘a*x+b’)↙%用sym直接定义符号表达式;>>syms x y z t …↙ %用syms函数定义多个符号变量➢符号表达式输入>>syms x↙>>y=f(x)↙或>>sym(‘f(x)’)4.2符号表达式的操作➢四则运算使用通常运算符:+-*/\➢化简>>simplify(S)➢合并同类项>>collect(S,v)➢因式分解factor(S):S为符号表达式则进行因式分解,S为常数则进行因子分解➢替换求值>>subs(S,’v’,a) %用数值a的值替换表达式中指定变量v;>>subs(S,’v’,’t’)%用新变量t替换表达式中指定变量v。
4.3微积分运算➢极限limit(S,’v’,a,’right’或’left’)➢微分diff(S,’v’,n)➢积分int(S,’v’,lb,ub)4.4方程求解运算➢一般方程(组)solve(‘eq’,’v’)[v1,v2,…,vn]=solve(‘eq1’,’eq2’,…,’eqn’,’v1,v2,…,vn’) ➢线性方程组linsolve(A,b):A为系数矩阵,b为常数列向量➢微分方程(组)y:Dny;'y:Dy;''y:D2y;)(n求通解dsolve(‘deq’,’v’)或dsolve(‘deq1,deq2,…,deqn’,’v1,v2,…,vn’)求特解dsolve(‘deq1,deq2,…,deqn’,’y(x0)=y0,Dy(x0)=y1,D2y(x0)=y2,…’,’v1, v2,…,vn’,)5简单作图5.1二维曲线plot(X,Y)5.2三维曲线plot3(X,Y,Z)5.3多个图形subplot(m,n,k), 1 <= k <= m*n5.4特殊图形➢饼形图pie(Y);pie(Y,[ EXPLODE]), EXPLODE:为要突出显示的数据向量➢条形图bar(Y):默认横坐标为自然数;bar(X,Y):X为自定义横坐标➢曲线拟合polyfit(X,Y,N):多项式拟合,X,Y为原始数据,N为拟合多项式的次数6程序设计6.1M文件介绍脚本文件命令集合文件,批量执行函数文件第一行以字句:function 开头(7.0以上版本取消)6.2控制结构➢顺序结构➢选择结构单个选择if 条件表达式执行语句end两个选择if条件表达式1执行语句1else条件表达式2执行语句2end多个选择if 条件表达式1执行语句1elseif条件表达式2执行语句2elseif 条件表达式2执行语句3…else 条件表达式n执行语句nend➢循环结构for循环适合循环次数确定的情况for 循环变量=初值:步长:终值循环体endwhile循环适合循环次数不确定的情况while 条件表达式循环体end注意:while循环容易出现死循环,使用时一定要注意.若出现死循环,则按键盘:Ctrl+C强制结束程序.提示:与各种编程语言一样,各种结构之间可以互相嵌套使用.7数据拟合与插值7.1多项式最小二乘法拟合polyfit(X,Y,N):X,Y为原始数据,N为拟合的阶数(次数)7.2一维线性插值➢Y0=interp1(X,Y,X0):用于计算插值X0处的函数值,若省略X,则默认为自然数1-length(Y).➢Y0= interp1(X,Y,X0,‘methord’):使用‘methord’参数指定插值方法,‘methord’可选为:'nearest' - 线性最近项插值'linear' - 线性插值'spline' - 3次样条插值'pchip' - 3次Hermite插值'cubic' - 立方插值7.3lagrange插值Y0=Lagrange(X,Y,x0),用法与interp1类似.7.4三次样条插值YY=spline(X,Y,XX):计算插值点向量XX的三次样条插值多项式所对应的值.8 规划问题求解符号说明:f :目标函数中的方程的系数矩阵A :不等式约束中的系数矩阵b :不等式约束中的常数列向量Aeq :等式约束中的系数矩阵beq :等式约束中的常数列向量lb :决策变量的下界ub :决策变量的上界X0:初值(可省)opti :优化选项(可省)8.1 线性规则标准模型:⎪⎩⎪⎨⎧≤≤=≤ub X lb beqAeqX b AX t s Xf ..' min 命令:[X,fval]=linprog(f,A,b,Aeq,beq,lb,ub,X0,opti) 例:求解如下线性规则问题⎪⎪⎩⎪⎪⎨⎧=≥≤+≤++≤+----3,2,1,030234242320..645 min 21321321321i x x x x x x x x x t s x x x i 代码: f=[-5;-4;-6];A=[1 -1 1;3 2 4;3 2 0];b=[20;42;30];Lb=zeros(3,1);[x,fval]=linprog(f,A,b,[],[],lb)8.2 大规模二次规划标准模型:⎪⎩⎪⎨⎧≤≤≤≤+=ub X lb beqAeqX B AX t s X f HX X Q ..''21 min 命令:[X,fval]=quadprog(H,f,A,b,Aeq,beq,lb,ub,X0,opti) 例1:求解如下二次规划问题⎪⎩⎪⎨⎧=≥≤+≤++-+2,1,0353220..4433 min 212112221i x x x x x t s x x x i代码: H=[6 0;0 6];f=[-4 0];A=[1 1;2 3];b=[20;35];lb=[0;0];[X,fval]=quadprog(H,f,A,b,[],[],lb,[])提示:规划问题中的常数与计算无关,因此可忽略.例2:求解如下二次规划问题⎪⎪⎩⎪⎪⎨⎧=≥≤+≤+-≤+---+2,1,032222..6221 min 21212121212221i x x x x x x x t s x x x x x x i 代码: H=[1 -1;-1 2];f=[-2;-6];A=[1 1;-1 2;2 1];b=[2;2;3];lb=zeros(2,1);[X,fval]=quadprog(H,f,A,b,[],[],lb)。