数学实验第4讲-Matlab-编程入门课件_第1页
数学实验第4讲-Matlab-编程入门课件_第2页
数学实验第4讲-Matlab-编程入门课件_第3页
数学实验第4讲-Matlab-编程入门课件_第4页
数学实验第4讲-Matlab-编程入门课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

数学实验

Matlab

编程入门2023/7/251Matlab编程入门

Matlab

编程简介

Matlab

作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和C、FORTRAN

等高级语言一样进行程序设计。在Matlab

程序设计中,要充分利用Matlab

数据结构的特点,提高编程效率。利用Matlab

的程序控制功能,可以将有关Matlab

命令编成程序存储在一个文件中(M

文件),然后在命令窗口中运行该文件,Matlab

就会自动依次执行文件中的命令,直到全部命令执行完毕。2023/7/252用Matlab

语言编写的程序称为M文件。

M文件是由若干Matlab

命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,Matlab

提供的内部函数以及各种工具箱,都是利用Matlab

语言开发的M文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。

M文件根据调用方式的不同可以分为两类:

Script:脚本文件/命令文件

Function:函数文件M文件

M

文件以.m

为扩展名。2023/7/253

M

文件是一个文本文件,可以用任何文本编辑器来建立和编辑,通常使用Matlab

自带的M

文件编辑器。M文件的建立与打开新建一个M文件菜单操作(FileNewM-File

)

命令操作

(edit

M文件名)

命令按钮

(

快捷键

)打开已有的M文件菜单操作

(FileOpen

)

命令操作(edit

M文件名)

命令按钮

(

快捷键

)

双击M

文件2023/7/254在命令窗口中输入f2cs,即可执行该M

文件。例:编写一个脚本文件将华氏温度转化为摄氏温度脚本文件举例clear;%清除当前工作空间中的变量f=input('PleaseinputFahrenheittemperature:');c=5*(f-32)/9;fprintf('Thecentigradetemperatureis%g\n',c);新建一个M

文件

f2cs.m,内容如下:脚本文件运行后,文件中所产生的所有变量都驻留在Matlab当前工作空间,可以用whos

查看。2023/7/255关系运算<小于<=小于等于>大于>=大于等于==等于~=不等于比较大小,如果结论是真则返回1,否则返回0注意==与=

的区别关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量,在后一种情况,标量和数组中的每一个元素相比较,比较结果与数组大小一样。关系运算符2023/7/256例:关系运算举例>>

2+2==4>>

2>3>>

A=[135;206];>>

B=[310;246];>>

A>=B>>

x=[50;42];>>

x<42023/7/257&与(ElementwiseAND)|或(ElementwiseOR)~非xor(x,y)异或逻辑运算逻辑运算符2023/7/258运算对象与或非异或ABA&BA|B~AXor(A,B)000010010111100101111100逻辑运算表2023/7/259all(x)

如果向量X

中所有元素都非零,则返回1,

否则返回0若x为矩阵,则any

和all

按列运算,返回一个0-1向量逻辑运算相关函数any(x)如果向量X

中存在非零元素,则返回1,

否则返回02023/7/2510括号幂,点幂正号,负号,逻辑非乘,除,点乘,点除加,减冒号运算关系运算&|&&||运算优先级高低2023/7/2511程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成。顺序结构M文件控制流按排列顺序依次执行各条语句,直到程序的最后。这是最简单的一种程序结构,一般涉及数据的输入输出、数据的计算或处理等。2023/7/2512例:A=input('PleaseinputA:')数据的输入:inputA=input(提示信息)其中提示信息为字符串,该命令要求用户输入A

的值(可以是数或字符串)数据输入input如果是输入字符串,则需加单引号name=input('What''syourname?')例:2023/7/2513disp(X)输出变量X的值,可以是数值矩阵或字符串>>

B=[123;456;789];>>

disp(B)数据输出disp数据的输出:disp>>

A='Hello,Tom!';>>

disp(A)例:2023/7/2514数据输出fprintffprintf(fid,format,variables)按指定的格式将变量的值输出到指定的文件数据的输出:fprintf

fid

为文件句柄,若缺省,则将变量的值输出到屏幕上

format

用来指定数据输出时采用的格式,常见的有%d(整数)%e(实数:采用科学计数法形式)%f(实数:采用浮点数形式)%g(由系统自动选取上述两种格式之一)

%s(输出字符串)

format

中还可以使用一些特殊格式,如:\n

(换行)\t

(制表符)\b

(退格)

\\

(反斜杆)

%%

(百分号)

