MATLAB经典数学建模教程

MATLAB经典数学建模教程
MATLAB经典数学建模教程

第 1 节Matlab 基本知识

一、Matlab 的主要功能

Matlab是一种功能非常强大的工程语言,诞生于20世纪70年代,1984年正式推向市场。2002年8月,Matlab6.5开始发布。是进行科学研究和产品开发必不可少的工具。

●数值和符号计算

矩阵(数组)的四则运算(Matrix+Laboratory)、数值差分、导数、积分、求解微分方程、微分方程的优化等

●数字图像、数字信号处理

●工程和科学绘图

●控制系统设计

●财务工程

●建模、仿真功能

二、Matlab 的界面

1.命令窗口(Command Window):

Matlab各种操作命令都是由命令窗口开始,用户可以在命令窗口中输入Matlab命令,实现其相应的功能。此命令窗口主要包括文本的编辑区域和菜单栏(如:四则运算;“;”禁止显示变量的值;↑↓遍历以前的命令)。在命令窗口空白区域单击鼠标右键,打开快捷菜单,各项命令功能如下:

Evaluate Selection :打开所选文本对应的表达式的值。

Open Selection :打开文本所对应的MatLab文件。

Cut :剪切编辑命令。

Paste :粘贴编辑命令。

2. M-文件编辑/调试(Editor/Debugger)窗口

Matlab Editor/Debugger窗口是一个集编辑与调试两种功能于一体的工具环境。

M-文件(函数文件)

●什么是M-文件:它是一种和Dos环境中的批处理文件相似的脚本文件,对于简单问题,

直接输入命令即可,但对于复杂的问题和需要反复使用的则需做成M-文件(Script File)。

●创建M-文件的方法:

Matlab命令窗的File/New/M-file。

在Matlab命令窗口运行edit。

●M-文件的扩展名:*.m

●执行M-文件:F5

●M文件的调试

选择Debug菜单,其各项命令功能如下:

Step :逐步执行程序。

Step in :进入子程序中逐步执行调试程序。

Step out :跳出子程序中逐步执行调试程序。

run:执行M-文件。

Go Until Cursor :执行到光标所在处。

Exit Debug Mode :跳出调试状态。

●函数文件的创建要求:文件名与函数名必须相同,如sin(x)必有sin.m函数文件存在。

要求实参和形参位置一一对应。形参在工作空间中不会存在。

可以编写递归函数,可以嵌套其他函数。

可以用return命令返回,也可以执行到终点返回

3.工作空间(Workspace)窗口:

显示目前保存在内存中的Matlab的数学结构、字节数、变量名以及类型窗口。

保存变量:File菜单\Save Workspace as 命令行:save 文件名

装入变量:File菜单\Import Data 命令行:Load 文件名

4.现在目录窗口(Current Directory)

5.命令历史窗口(Command History ):提供先前使用过的函数,可以复制或者再次执行这些命令。

Matlab帮助系统

Matlab在命令窗口提供了可以获得帮助的命令,用户可以很方便的获得帮助信息。例如:在窗口中输入“help fft”就可以获得函数“fft”的信息。常用的帮助信息有help ,demo ,doc ,who ,whos ,what ,which ,lookfor ,helpbrowser ,helpdesk ,exit ,web 等。

三、关于变量

变量命名规则:

●变量名是不包含空格的单个词

●变量名区分大小写

●变量名必须以字母开头的字母、数字、下划线的组合,最多19个字符。

●Matlab提供的标准函数名均以小写字母开头

特殊变量名:

●ans 缺省变量名

●pi 圆周率

●i,j 虚数单位

●eps 无穷小

●inf ,Inf 无穷大

●realmax 最大正实数

●realmin 最小正实数

清除变量的值

●clear

●clear 变量名1 变量名2

显示驻留内存的变量名

●who

●whos

第 2 节Matlab编程

一、矩阵(数组)的输入

1、直接输入

直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;多维矩阵用多重方括弧。可建立复数矩阵

如:Null_M = [ ] %生成一个空矩阵

可建立复数矩阵

R=[1,2,3;4,5,6]

I=[7,8,9;10,11,12]

Z=R+I*j

2. 由M文件方式建立,今后使用键入M文件名即可建立相应矩阵

2、利用函数输入

“:”表达式,产生等差行向量start:step:end 或start:end(step=1)如:t=1:20

产生等距输入:linspace(a,b,n)将〔a,b〕区间分成n-1个等距小区间

产生随机排列:randperm(n) 产生1~n之间整数的随机排列

3、特殊矩阵输入

以下各函数同理具有该类型。

ones(a,b)元素全为1的a×b维矩阵

eye(a,b)对角线上的元素为1的a×b维矩阵

rand(a,b)产生a×b维均匀分布的随机矩阵,其元素在(0,1)内

rand 无变量输入时只产生一个随机数

randn(a,b)产生a×b维正态分布的随机矩阵

4.矩阵的转置和逆矩阵

?X的转置:X’( 图像顺时针旋转90°,并水平镜像)

如:a=imread('D:\2-1.bmp');

b=a';

subplot(1,2,1),subimage(a),subplot(1,2,2),subimage(b)

?X的逆矩阵inv(X)

二、矩阵元素的访问及其大小的确定

访问第n个元素:X(n)(n>=1)

访问多个元素:X ([n1,n2,n3……]) 或X(1:10)

确定元素的个数:numel(X)

确定矩阵的大小:[m,n,l]=size(X)

三、矩阵的算数运算

●数与矩阵的运算:m等价于m.

m+A : m与A中各元素相加

m-A : m与A中各元素相减

m×A : m与A中各元素相乘

m. /A : m除以A中各元素(没有m/A)

m \ A : A中各元素除以m

矩阵与矩阵的运算

A+B: A、B对应元素相加

A-B: A、B对应元素相减

A×B: A、B矩阵按线性代数中矩阵乘法运算进行相乘(注意维数匹配)

A.*B: A、B对应元素相乘(注意维数相同)

A / B: A除以B矩阵(?A×B-1)(注意维数匹配)

A./B: A除以B中各元素

A \ B: B除以A矩阵(?A-1×B)(注意维数匹配)

A.\B: B除以A中各元素

A^m:相当于矩阵A×矩阵A×矩阵A…….(m为小数即是矩阵的开方运算)(注意维数匹配)

A.^m:矩阵A中各元素的m次方

A.^B:矩阵A中各元素的进行B中对应元素次方(注意维数相同)

四、关系运算

<、<=、>、>=、= =、~ = 六种关系运算符。关系成立结果为1,否则为0。

五、逻辑运算

设矩阵A和B都是m×n矩阵或其中之一为标量,在MATLAB中定义了如下的逻辑运算:&、|、~、xor(真为1,假为0)

(1)矩阵的与运算

格式A&B或and(A, B)

说明A与B对应元素进行与运算,若两个数均非0,则结果元素的值为1,否则为0。

(2)或运算

格式A|B或or(A, B)

说明A与B对应元素进行或运算,若两个数均为0,则结果元素的值为0,否则为1。

(3)非运算

格式~A或not (A)

说明若A的元素为0,则结果元素为1,否则为0。

(4)异或运算

格式xor (A,B)

说明A与B对应元素进行异或运算,若相应的两个数中一个为0,一个非0,则结果为0,否则为1。

六、集合运算

1.两个集合的交集intersect

2.检测集合中的元素ismember

3.两集合的差setdiff

4.两个集合交集的非(异或)函数setxor

5.两集合的并集union

6.取集合的单值元素 unique

七、MatLab 的控制流

由各种语句构成 语句后面加“;”号,不显示运算结果 %开头表示是注释语句 赋值语句 变量=表达式

表达式 (相当于将值付给ans 变量)

演示(三)

for 循环结构

【例】一个简单的for 循环示例。

for i=1:10; %i 依次取1,2,…10,.

x(i)=i; %对每个i 值,重复执行由该指令构成的循环体, end;

x

%要求显示运行后数组x 的值。

x =

1 2 3 4 5 6 7 8 9 10

while 循环结构

【例】Fibonacci 数组的元素满足Fibonacci 规则:12+++=k k k a a a ,),2,1( =k ;且

121==a a 。现要求计算出该数组中第一个大于10000的元素。

a(1)=1;a(2)=1;i=2; while a(i)<=10000 a(i+1)=a(i-1)+a(i); %当现有的元素仍小于10000时,求解下一个元素。

i=i+1;

end; i,a(i), i =

21 ans =

10946

if-else-end 分支结构

【例1】一个简单的分支结构。

cost=10;number=12; if number>8

sums=number*0.95*cost; end,sums sums = 114.0000

【例2】用for 循环指令来寻求Fibonacc 数组中第一个大于10000的元素。

n=100;a=ones(1,n);

for i=3:n

a(i)=a(i-1)+a(i-2);

if a(i)>=10000

a(i),

break; %跳出所在的一级循环。

end;

end,i

ans =

10946

i =

21

switch-case结构

【例】学生的成绩管理,演示switch结构的应用。

clear;

%划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。

for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];

Name={'Jack','Marry','Peter','Rose','Tom'}; %元胞数组

Mark={72,83,56,94,100};Rank=cell(1,5);

%创建一个含5个元素的构架数组S,它有三个域。

S=struct('Name',Name,'Marks',Mark,'Rank',Rank);

%根据学生的分数,求出相应的等级。

for i=1:5

switch S(i).Marks

case 100 %得分为100时

S(i).Rank='满分'; %列为'满分'等级

case a %得分在90和99之间

S(i).Rank=' 优秀'; %列为'优秀'等级

case b %得分在80和89之间

S(i).Rank=' 良好'; %列为'良好'等级

case c %得分在60和79之间

S(i).Rank=' 及格'; %列为'及格'等级

otherwise %得分低于60

S(i).Rank='不及格'; %列为'不及格'等级

end

end

%将学生姓名,得分,登记等信息打印出来。

disp(['学生姓名 ',' 得分 ',' 等级']);disp(' ')

for i=1:5;

disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]); end;

学生姓名得分等级

Jack 72 及格

Marry 83 良好

Peter 56 不及格

Rose 94 优秀

Tom 100 满分

try-catch结构

【例】try-catch结构应用实例。

clear,N=4;A=magic(3); %设置3行3列矩阵A。

try

A_N=A(N,:), %取A的第N行元素

catch

A_end=A(end,:), %如果取A(N,:)出错,则改取A的最后一行。end

lasterr %显示出错原因

A_end =

4 9 2

ans =

Index exceeds matrix dimensions.

第二章 符号数学工具(Symbolic Math Toolbox )

第 1 节 符号表达式

● 符号表达式是代表数字、函数、算子和变量的MATLAB 字符串,或字符串数组。不要求变量有预先确定的值,符号方程式是含有等号的符号表达式。如表2.1所列。

表2.1

符号表达式

在MATLAB 中的表示

12x n

' 1/(2*x^n) '

1

2y x

=

y= ' 1/sqrt(2*x) ' cos()sin()x x 22-

' cos(x^2)-sin(2*x) ' M a b c d =????

?

?

M=sym( ' [a ,b ;c ,d] ' )

x x

dx a

b

3

1-?

f=int( ' x^3/sqrt(1-x) ' , ' a ' , ' b ' )

注意:加单引号’’表示是一个符号表达式而不是数字表达式。

● 符号函数:让用户操作上述符号表达式的方法和函数,比如:

>> diff( 'cos(x)' ) % differentiate cos(x) with respect to x ans= -sin(x)

>> M=sym( '[a ,b ;c ,d] ') % create a symbolic matrix M M= [a ,b] [c ,d]

注意:1.建立符号数组时,最好用上函数sym

2.许多符号函数可以自动将字符转变为符号表达式。例如diff cos(x) 也可以, >> diff x^2+3*x+5 % the argument is equivalent to ' x^2+3*x+5 '

● 符号变量是符号表达式中的变量,如:’x+3*y+z ’中的x,y,z 。

● 独立变量是当符号表达式中含有多于一个的变量时,只有一个变量是独立变量。缺省的独立变量是x ,如果没有x ,则选择最靠近x 的作为独立变量。如表达式 ' 1/(5+cos(x)) ' 中

是' x ' ;在' 3*y+z ' 中是' y ' ;在' a+sin(t) ' 是' t ' ,而表达式' sin(pi/4)-cos(3/5) ' 是一个符号常数无符号变量。可利用函数symvar询问MATLAB在符号表达式中哪一个变量它认为是独立变量(系统找不到一个独立变量,便假定无独立变量并返回x)。