2023/7/2515数据输出fprintf>>

a='Hello';b=2.4;c=100*pi;>>

fprintf('a=%s,b=%f,c=%e\n',a,b,c)例:

format

中的输出格式要与输出变量一一对应

可以没有输出变量>>

fprintf('

TodayisMonday\n')例:2023/7/2516pause

程序的暂停:pausepause或

pause(n)若想强行终止程序的运行,可以使用Ctrl+c其中n

是延迟时间,以秒为单位;若缺省,则将暂停程序,直到用户按任意键后继续2023/7/2517选择结构是根据给定的条件成立或不成立,分别执行不同的语句。Matlab

用于实现选择结构的语句有if

语句和switch

语句。选择结构2023/7/2518单分支结构ifexpression

(条件)

statements(语句组)endif条件语句ifexpression(条件)

statements1(语句组1)else

statements2(语句组2)end双分支结构2023/7/2519ifexpression1(条件1)

statements1(语句组1)elseifexpression2(条件2)

statements2(语句组2)......

elseifexpressionm(条件m)

statementsm(语句组m)else

statements(语句组)end多分支结构if条件语句2023/7/2520if语句举例数论中的一个有趣问题:

任取一个正整数,如果是偶数,用2除,如果是奇数,用3乘再加1,反复这个过程,直到所得到的数为1。问:是否存在使该过程永不中止的整数?(exp01.m)2023/7/2521if语句举例while

1

n=input('请输入一个正整数(非正则退出):');

if

n<=0,

break;endnt=n;

while

n>1

if

rem(n,2)==0

n=n/2;

else

n=3*n+1;

end

fprintf('\nn=%d',n);

end

fprintf('\nn=%d不符合要求!\n',nt);end2023/7/2522根据表达式的不同取值,分别执行不同的语句。switchexpression(表达式)casevalue1(表达式1)

statement1(语句组1)casevalue2(表达式2)

statement2(语句组2)......casevaluem

(表达式m)

statementm(语句组m)otherwise

statement(语句组)endswitch语句2023/7/2523

Matlab

首先计算expression

的值,然后将它依次与各个case

指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出switch

结构。

switch

后面的表达式expression

的值可以是一个标量或字符串。switch语句

otherwise

指令可以不出现。如果所有的比较结果都为假,则执行otherwise

后面的语句组,然后跳出switch

结构。2023/7/2524循环结构是按照给定的条件,重复执行指定的语句。Matlab用于实现循环结构的语句有for语句和while语句循环结构2023/7/2525forvariable=expression

statement(循环体)end循环变量

表达式expression

可以是行向量,也可以是矩阵for循环clear;y=0;n=100;fork=1:n

y=y+1/(2*k-1);end例:已知,当n=100时,求y的值2023/7/2526循环语句可以嵌套使用while循环whileexpression(条件)

statement(循环体)end不能在for

循环体内改变循环变量的值为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免

for

循环的使用如果预先就知道循环的次数,则可以采用for

循环;否则,如果预先无法确定循环的次数,则可以使用while

循环。2023/7/2527

break

continue

break

语句用于终止循环的执行,即跳出最内层循环

continue

语句用于结束本次循环,进行下一次循环

break

和continue

一般与if

语句配合使用其它流控制语句

return

return

语句用于退出正在运行的脚本或函数,通常用在函数文件中。2023/7/2528首先由计算机随机产生一个[1,100]之间的一个整数,然后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示High,小于则显示

Low,等于则显示Youwon!,同时退出游戏。用户最多有7次机会。程序示例猜数游戏2023/7/2529附:一些有趣的问题数字填图问题2023/7/2530数字填图问题数字填图是数学问题的一种趣味形式。

如:魔方矩阵、费马大定理等数学问题一般都要经过严格的逻辑证明才能得以解决。但随着计算机的诞生和发展,计算机改变了整个世界,计算机已经在各个领域发挥着作用,并取得了许多重大发展。但能否用计算机来证明数学问题?问题背景和实验目的2023/7/2531所谓计算机证明是指充分发挥计算机计算速度快和会“推理”的特点,用计算机程序模拟解题或进行穷举检验,最后得到问题的解。如著名的“四色问题”。但几乎所有的数学家对计算机证明持保留态度。本实验通过生活中常见的数字填图问题,研究这类问题的逻辑推理解法和计算机解法。问题背景和实验目的2023/7/2532问题一:在下面的几个加法等式中,每个方框表示一个非零数字,且任意两个数字互不相同,问有多少个解?+

=,+

=,

=0

逻辑解法注:本实验中,表达式abc

表示a*100+b*10+c,其余类推方程两边相加得:45=2(c+f)+11abcdefghi数字填图问题一首先有:

i=1c+f=17c=8,f=9或

c=9,f=8a+b+d+e+g+h=c+f+i0+c+f+i+c+f+i2023/7/2533

由于a,b,c,d,e,f,g,h,i

互不相同,为了简单起见,不妨设a

<

b,d

<

e,g

<

h,此时问题的解为:c=8,f=9或c=9,f=8记作{c,f}={8,9}abcdefghi352746891273546981452637981891264537逻辑解法2023/7/2534

事实上,本问题只有两个解是本质的。

如果不要求a

<

b,d

<

e,g

<

h

,则解的个数为逻辑解法2023/7/2535

计算机解法计算机解法穷举法可以用Matlab、Mathematica、C

语言等编程,充分利用计算机运算速度快的特点进行穷举法检验。2023/7/2536计算机解法n=0;%n

用来记录解的个数fora=1:9

forb=1:9

forc=1:9

ford=1:9

fore=1:9

forf=1:9forg=1:9forh=1:9fori=1:9

如果a,b,c,d,e,f,g,h,i

互不相等,且

a+b=c,d+e=f,g+h=i,

则输出这个解,并令n=n+1;end;end;end;end;end;end;end;end;end;end程序伪码2023/7/2537

计算机解法

Matlab

源程序见

fuluA.m,fuluA1.m

和fuluB.m计算机解法穷举法可以用Matlab、Mathematica、C

语言等编程,充分利用计算机运算速度快的特点进行穷举法检验。

Mathematica

源程序见fuluD.nb

TurboC

源程序见fuluC.c2023/7/2538问题二:在下面的4个算式中,每个方框表示一个非零数字,且任意两个数字互不相同,问(A)、(B)、(C)、(D)这四种情形分别有多少个解?+

情形(C)、(D)无解。(A)、(B)实际上是同一个问题。-×÷(A)(B)(C)(D)数字填图问题二2023/7/2539

逻辑解法+abcdefghi(略)情形(A)求解问题三

总共有168个本质解。2023/7/2540计算机解法

计算机解法穷举法n=0;%n

用来记录解的个数fora=1:9

forb=1:9

forc=1:9

ford=1:9

fore=1:9

forf=1:9forg=1:9forh=1:9fori=1:9

如果a,b,c,d,e,f,g,h,i

互不相等,且

100*a+10*b+c+100*d+10*e+f=100*g+10*h+i

则输出这个解,并令n=n+1;end;end;end;end;end;end;end;end;end;end程序伪码2023/7/2541n=0;%n用来记录解的个数fora=1:9

forb=1:9

forc=1:9

ford=1:9

fore=1:9

forf=1:9forg=1:9forh=1:9fori=1:9ifa~=b&a~=c&a~=d&a~=e&a~=f&a~=g&a~=h&a~=i&b~=c&b~=d&b~=e&b~=f&b~=g&b~=h&b~=i&c~=d&c~=e&c~=f&c~=g&c~=h&c~=i&d~=e&d~=f&d~=g&d~=h&d~=i&e~=f&e~=g&e~=h&e~=i&f~=g&f~=h&f~=i&g~=h&g~=i&h~i&100*a+10*b+c+100*d+10*e+f=100*g+10*h+ifprintf(’a=,b=,c=,d=,e=,f=,g=,h=,i=’,a,b,c,d,e,f,g,h,i)n=n+1;end;end;end;end;end;end;end;end;end;end2023/7/2542

Matlab

源程序见fuluE.m。对于本问题,逻辑方法比较复杂,而计算机解法与问题一几乎没什么区别,所需时间也几乎一样。计算机解法

计算机解法穷举法2023/7/2543问题三:在右下方的加法算式中,每个方框表示一个非零数字,且任意两个数字互不相同,问有多少个解?+abcdefghi(略)数字填图问题三

逻辑解法问题三

总共有168个解。2023/7/2544问题三的计算机解法

Matlab

程序自己动手!(参考附录中的程序)这里的三个问题都是有穷问题,如果是无穷问题,如“费马大定理”,计算机可能就无能为力了。但如果能将无穷问题可以转化成有穷问题,则仍然可以发挥计算机的特长,如著名的“四色问题”。

下面介绍的两个问题,目前还没见到它们的逻辑解法,但利用计算机却可以成功解决。

计算机解法穷举法2023/7/

温馨提示

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

评论

0/150

提交评论