>> symvar( ' a*x+y*) % find the default symbolic variable

ans=

x

>> symvar( ' a*t+s/(u+3) ' ) % u is the closest to ' x '

ans=

u

>> symvar( ' sin(omega) ' ) % ' omega ' is not a singlee character。

ans=

x

>> symvar( ' 3*i+4*j ' ) % i and j are equel to sqrt(-1)

ans=

x

指定独立变量:

>> diff( ' x^n ' ) % differentiate with respect to the default variable ' x '

ans=

x^n*n/x

>> diff( ' x^n ' ,' n ' ) % differentiate x^n with respect to ' n '

ans=

x^n*log(x)

>> diff( ' sin(omega) ' ) % differentiate using the default variables (x)

ans=

>> diff( ' sin(omega) ' ,' omega ' ) % specify the independent variable

ans=

cos(omega)

第 2 节符号表达式运算(目的:更方便的构造符号表达式)

标准代数运算:

symadd、symsub、symlnul、symdiv:分别为加、减、乘、除两个表达式

sympow:将一个表达式上升为另一个表达式的幂次

例如:给定两个函数

2357

=+-=-+

f x x

g x x

22

>> f= ' 2*x^2+3*x-5 ' % define the symbolic expression

f=

2*x^2+3*x-5

>> g= ' x^2-x+7 '

g=

x^2-x+7

>> symadd(f,g) % find an expression for f+g

ans=

3*x^2+2*x+2

>> symsub(f,g) % find an expression for f-g

ans=

x^2+4*x-12

>> symmul(f,g) % find an expression for f*g

ans=

(2*x^2+3*x-5)*(x^2-x+7)

>> symdiv(f,g) % find an expression for f/g

ans=

(2*x^2+3*x-5)/(x^2-x+7)

>> sympow(f,'3*x') % find an expression for f3*

ans =

(2*x^2+3*x-5)^(3*x)

联接运算:

symop:取由逗号隔开的、多至16个参量。各个参量可为符号表达式、数值或算子(' + '、' - '、'*'、' / '、' ^ '、' ( '或' ) '),然后symop可将参量联接起来,返回最后所得的表达式.

>> f= ' cos(x) ' % create an expression

f=

cos(x)

>> g= ' sin(2*x) ' % create another expression

g=

sin(2*x)

>> symop(f,'/ ',g,'+',3) % combine them

ans=

cos(x)/sin(2*x)+3

高级运算:

compose:把f(x)和g(x)复合成f(g(x));

finverse: 求函数的逆函数;

symsum:求表达式的序列和。

compose

给定表达式

f

x g x h

u

=

+==

+

1 1

1

1

22

sin()k=sin(v)

>> syms x y u v

f = 1/(1 + x^2);

g = sin(y);

h = 1/(1+u^2); k= sin(v);

% create the four expression

>> compose(f,g) % find an expression for f(g(x))

ans=

1/(1+sin(y)^2)

>> compose(g,f) % find an expression for g(f(x))

ans=

sin(1/(1+x^2))

用于含有不同独立变量的函数表达式:

>> compose(h,k,'u','v') % given h(u),k(v),find(k(v))

compose(h,k) % 结果一样

ans=

1/(1+sin(v)^2)

finverse

表达式譬如f(x)的函数逆g(x),满足g(f(x))=x。例如,e x的函数逆是ln(x),因为ln(e x)=x。

sin(x)的函数逆是arcsin(x),函数

1

tan()x

的函数逆是arcsin()

1

x

。函数finverse返回表达式的

函数逆。如果解不是唯一就给出警告。

>> syms x a b c d z

>> finverse(1/x) % the inverse of 1/x is 1/x since ' 1/(1/x)=x '

ans=

1/x

>> finverse(x^2 ) % g(x^2)=x has more than one solution

Warning:finverse(x^2) is not unique

ans=

x^(1/2)

>> finverse(a*x+b ) % find the solution to ' g(f(x))=x '

ans=

-(b-x)/a

>> finverse( a*b+c*d-a*z ,' a ' ) % find the solution to ' g(f(a))=a '

ans=

-(c*d-a)/(b-z)

symsum

求表达式的序列和有四种形式: symsum(f)返回

f x x ()0

1-∑;

symsum(f ,' s ' )返回

f s s ()01

-∑,

symsun(f ,a ,b)返回

f x a

b

()∑;

symsun(f , ' s ' ,a ,b)返回

f s a

b

()∑。

1. x x 2

1

-∑,它应返回: x x x

32326-+。

>> syms n x %一定要定义符号变量,即使是x

>> symsum(x^2) ans= 1/3*x^3-1/2* x^2+1/6*x

2. ()2121

n n

-∑,它应返回

n n n ()()

21213

-+。

>> symsum((2*n-1)^2,1,n) ans= 11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3

3.1

212

1()

n -∞

∑,返回应是π28。

>> syms n

>> symsum( 1/(2*n-1)^2,1,inf) ans= 1/8*pi^2

变量替换:

subs 将某个符号变量用另一个符号变量来表示。

格式:subs (f ,old ,new )如:

>> f= ' a*x^2+b*x+c ' % create a function f(x)

f=

a*x^2+b*x+c

>> subs(f,'x','s') % substitute ' s ' for ' x ' in the

expression f

ans=

a*s^2+b*s+c

>> subs(f,'a','alpha') % substitute ' alpha ' for ' a ' in f

ans=

alpha*x^2+b*x+c

求符号表达式的函数值

为了得到数字,需要使用函数eval 来转换字符串。

>> syms x

>> f=symsum(x^2)

>> x=2

>> eval(f)

第 3 节微积分(Calculus)函数

微分和积分广泛地用在许多工程学科,这部分的主要函数有:

diff():Differentiate.(微分)

Int():Integrate(积分)

Jacobian():Jacobian matrix(雅可比行列式)

Limit():Limit of an expression.(极限)

Symsum():Summation of series(序列和)

Taylor():Taylor series expansion(泰勒级数)

微分和差分:diff

>> f= ' a*x^3+x^2-b*x-c ' % define a symbolic expression

f=

a*x^3+x^2-b*x-c

>> diff(f) % differentiate with respect to the default variable x

ans=

3*a*x^2+2*x-b

>> diff(f,'a ') % differentiate with respect to a

ans=

x^3

>> diff(f,2) % differentiate twice with respect to x

ans=

6*a*x+2

>> diff(f,' a ',2) % differentiate twice with respect to a

ans=

>> m=[(1:8).^2)] % create a vector

M=

1 4 9 16 25 36 49 64

>> diff(M) % find the differences between elements

ans=

3 5 7 9 11 13 15

如果diff的表达式或可变参量是数值,MATLAB就非常巧妙地计算其数值差分;如果参量是符号字符串或变量,MATLAB就对其表达式进行微分。

积分int:

格式:int(f),其中f是一符号表达式,它力图求出另一符号表达式F使diff(F)=f。

注意:积分或逆求导不一定是以封闭形式存在,或存在但软件也许找不到,或者软件可明显地求解,但超过内存或时间限制。当MATLAB不能找到逆导数时,它将返回未经计算的命令。

>> int( ' log(x)/exp(x^2) ' ) % attempt to integrate

ans=

log(x)/exp(x^2)

积分函数的多种形式:

int(f):相对于缺省的独立变量x求逆导数

int(f,' s '):相对于符号变量s积分

int(f,a,b)和int(f,' s ',a,b):a,b是数值,求解符号表达式从a到b的定积分

int(f,' m ' ,' n ')和形式int(f,' s ',' m ',' n '):其中m,n是符号变量,求解符号表达式从m到n的定积分。

>> f=' sin(s+2*x) ' % crate a symbolic function

f=

sin(s+2*x)

>> int(f) % integrate with respect to x

ans=

-1/2*cos(s+2*x)

>> int(f,' s ') % integrate with respect to s

ans=

-cos(s+2*x)

>> int(f,pi/2,pi) % integrate with respect to x from π/2 toπ

ans=

-cos(s)

>> int(f,' s ',pi/2,pi) % integrate with respect to s from π/2 to π

ans=

2*cos(x)^2-1-2*sin(x)*cos(x)

>> int(f,' m ',' n ') % integrate with respect to x from m to n

ans=

-1/2*cos(s+2*n)+1/2*cos(s+2*m)

diff 和int 均可以对符号数组的每一个元素进行运算。

>> F=sym( '[a*x,b*x^2;c*x^3,d*s] ' ) % create a symbolic array

F =

[ a*x, b*x^2]

[ c*x^3, d*s]

>> int(F) % ubtegrate the array elements with respect

to x

ans=

[1/2*a*x^2,1/3*b*x^3]

[1/4*c*x^4,d*s*x]

第 4 节数字信号处理常用Matlab函数简介

一、典型离散信号表示方法

1.单位冲击序列δ(n)

δ(n)可以用zero函数来实现:

x=zeros(1,N);

x(1)=1;

2.单位阶跃序列u(n)

可以用ones函数来实现

X=ones(1,N);

3.正弦序列

n=0:N-1;

x=A*sin(2*pi*f*n*Ts);

4.指数序列

N=1:N;

X=a.*^n;

5.复指数序列

n=0:N-1;

x=exp(j*w*n);

6.随机序列

Rand(1,N) :产生[0,1]上的均匀分布的随机序列;

Rand(1,N) :产生均值为0,方差为1的高斯随机序列,即白噪声序列。

二、滤波器分析与实现

滤波器分析与实现常用函数

abs 求绝对值

angle 求相角

conv 求卷积

conv2 求二维卷积

deconv 翻卷积

f1 filt 重叠相加法fft滤波器实现

filter 直接滤波器实现

filter2 二位数字滤波器

filtfilt 零相位数字滤波器

filtic Filter初始条件选择

freqs 模拟滤波器频率响应

freqspace 画出频率响应曲线

freqz 数字滤波器频率响应

freqzplot 画出频率响应曲线

gGrpdelay 平均滤波延迟

latcfilt 格型滤波实现

impz 数字滤波器中的单位冲击响应

medfilt1一维中值滤波

sosfilt 二次分式滤波器实现

zplane 离散系统零、极点图

upfirdn 上抽样

unwrap 去除相位

1.abs

y=abs(x) 计算x的绝对值,当x为复数时,其算其模值。当x为字符串时,计算各个字符的ASCII码。

2. angle

φ= angle(h) 计算复矢量或者复矩阵的相角(以弧度为单位),相角介于-л~л之间。3.conv

c=conv(a,b) 对序列a,b进行卷积运算。

4.filter

y=filter(b,a,x)计算输入信号x的滤波器输出,向量a,b分别是所采用的滤波器的分子系数向量和滤波器的分母向量。

[y,zf]=filter(b,a,x,zi) 参数zi指定滤波器的初始条件,其大小为

zi=max(length(a),length(b))-1

y=filter(b,a,x,zi,dim) dim指定滤波器的维数。'zi'=[]或0表示空集。

5. impz

[h,t]=impz(b,a)

返回参数h是冲击相应的数值;返回t是冲击相应的抽样时间间隔。

[h,t]=impz(b,a,N)

N用来制定冲激信号长度。如果N是一个整数向量,只返回N元素所对应时刻的抽样数值的冲击结果。N为[],表示不制定冲激信号的长度,其长度与滤波器结构保持一致。

[h,t]=impz(b,a,N,fs)

Fs用来指定冲击信号的抽样频率,默认值是1。

三、信号变换

常用变换函数

czt Chirp z变换

dct 离散余弦变换

dftmtx 离散傅里叶变换

fft 一维快速傅里叶变换

fft2 二维快速傅里叶变换

fftshift 重新排列fft输出

Hilbert Hilbert变换

idct 离散余弦反变换

ifft 一维快速傅里叶反变换

ifft2 二维快速傅里叶反变换

1.fft

Y=fft(X)

若X是向量,则采用傅里叶变换求解X离散傅里叶变换;若X是矩阵,则计算该矩阵每一列的离散傅里叶变换。

Y=fft(X,N)

N是进行离散傅里叶变换的X的数据长度,可以通过对X进行补或截取来实现。

Y=fft(X,[],dim)

在参数dim指定的维上进行傅里叶变换。X是矩阵时,dim用来指变换的实施方向:dim=1,表明变换按列进行;dim=2,表明变换按行进行。

第 5 节方程求解

一、求解单个变量的代数方程:利用solve函数

1.没有=号的表达式,用solve将其置成等于0。

>> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the quadratic

eqution

ans=

[1/2/a*(-b+(b^2-4*a*c)^1/2)]

[1/2/a*(-b-(b^2-4*a*c)^1/2)]

注:方程有2个解。

2.对其他非缺省变量求解,在solve 中指定出该变量。

>> solve( ' a*x^2+b*x+c ' ,' b ' ) % solve for b

ans=

-(a*x^2+c)/x

3.对带有等号的方程求解。

>> f=solve( ' cos(x)=sin(x) ' ) % solve for x f= 1/4*pi

>> t=solve( ' tan(2*x)=sin(x) ' ) t =

[ 0] [ pi] [ atan(1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))] [ atan(-1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))] [ atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))+pi] [ -atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))-pi]

二、单个常微分方程求解:利用 dsovle 函数

dsovle 函数的句法:用字母D 来表示求微分,D2,D3等等表示二阶、三阶微分,并以此来设定方程。任何D 后所跟的字母为因变量。方程d y dx 22/=0用符号表达式D2y=0来表示。独立变量可以指定或由symvar 规则选定为缺省。

例1,求一阶方程dy/dx =1+y 2的解,其通解为:

>> dsolve( ' Dy=1+y^2 ' ) % find the general solution

ans= tan(t+C1) %C1是积分常数

给定初值y(0)=1的方程的解:

>> dsolve('Dy=1+y^2 ',' y(0)=1 ') % add an initial condition y= tan(t+1/4*pi) 指定独立变量:

>> dsolve(' Dy=1+y^2 ',' y(0)=1 ',' v ') % find solution to dy/dv ans= tan(v+1/4*pi)

例2:求二阶微分方程的解,方程有两个初始条件:

d y

dx

22

=cos(2x)-y dy dx (0)=0 y(0)=1

>> y=dsolve('D2y=cos(2*x)-y ',' Dy(0)=0 ',' y(0)=1 ','x') y=

(1/6*cos(3*x)-1/2*cos(x))*cos(x)+(1/2*sin(x)+1/6*sin(3*x))*sin(x)+4/3*cos(x)

>> y=simple(y) % y looks like it can be simplified

y= -1/3*cos(2*x)+4/3*cos(x)

例3:求解下列形式的微分方程

d y dx 22

-dy

dx

-y=0 通解为: >> y=dsolve( 'D2y-2*Dy-3*y=0 ','x')

y =

C1*exp(-x)+C2*exp(3*x)

加上初始条件:y(0)=0和y(1)=1可得到:

>> y=dsolve( 'D2y-2*Dy-3*y=0 ','y(0)=0','y(1)=1','x') y= 1/(exp(-1)-exp(3))*exp(-x)-1/(exp(-1)-exp(3))*exp(3*x)

>> y=simple(y) % this looks like a candidate for simplification y= (exp(-x)-exp(3*x))/(exp(-1)-exp(3)) >> pretty(y) % pretty it up exp(-x)-exp(3 x) - --------------------- exp(3) -exp(-1)

小结

下列各表综合了符号数学工具箱的特性:

符号表达式的运算

eval 符号到数值的转换 Pretty 显示悦目的符号输出 Subs 替代子表达式

Sym 建立符号矩阵或表达式 Symadd 符号加法 Symdiv 符号除法 Symmul 符号乘法 Symop 符号运算

Sympow 符号表达式的幂运算 Symrat 有理近似 Symsub 符号减法 Symvar

求符号变量

符号表达式的简化

Collect 合并同类项 Expand

展开

Factor 因式

Simple 求解最简形式

Simplify 简化

symsum 和级数

符号多项式

Charpoly 特征多项式

Horner 嵌套多项式表示

Numden 分子或分母的提取

poly2sym 多项式向量到符号的转换

sym2poly 符号到多项式向量的转换

符号微积分

Diff 微分

Int 积分

Jordan 约当标准形

Taylor 泰勒级数展开

符号可变精度算术

Digits 设置可变精度

Vpa 可变精度计算

求解符号方程

Compose 函数的复合

Dsolve 微分方程的求解

Finverse 函数逆

Linsolve 齐次线性方程组的求解

Solve 代数方程的求解

符号线性代数

Charploy 特征多项式

Determ 矩阵行列式的值

Eigensys 特征值和特征向量

Inverse 矩阵逆

Jordan 约当标准形

Linsolve 齐次线性方程组的解

Transpose 矩阵的转置

离散信号的表示法

第三章函数绘图

数据图形能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。

数学建模(Matlab)

数学规划作业(MatLab) 1、某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货40台、60台、80台.每季度的生产费用为()2 =+ f x ax bx (单位:元), 其中x是该季度生产的台数.若交货后有剩余,可用于下季度交货,但需支付存储费,每台每季度c元.已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a=50、b=0.2、c=4,问:工厂应如何安排生产计划,才能既满足合同又使总费用最低.讨论a、b、c变化对计划的影响,并作出合理的解释. 解: 问题的分析和假设: 分析: 问题的关键在于由于工厂的生产能力足以满足每个季度用户的需求,但是为了使总费用最少,那么利用每个季度生产费用的不同,可用利用上个生产费用低的季度多生产来为下个季度进行准备,前提是本月节省下的费用减去总的发动机存储费用还有剩余,这样生产才有价值,才可能满足合同的同时又能使总费用最低。基本假设:1工厂的生产能力不受外界环境因素影响。2为使总费用最低,又能满足合同要求,各个季度之间的生产数量之间是有联系的。3第一季度开始时无存货。4工厂每季度的生关费用与本季度生产的发动机台数有关。5生产要按定单的数量来进行,生产的数量应和订单的数量相同,以避免生产出无用的机器。 符号规定:X1―――第一季度生产发动机的数量 X2―――第二季度生产发动机的数量

X3―――第三季度生产发动机的数量 建模: 1.三个季度发动机的总的生产量为180台。 2.每个季度的生产量和库存机器的数量之和要大于等于本季度的交货数量。 3.每个月的生产数量要符合工厂的生产能力。 4.将实际问题转化为非线性规划问题,建立非线性规划模型 目标函数 min f(x)=50(x1+x2+x3)+0.2(x12+x22+x32)+4(x1-40)+4(x1+x2-100) 整理,得 min f(x)=50(x1+x2+x3)+0.2(x12+x22+x32)+4(2x1+x2-140) 约束函数s.t x1+x2≥100; x1+x2+x3=180; 40≤x1≤100; 0≤x2≤100; 0≤x3≤100; 求解的Matlab程序代码: M-文件 fun.m: function f=fun (x); f=50*(x(1)+x(2)+x(3))+0.2*(x(1)^2+x(2)^2+x(3)^2)+4*(2*x(1) +x(2)-140)主程序fxxgh.m:

MATLAB及在数学建模中的应用

第1讲MATLAB及 在数学建模中的应用 ? MatLab简介及基本运算?常用计算方法 ?应用实例

一、 MatLab简介及基本运算 1.1 MatLab简介 1.2 MatLab界面 1.3 MatLab基本数学运算 1.4 MatLab绘图

1.1 MatLab简介?MATLAB名字由MATrix和 LABoratory 两词组成。20世纪七十年代后期, 美国新墨西哥大学计算机科学系主任Cleve Moler教授为减轻学生编程负担,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。

?经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。

?1997年春,MATLAB5.0版问世,紧接着是5.1、5.2、5.3、6.0、6.1、6.5、7.0版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。 ?20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。

?MATLAB具有用法简易、可灵活运用、程式结构强又兼具延展性。以下为其几个特色: ①可靠的数值运算和符号计算。在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函 数可使用。 ②强大的绘图功能。 MATLAB可以绘制各种图形,包括二维和三维图形。 ③简单易学的语言体系。 ④为数众多的应用工具箱。

数学建模matlab例题参考及练习

数学实验与数学建模 实验报告 学院: 专业班级: 姓名: 学号: 完成时间:年月日

承 诺 书 本人承诺所呈交的数学实验与数学建模作业都是本人通过学习自行进行编程独立完成,所有结果都通过上机验证,无转载或抄袭他人,也未经他人转载或抄袭。若承诺不实,本人愿意承担一切责任。 承诺人: 年 月 日 数学实验学习体会 (每个人必须要写字数1200字以上,占总成绩的20%) 练习1 一元函数的图形 1. 画出x y arcsin =的图象. 2. 画出x y sec =在],0[π之间的图象. 3. 在同一坐标系中画出x y =,2x y =,3 x y = ,3x y =,x y =的图象. 4. 画出3 2 3 2)1()1()(x x x f + +-=的图象,并根据图象特点指出函数)(x f 的奇偶性. 5. 画出)2ln(1++=x y 及其反函数的图象. 6. 画出3 21+=x y 及其反函数的图象.

练习2 函数极限 1.计算下列函数的极限. (1) x x x 4 cos 1 2 sin 1 lim 4 - + π → . 程序: sym x; f=(1+sin(2*x))/(1-cos(4*x)); limit(f,x,pi/4) 运行结果: lx21 ans = 1 (2). 程序: sym x; f=(1+cos(x))^(3*sec(x)); limit(f,x,pi/2) 运行结果: lx22 ans = exp(3) (3) 2 2 ) 2 ( sin ln lim x x x - π π → . 程序: sym x; f=log(sin(x))/(pi-2*x)^2; limit(f,x,pi/2) 运行结果: lx23 ans = -1/8 (4) 2 1 2 lim x x e x →. 程序: x x x sec 3 2 ) cos 1( lim+ π →

数学建模章绍辉版第四章作业

第四章作业 第二题: 针对严重的交通情况,国家质量监督检验检疫局发布的国家标准,车辆驾驶人员血液中的酒精含量大于或等于20mg/100ml,小于80mg/100ml 为饮酒驾车,血液中的酒精含量大于或等于80mg/100ml 的为醉酒驾车。 下面分别考虑大李在很短时间内和较长时间内(如2个小时)喝了三瓶啤酒,多长时间内驾车就会违反新的国家标准。 1、 问题假设 大李在短时间内喝下三瓶啤酒后,酒精先从吸收室(肠胃)吸收进中心室(血液和体液),然后从中心室向体外排除,忽略喝酒的时间,根据生理学知识,假设 (1) 吸收室在初始时刻t=0时,酒精量立即为 32 D ;在任意时刻,酒精从吸收室吸收进中心室的速率(吸收室在单位时间内酒精含量的减少量)与吸收室的酒精含量成正比,比例系数为1k ; (2) 中心室的容积V 保持不变;在初始时刻t=0时,中心室的酒精含量为0;在任意时 刻,酒精从中心室向体外排除的速率(中心室在单位时间内酒精含量的减少量)与 中心室的酒精含量成正比,比例系数为2k ; (3) 在大李适度饮酒没有酒精中毒的前提下,假设1k 和2k 都是常量,与饮酒量无关。 2、 符号说明 酒精量是指纯酒精的质量,单位是毫克; 酒精含量是指纯酒精的浓度,单位是毫克/百毫升; ~t 时刻(小时) ; ()~x t 在时刻t 吸收室(肠胃)内的酒精量(毫克) ; 0~D 两瓶酒的酒精量(毫克); (t)~c 在时刻t 吸收室(血液和体液)的酒精含量(毫克/百毫升) ; 2()~c t 在时刻t 中心室(血液和体液)的酒精含量(毫克/百毫升); ~V 中心室的容积(百毫升) ; 1~k 酒精从吸收室吸收进中心室的速率系数(假设其为常数2.0079); 2~k 酒精从中心室向体外排除的速率系数(假设其为常数0.1855); 3~k 在短时间喝下三瓶酒的假设下是指短时间喝下的三瓶酒的酒精总量除以中心室体积, 即03/2D V ;而在较长时间内(2小时内)喝下三瓶酒的假设下就特指03/4D V .

matlab在数学建模中的应用

Matlab在数学建模中的应用 数学建模是通过对实际问题的抽象和简化,引入一些数学符号、变量和参数,用数学语言和方法建立变量参数间的内在关系,得出一个可以近似刻画实际问题的数学模型,进而对其进行求解、模拟、分析检验的过程。它大致分为模型准备、模型假设、模型构成、模型求解、模型分析、模型检验及应用等步骤。这一过程往往需要对大量的数据进行分析、处理、加工,建立和求解复杂的数学模型,这些都是手工计算难以完成的,往往在计算机上实现。在目前用于数学建模的软件中,matlab 强大的数值计算、绘图以及多样化的工具箱功能,能够快捷、高效地解决数学建模所涉及的众多领域的问题,倍受数学建模者的青睐。 1 Matlab在数学建模中的应用 下面将联系数学建模的几个环节,结合部分实例,介绍matlab 在数学建模中的应用。 1.1 模型准备阶段 模型准备阶段往往需要对问题中的给出的大量数据或图表等进行分析,此时matlab的数据处理功能以及绘图功能都能得到很好的应用。 1.1.1 确定变量间关系 例1 已知某地连续20年的实际投资额、国民生产总值、物价指数的统计数据(见表),由这些数据建立一个投资额模型,根据对未来国民生产总值及物价指数的估计,预测未来的投资额。

表1 实际投资额、国民生产总值、物价指数的统计表 记该地区第t年的投资为z(t),国民生产总值为x(t),物价指数为y(t)。 赋值: z=[90.9 97.4 113.5 125.7 122.8 133.3 149.3 144.2 166.4 195 229.8 228.7 206.1 257.9 324.1 386.6 423 401.9 474.9 424.5]' x=[596.7 637.7 691.1 756 799 873.4 944 992.7 1077.6 1185.9 1326.4 1434.2 1549.2 1718 1918.3 2163.9 2417.8 2631.6 2954.7 3073]' y=[0.7167 0.7277 0.7436 0.7676 0.7906 0.8254 0.8679 0.9145 0.9601 1 1.0575 1.1508 1.2579 1.3234 1.4005 1.5042 1.6342 1.7842 1.9514 2.0688]' 先观察x与z之间,y与z之间的散点图 plot(x,z,'*') plot(y,z,'*') 由散点图可以看出,投资额和国民生产总值与物价指数都近似呈

matlab数学建模实例

第四周 3. 中的三个根。 ,在求8] [0,041.76938.7911.1-)(2 3=-+=x x x x f function y=mj() for x0=0:0.01:8 x1=x0^3-11.1*x0^2+38.79*x0-41.769; if (abs(x1)<1.0e-8) x0 end end 4.分别用简单迭代法、埃特金法、牛顿法求解方程,并比较收敛性与收敛速度(ε分别取10-3、10-5、10-8)。 简单迭代法: function y=jddd(x0) x1=(20+10*x0-2*x0^2-x0^3)/20; k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=(20+10*x0-2*x0^2-x0^3)/20;k=k+1; end x1 k 埃特金法: function y=etj(x0) x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0); k=1; while (abs(x3-x0)>=1.0e-3) x0=x3; x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=k+1; end 2 ,020102)(023==-++=x x x x x f

x3 k 牛顿法: function y=newton(x0) x1=x0-fc(x0)/df(x0); k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=x0-fc(x0)/df(x0);k=k+1; end x1 k function y=fc(x) y=x^3+2*x^2+10*x-20; function y=df(x) y=3*x^2+4*x+10; 第六周 1.解例6-4(p77)的方程组,分别采用消去法(矩阵分解)、Jacobi迭代法、Seidel迭代法、松弛法求解,并比较收敛速度。 消去法: x=a\d 或 [L,U]=lu(a); x=inv(U)inv(L)d Jacobi迭代法: function s=jacobi(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1); C=inv(D); B=C*(L+U); G=C*d; s=B*x0+G; n=1; while norm(s-x0)>=1.0e-8 x0=s; s=B*x0+G;

MATLAB及其在数学建模中的应用

Modeling and Simulation 建模与仿真, 2015, 4(3), 61-71 Published Online August 2015 in Hans. https://www.360docs.net/doc/3f154896.html,/journal/mos https://www.360docs.net/doc/3f154896.html,/10.12677/mos.2015.43008 Study of MATLAB and Its Application in Mathematical Modeling Chuanqi Qin, Ting Wang, Yuanfeng Jin School of Science, Yanbian University, Yanji Jilin Email: yfkim@https://www.360docs.net/doc/3f154896.html, Received: Jul. 22nd, 2015; accepted: Aug. 11th, 2015; published: Aug. 18th, 2015 Copyright ? 2015 by authors and Hans Publishers Inc. This work is licensed under the Creative Commons Attribution International License (CC BY). https://www.360docs.net/doc/3f154896.html,/licenses/by/4.0/ Abstract This article firstly introduces the development and the features of MATLAB software. And then the concept and the process of mathematical modeling are explained. After, the article briefly intro-duces some MATLAB solution methods of mathematical modeling problems, giving several in-stances of some methods. At the last of this article, through a relatively complete example, it fo-cuses on the application of MATLAB in mathematical modeling. It has been found that the applica-tion of MATLAB in mathematical modeling can improve the efficiency and quality of mathematical modeling, enrich the means and methods of mathematical modeling, and play a very important role in the teaching of mathematical modeling course. Keywords MATLAB, Mathematical Modeling, Mathematic Model MATLAB及其在数学建模中的应用 秦川棋,王亭,金元峰 延边大学理学院,吉林延吉 Email: yfkim@https://www.360docs.net/doc/3f154896.html, 收稿日期:2015年7月22日;录用日期:2015年8月11日;发布日期:2015年8月18日

MATLAB数学建模大作业

******大学 本科实验报告 课程名称:****建模与仿真 设计专题:单服务员的排队模型学生姓名:*** 学号:********** 2012年04月30日

一、实验题目和要求 实验题目: 在某商店有一个售货员,顾客陆续来到,售货员 逐个地接待顾客。当到来的顾客较多时,一部分 顾客便须排队等待,被接待后的顾客便离开商店。 设:a.顾客到来间隔时间服从参数为5分钟的指 数分布;b.对顾客的服务时间服从[3,12]上的均 匀分布;c.排队按先到先服务规则,队长无限制, 并假定一个工作日为8小时,时间以分钟为单位。 要求: 1)模拟1个工作日内完成服务的个数及顾客平均 等待时间t。 2)模拟10个工作日,求出平均每日完成服务的个 数及每日顾客的平均等待时间 3)用柱状图画出10个工作日的平均每日完成的 服务个数及每日顾客的平均等待时间。 二、程序结构图(或功能说明) 文件夹中的m文件在j取1时模拟单工作日的服务 情况,j取1到10时模拟10个工作日的服务情况。 三、程序流程图

NO YES NO i=i+1 计算第i 个顾客离开时的时刻t 计算第i+1个顾客的等待时间s 记录i 值,跳出循环 计算第i+1个顾客的等待时间s 计算第i 个顾客离开时的时刻t 构造顾客间隔时间序列(TjM ) 构造顾客所需服务时间序列(TfM ) t>480 j=1

YES NO YES NO j=j+1 i=i+1 计算第i 个顾客离开时的时刻t 计算第i+1个顾客的等待时间s 记录i 值,跳出循环 计算第i+1个顾客的等待时间s 计算第i 个顾客离开时的时刻t 构造顾客间隔时间序列(TjM ) 构造顾客所需服务时间序列(TfM ) t>480 j=1 j<10

matlab数学建模实例

第四周3. 中的三个根。 ,在求8] [0,041.76938.7911.1-)(2 3=-+=x x x x f function y=mj()for x0=0:0.01:8 x1=x0^3-11.1*x0^2+38.79*x0-41.769;if (abs(x1)<1.0e-8)x0 end end 4.分别用简单迭代法、埃特金法、牛顿法求解方程,并比较收敛性与收敛速度(ε分别取10-3、10-5、10-8)。 简单迭代法: function y=jddd(x0) x1=(20+10*x0-2*x0^2-x0^3)/20;k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=(20+10*x0-2*x0^2-x0^3)/20;k=k+1;end x1k 埃特金法: function y=etj(x0) x1=(20-2*x0^2-x0^3)/10;x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=1; while (abs(x3-x0)>=1.0e-3) x0=x3; x1=(20-2*x0^2-x0^3)/10;x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=k+1;end 2 ,020102)(023==-++=x x x x x f

x3 k 牛顿法: function y=newton(x0) x1=x0-fc(x0)/df(x0); k=1; while(abs(x1-x0)>=1.0e-3) x0=x1; x1=x0-fc(x0)/df(x0);k=k+1; end x1 k function y=fc(x) y=x^3+2*x^2+10*x-20; function y=df(x) y=3*x^2+4*x+10; 第六周 1.解例6-4(p77)的方程组,分别采用消去法(矩阵分解)、Jacobi迭代法、Seidel迭代法、松弛法求解,并比较收敛速度。 消去法: x=a\d 或 [L,U]=lu(a); x=inv(U)inv(L)d Jacobi迭代法: function s=jacobi(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1); C=inv(D); B=C*(L+U); G=C*d; s=B*x0+G; n=1; while norm(s-x0)>=1.0e-8 x0=s; s=B*x0+G;

数学建模培训作业(MATLAB编程部分)

数学建模培训作业 (MATLAB 编程部分) 1. 请使用switch 语句将百分制的学生成绩转换为五级制的成绩输出。 2. 猜数游戏:首先由计算机随机产生一个 [1,100] 之间的一个整数,然后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示 “High” ,小于则显示 “ Low ” ,等于则显示 “You won !”,同时退出游戏。用户最多有 7 次机会。 3. 使用for 结构计算1+2+3+…+100。 4. 设计一个九九乘法表。 5. 使用while 结构计算1+2+3+…+100。 6. 求1!+2!+ …+10!的值。 7. 编程生成三对角矩阵。 1 10000011100000001110000000111000000011100 000001110000000111000000011100 1 1 轾犏犏犏犏犏犏犏 犏犏 犏犏犏犏犏犏犏犏臌 8. 计算分段函数的值,要求根据不同的x 输入,给出相应的结果。 223135 x x y x x ì?-???+??=í?-????+?? 110011x x x x ?-< ?> 9. 已知1 1111 1(1)435721 n n p -?+-++-- ,编程求 的近似值。 10. 输入下面的矩阵

12345678 910111213141516A 轾犏犏犏=犏犏 犏臌 编程求该矩阵的对角线元素之和,并找出最大和最小元素的值以及其所在的行、列号。 11. 求水仙花数。如果一个三位数的个位数、十位数和百位数的立方和等于该数自身, 则称该数为水仙花数。编一程序求出所有的水仙花数。 12. 给定两个实数a 、b 和一个正整数n ,计算()k a b +和()k a b -,其中n k ,,2,1 。 13. 编写函数,生成一个1!,2!,…,n!的阶乘表。 14. 编一个函数统计字符串中单词的个数。 15. 求n 阶勒让德多项式的值,其递归公式为: (,)((2* 1)**(1,) (p n x n x p n x n p n n =----- (0,) 1;(1,p x p x x == 16. 编写一个判断任意输入正整数是否为素数的函数文件,并在命令窗口调用。 17. 编写一个万年历计算程序,当输入年月日后,能够计算出该日是星期几。

数学建模作业题+答案

数学建模MATLAB 语言及应用上机作业1 1. 在matlab 中建立一个矩阵135792468101234501234A ???? ? ?=??-----???? 答案: A = [1,3,5,7,9;2,4,6,8,10;-1,-2,-3,-4,-5;0,1,2,3,4] 2. 试着利用matlab 求解出下列方程的解(线性代数22页例14) 1234124 23412342583692254760 x x x x x x x x x x x x x x +-+=??--=?? -+=-??+-+=? 答案: A=[2 ,1,-5,1;1,-3,0,-6;0,2,-1,2;1,4,-7,6]; B=[8;9;-5;0]; X=A\B 或 A=[2,1,-5,1;1,-3,0,-6;0,2,-1,2;1,4,-7,6] b=[8,9,-5,0]' X=inv(A)*b 3. 生成一个5阶服从标准正态分布的随机方阵,并计算出其行列式的值,逆矩阵以及转置矩阵。 答案: A=randn(5) det(A) inv(A) A' 4. 利用matlab 求解出 110430002A -?? ??=-?? ???? 的特征值和特征向量。 答案: A=[-1,1,0;-4,3,0;0,0,2] [V,D]=eig(A)

5.画出衰减振荡曲线3 sin3t y e t -=在[0,4]π上的图像。 要求,画线颜色调整为黑色,画布底面为白色。 (在实际中,很多打印机时黑白的,因此大多数作图要考虑黑白打印机的效果。) 给出恰当的x ,y 坐标轴标题,图像x 轴的最大值为4π。 6. 生成一个0-1分布的具有10个元素的随机向量,试着编写程序挑选出向量中大于0.5的元素。 数学建模和Matlab 上机作业2(2016-9-20) 跟老师做(不用整合进作业中): 上机演示讲解:函数,递归的两个例子的写法。 附: 1. Fibonacci Sequence (斐波那契数列) 在数学上,费波那西数列是以递归的方法来定义: F1= 1;F2= 1;F (n )=F (n-1)+F (n-2) 2. 阶乘举例: 数学描述:n!=1×2×……×n ;计算机描述:n!=n*(n-1)! 自己做(需要整合进作业中,提交到系统中): 1. 写一个m 文件完成分值百分制到5分制的转换(即输入一个百分制,转换后输出一个5级对应的得分,联系条件控制语句)。 对应规则如下: 优秀[90,100] 良好[80,90) 中等[70,80) 及格[60,70) 不及格[0,60] 完成函数后,利用命令行对所写的函数进行测试。 答案: score=input('your score is: '); if score>=90 && score<=100 disp('优秀'); if score>=80 && score<90 disp('良好'); if score>=70 && score<80 disp('中等'); if score>=60 && score<70 disp('及格'); if score>=0 && score<60 disp('不及格'); else disp('请输入正确的成绩');

10909-数学建模-应用MATLAB建模的一个例子

应用MATLAB 的一个例子 ——数学也是一门技术 王天顺 整理 本来想用 “数学也是一门技术”作题目,主要是基于两点,一是从数学的应用角度,它的确具备了作为一门技术的特征,这也就是今天我要通过一个例子要表达的;二是咱们在座的大多数都是从事职业教育的老师,不知道我理解得是不是正确,职业教育与普通教育的区别是较为侧重于教授技术,我主观上感觉这个题目和大家的关系更紧密一些。但是,这个题目有点太大了!和领导商量了一下还是换个题目吧。 首先可以证明:数学确是一门技术,比如说要从技术的定义入手,流行的做法是:查查《辞海》,查查相关的如《科学学辞典》和《科技辞典》等等,看看他们是怎样给技术定义的;其次,论述一下数学的确是符合这些定义的。 实际上,我也确实查阅过这些资料,可以说没有问题,一定可以找到证据证明这个论断! 注:“技术”一词的中文解释有两种,一种是以《辞海》为代表的解释,把技术定义为:(1 )泛指根据生产实践经验和自然科学原理而发展成的各种工艺操作方法与技能;(2)除操作技能外, 广义的还包括相应的生产工具和其他物质设备,以及生产的工艺过程或作业程序、方法。另一种是以《科学学辞典》和《科技辞典》为代表的解释,把技术定义为:是为社会生产和人类物质文化生活需要服务的,供人类利用和改造自然的物质手段、智能手段和信息手段的总和。 可见, “技术”一词所包含的内容除了有形的物化形态之外,还包括无形的智能形态方面。无形的智能形态的技术是客观存在的,在某种意义上说,这方面技术的作用并不亚于物化形态的技术,更不能为物化形态技术所取代(背景资料)。因此,有关“技术”的涵义,有人概括为:指的是有形的物化技术和无形的智能技术的总和。 当然,容易想到我们把数学看作一门技术,可能更多的是从技术的无形“智能形态”角度论述的。我想这只是他的一个方面,今天先给各位介绍的是一个例子,展现他的另一个方面,用数学(包括相关的软件)去解决一个实际问题,其过程就像“传统的”、物化形态的技术一样;其次,结合上述例子,探讨有关数学建模及相关培训指导工作的一般原则和步骤,谈一点个人对此项工作的认识;最后,介绍我校的这些年数学建模培训工作的一些具体做法。 一、足球比赛中的吊门问题 1. 问题:只考虑如下的因素:球与球门的距离为a ,守门员与球门的距离为b (假设在调 门过程中,守门员不能移动),球门高h ,守门员最大摸高H ,球出脚的初速度为0v ,与水平方向的夹角为α(称为初射角).针对下列数据求能吊门成功的α,h=2.44m ,H=3.20m ,s m v /300= ,重力加速度g=10m/s 2,针对下列几组数据分别给出具体能吊门成功的相应初射角范围,要求精度在小数点后第4位。 (1) a=6m ,b=1m ; (2) a=10m ,b=3m ; (3) a=20m ,b=5m ; 2. 问题分析 (1) 在不考虑空气阻力的情况下,抛射体的运动轨迹是抛物线:

matlab数学建模实例

第四周 3. function y=mj() for x0=0:0.01:8 x1=x0^3-11.1*x0^2+38.79*x0-41.769; if (abs(x1)<1.0e-8) x0 end end 4.分别用简单迭代法、埃特金法、牛顿法求解方程,并比较收敛性与收敛速度( 分别取10-3、10-5、10-8)。 简单迭代法: function y=jddd(x0) x1=(20+10*x0-2*x0^2-x0^3)/20; k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=(20+10*x0-2*x0^2-x0^3)/20;k=k+1; end x1 k 埃特金法: function y=etj(x0) x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0); k=1; while (abs(x3-x0)>=1.0e-3) x0=x3; x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=k+1; end x3 k 牛顿法: function y=newton(x0)

x1=x0-fc(x0)/df(x0); k=1; while (abs(x1-x0)>=1.0e-3) x0=x1; x1=x0-fc(x0)/df(x0);k=k+1; end x1 k function y=fc(x) y=x^3+2*x^2+10*x-20; function y=df(x) y=3*x^2+4*x+10; 第六周 1.解例6-4(p77)的方程组,分别采用消去法(矩阵分解)、Jacobi迭代法、Seidel迭代法、松弛法求解,并比较收敛速度。 消去法: x=a\d 或 [L,U]=lu(a); x=inv(U)inv(L)d Jacobi迭代法: function s=jacobi(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1); C=inv(D); B=C*(L+U); G=C*d; s=B*x0+G; n=1; while norm(s-x0)>=1.0e-8 x0=s; s=B*x0+G; n=n+1; end n Seidel迭代法: function s=seidel(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1);

matlab数学建模实例

m a t l a b数学建模实例集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

第四周3. function y=mj() for x0=0::8 x1=x0^*x0^2+*; if (abs(x1)< x0 end end 4.分别用简单迭代法、埃特金法、牛顿法求解方程,并比较收敛性与收敛速度(分别取10-3、10-5、10-8)。 简单迭代法: function y=jddd(x0) x1=(20+10*x0-2*x0^2-x0^3)/20; k=1; while (abs(x1-x0)>= x0=x1; x1=(20+10*x0-2*x0^2-x0^3)/20;k=k+1; end x1 k 埃特金法: function y=etj(x0) x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0); k=1; while (abs(x3-x0)>= x0=x3; x1=(20-2*x0^2-x0^3)/10; x2=(20-2*x1^2-x1^3)/10; x3=x2-(x2-x1)^2/(x2-2*x1+x0);k=k+1; end x3 k 牛顿法: function y=newton(x0) x1=x0-fc(x0)/df(x0);

k=1; while (abs(x1-x0)>= x0=x1; x1=x0-fc(x0)/df(x0);k=k+1; end x1 k function y=fc(x) y=x^3+2*x^2+10*x-20; function y=df(x) y=3*x^2+4*x+10; 第六周 1.解例6-4(p77)的方程组,分别采用消去法(矩阵分解)、Jacobi迭代法、Seidel迭代法、松弛法求解,并比较收敛速度。 消去法: x=a\d 或 [L,U]=lu(a); x=inv(U)inv(L)d Jacobi迭代法: function s=jacobi(a,d,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1); C=inv(D); B=C*(L+U); G=C*d; s=B*x0+G; n=1; while norm(s-x0)>= x0=s; s=B*x0+G; n=n+1; end n Seidel迭代法: function s=seidel(a,d,x0) D=diag(diag(a));

数学建模matlab作业

数统应数20121323003 王妍 数统应数20121323022 胡可旺 1 生成5阶矩阵,使其元素满足均值为1,方差为4的正态分布; 代码:y=1+sqrt(4)*randn(5) 结果: 2,生成一个20行5列矩阵A,其元素分别以概率0.7、0.1、0.2取自0、1、4这三个整数,然后将“删除A的全零行”之后的结果赋给矩阵B; for i = 1:20 for j = 1:5 p = rand(); if p<=0.7 A(i,j) = 0; elseif p>0.7&&p<=0.8 A(i,j) = 1; else A(i,j) = 4; end end end B = []; for i = 1:20 flag = true; for j = 1:5 if A(i,j)~=0 flag=false; break; end end if ~flag

B = [B;A(i,:)]; end end B 3, (函数文件)对于输入的正整数,判断其是否为素数function [ output_args ] = u3( n ) %U3 Summary of this function goes here % Detailed explanation goes here y=1; for i=2:1:sqrt(n) if rem(n,i)==0 y=0; break end end if(y==1) fprintf('是素数') else fprintf('不是素数') end

4,(函数文件)对于输入的正整数,求出其中0的个数; function [ i ] = u4( n ) %U4 Summary of this function goes here % Detailed explanation goes here i=0; while n/10~=0 if rem(n,10)==0 i=i+1; end n=fix(n/10); end 5,(函数文件)有n个人围成一圈,按序列编号。从第一个人开始报数,数到m时该人退出, 并且下一个从1开始重新报数,那么最后剩下的那个人的原始编号为多少?(n>m,例如n=20,m=7 function [ x ] = u5( n,m ) %U5 Summary of this function goes here % Detailed explanation goes here x=1:n; y=zeros(1,n-m+1); t=0; p=size(x,2);

基于matlab的数学建模

MATLAB在数学建模中的应用 (张威10322010910级专升本电气一班) 摘要 随着社会和计算机技术的发展,数学科学与计算机技术相结合,在社会各领域发挥着越来越重要的作用,能够方便、高效的解决各种实际问题。在目前用于数学建模的软件中,Matlab强大的数值计算、绘图以及多样化的工具箱功能,能够快捷、高效地解决数学建模所涉及的众多领域的问题,倍受数学建模者的青睐。Matlab是一款非常好的软件,功能强大,应用面广。从实例出发,论述Matlab在数学建模中的应用,以提高对Matlab软件的认识,提高解决实际问题的能力。本文结合数学建模的几个环节,用一些实例阐述了Matlab在数学建模中的应用。将Matlab用于数学建模可以提高数学建模的效率和质量。丰富数学建模的方法和手段,具有重要的意义。 关键词:Matlab软件,数学建模,最优化 Abstract With the development of society and computer technology,mathematics,science and computer technology in all areas of society is playing an increasingly important role,It can easily and efficiently to solve practical problems.In the currently used mathematical modeling software,Matlab powerful numerical calculations,drawings,and a variety of toolbox functions,can quickly and efficiently solve the mathematical modeling involved in many areas of concern,much of those mathematical modeling all ages.Matlab is a very good software,powerful,wide range of applications.Starting from the example,discussed in Matlab in the application of mathematical modeling to improve understanding of the Matlab software,to improve the ability to solve practical problems.In this paper,several aspects of mathematical modeling with Matlab examples described in the application of mathematical modeling.Mathematical modeling of Matlab for mathematical modeling can improve the efficiency and quality.Extensive mathematical modeling methods and means of great significance. Key Words:MATLAB software,Mathematical modeling,Optimization

数学建模matlab例题参考及练习讲课稿

数学建模m a t l a b例题参考及练习

数学实验与数学建模 实验报告 学院: 专业班级: 姓名: 学号: 完成时间:年月日

承 诺 书 本人承诺所呈交的数学实验与数学建模作业都是本人 通过学习自行进行编程独立完成,所有结果都通过上机验 证,无转载或抄袭他人,也未经他人转载或抄袭。若承诺 不实,本人愿意承担一切责任。 承诺人: 年 月 日 数学实验学习体会 (每个人必须要写字数1200字以上,占总成绩的20%) 练习1 一元函数的图形 1. 画出x y arcsin =的图象. 2. 画出x y sec =在],0[π之间的图象. 3. 在同一坐标系中画出x y = ,2x y =,3x y =,3x y =,x y =的图象. 4. 画出3232)1()1()(x x x f ++-=的图象,并根据图象特点指出函数)(x f 的 奇偶性. 5. 画出)2ln(1++=x y 及其反函数的图象.

6. 画出321+=x y 及其反函数的图象. 练习2 函数极限 1. 计算下列函数的极限. (1)x x x 4cos 12sin 1lim 4-+π→. 程序: sym x ; f=(1+sin(2*x))/(1-cos(4*x)); limit(f,x,pi/4) 运行结果: lx21 ans = 1 (2). 程序: sym x ; f=(1+cos(x))^(3*sec(x)); limit(f,x,pi/2) 运行结果: lx22 ans = exp(3) (3)22)2(sin ln lim x x x -ππ→. 程序: sym x ; f=log(sin(x))/(pi-2*x)^2; limit(f,x,pi/2) 运行结果: lx23 ans = x x x sec 3 2 ) cos 1 ( lim + π →

相关文档
最新文档