第一章-Matlab-数值计算_第1页
第一章-Matlab-数值计算_第2页
第一章-Matlab-数值计算_第3页
第一章-Matlab-数值计算_第4页
第一章-Matlab-数值计算_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第一章

Matlab入门第二节

数值计算简单数值计算

>>1+2+3ans=6>>1*10+2*20+3*30ans=140

>>r=2;>>area=pi*r^2;>>area=12.5664我们也可以将上述指令打在同一行,以,或是;分开,例如

>>r=2,area=pi*r^2>>r=2;area=pi*r^2;

请注意上述二式的差异,前者有计算值显示,而后者则无如果一个指令过长可以在结尾加上...(代表此行指令与一行连续),例如>>r=2;>>area=pi...*r^2算术运算符:与传统的编程语言一样,算术运算符+,-,*和/分别表示加、减、乘、除。运算符^表示乘方。MATLAB使用一个非传统的运算符\,可以将其称为反除。该运算符得到商的倒数,即a\b等于b/a。例如:

c=3\2c=0.6667逻辑运算符:逻辑运算是MATLAB中数组运算所特有的一种运算形式,也是几乎所有的高级语言普遍适用的一种运算。

符号运算符功

能函

名==等于eq~=不等于ne<小于lt>大于gt<=小于等于le>=大于等于ge&逻辑与and|逻辑或or~逻辑非not

变量与变量名:与常规的程序设计语言不同的MATLAB并不要求事先对所使用的变量进行声明,也不需要指定变量类型,MATLAB语言会自动依据所赋予变量的值或对变量所进行的操作来识别变量的类型。在赋值过程中如果赋值变量已存在时,MATLAB语言将使用新值代替旧值,并以新值类型代替旧值类型。

在MATLAB语言中变量的命名应遵循如下规则:(1)变量名区分大小写。(2)变量名长度不超31位,第31个字符之后的字符将被MATLAB语言所忽略。(3)变量名以字母开头,可以是字母、数字、下划线组成,但不能使用标点。MATLAB的常量常量说明ans最近运算的结果eps浮点数相对精度,定义为1.0到最近浮点数的距离realmaxMATLAB能表示的实数的最大绝对值realminMATLAB能表示的实数的最小绝对值pi圆周率的近似值3.1415926i,j复数的虚部数据最小单位inf

或Inf表示正无大,定义为1/0NaN或nan非数,它产生于0×

,0/0,

/

等运算分支结构if-else-end语句

条件判断语句也是程序设计语言中流程控制语句之一。使用该语句,可以选择执行指定的命令。一般形式为:

if

逻辑判断语句逻辑值为“真”时执行的语句else逻辑值为“假”时执行的语句end例如:折扣问题

apples=10;%apple的数目

cost=apples*25%购买apple的费用

cost=250ifapples>5%如果购买量超过5,给以20%折扣

cost=(1-20/100)*cost;endcost=200再例如:ifa=1a=a+1elsea=a+2end多重逻辑选择:if-else-end语句的嵌套形式

If逻辑判断语句1

逻辑值1为“真”时的执行语句elseif

逻辑判断语句2

逻辑值2“真”时的执行语句elseif

逻辑判断语句3……else当以上所有的逻辑值均为假时的执行语句 end例如:n=2;ifn<=10,price=105;

elseifn>10,price=112;end例如:n=2;ifn==2,price=17;end例如:r=2;ifr~=3,vol=(4/3)*pi*r^3;end逻辑语句and和or分别记为&和|例如,条件方程

ifg>3org<0,thena=6写为:

ifg>3|g<0,a=6;end同样,条件方程

ifa>3andc<0,b=19写为:

ifa>3&c<0,b=19;end逻辑运算符&和|可以嵌套使用,例如:

if((a==2|b==3)&c<5)g=1;end例1.1

假设R和D为两个给定整数,如果R能够被D=3整除,则在屏幕上输出R。解答判断R能否被另一个整数整除有两种等价的方法:(1)fix(R/D)=R/D,(2)mod(R,D)=0。这里,fix(x)返回数x的整数部分,而mod(x,y)返回x被y除的余数。基于(1)的代码为:R=45;D=3;iffix(R/D)==R/D,R,end基于(2)的代码为:R=45;D=3;ifmod(R,D)==0,R,end循环结构for/end和while/endfor循环语句的调用形式为:

for循环控制变量=〈循环次数设定〉

循环体end例如:fori=1:2:12s=s+i;end例:x从1顺序取到9,计算y=x2-5x-3。forx=1:9y=x^2-5*x-3end循环可以插入if/end语句例:当sin(x)>0时y=sin(x),当sin(x)<0时y=0。forx=0:0.1:10y=sin(x);Ify<0,y=0;endyend例:求负元素的个数c=0;x=[-8,0,2,5,7,2,0,0,4,6,6,9];fori=1:length(x)ifx(i)<0,c=c+1;endendcwhile/end语句while循环语句与for循环语句不同的是,前者是以条件的满足与否来判断循环是否结束的,而后者则是以执行次数是否达到指定值为判断的。while循环语句的一般形式为:

while循环判断的语句循环体end例:

i=0;c=0;x=[-8,0,2,5,7,2,0,0,4,6,6,9];whilei<length(x)+1i=i+1ifx(i)<0,c=c+1;endendc例将数组x中可被4整除的数移除。假设x如下给定:

x=[-8,0,2,5,7,2,0,0,4,6,6,9]解答程序代码为:

x=[-8,0,2,5,7,2,0,0,4,6,6,9];y=[];forn=1:length(x)ifx(n)/4-fix(x(n)/4)~=0y=[y,x(n)];endendy中断break命令终止for或while循环。在嵌套循环中,break终止包含该指令的最内层循环。在下面的例子中,一旦满足j>2*i,break终止内循环,但外层的i循环继续执行直到i=6。例:

fori=1;6forj=1:20ifj>2*i,break,endendend例:r=0whiler<10r=input(‘typr

radius(or-1tostop):’);ifr<0,break,end

vol=(4/3)*pi*r^3;

fprintf(‘volume=%7.3f\n’,vol)end读与写MATLAB有多种不同的数据输入输出方式。这些方法大致可分为三类:通过键盘和鼠标进行交互式操作数据文件读写使用read和write命令input:MATLAB可以使用input命令通过键盘输入数据。读取输入数字的方法如下:

z=input(‘typeyourinput:’)引号间的字符串“typeyourinput:”,是将要出现在屏幕上的提示信息。键入一个数并按回车,此输入数字即存入z中。字符串也可通过键盘输入,方法如下:

z=input(‘yournameplease:’,‘s’)第二个参数s表示通过键盘输入的是一个字符串。变量z是一个数组变量(行向量),除非字符串只有一个字符。fprintf:使用fprintf可以输出格式化信息和数字,例如:

fprintf(‘球的体积%12.5f.\n’,vol)两个单引号之间的是所要输出的字符串,即体积输出的格式与一个换行符。这种格式与我们熟知的C语言类似:球的体积是所要输出的字符串;%12.5f是输出格式,这类似于fortran中的F12.5;\n是换行符,它使屏幕上的光标前进到下一行,换行符可以放在字符串的任意位置键入命令:

fprintf(‘e_format%12.5e\n’,12345.2)将输出:e_format:1.23452e+04disp:disp命令可以在命令窗口输出数字、向量、矩阵或字符串,无需变量名。所以,可以用它在屏幕上直接输出文字或数字。例如:disp(pi)和disppi在命令窗口的输出均为3.14159。也可以试试disp’thisisatestfordisp.’。sprintf:sprintf和fprintf的用法非常相似,只是sprintf将输出写入字符串。这条语句通常用来创建一个可以执行eval(s)的字符串命令。这条语句对创建命令以及M文件里自动编辑和执行命令非常有用。数组变量一维数组变量:一维数组变量有行和列两种形式,它们与向量和矩阵有着密切联系。在MATLAB中,行数组和行向量是同义语,列数组和列向量是同义语。变量x可以通过指定其元素定义为一个行向量,例如:

x=[0,0.1,0.2,0.3,0.3,0.5];要输出一个指定元素,可键入x及其下标。例如:键入命令x(3)将显示:

ans=0.2也可以用如下方法定义相同的x,二者是等价的:

fori=1:6

x(i)=(i-1)*0.1;end向量的大小会自动调整,无须事先指明。通过添加元素可增加x的元素个数,例如:

x(7)=0.6;定义一个列数组与定义行数组类似,只要用分号将各元素隔开即可;例如:

z=[0;0.1;0.2;0.3;0.4;0.5];在行数组后面加一个撇号也可完成同样的功能:

z=[0,0.1,0.2,0.3,0.3,0.5]’;撇号运算符和向量矩阵运算中的转置运算符相同,它使一个列向量变为一个行向量,反之亦然。键入z作为一个命令,将得到:

z=00.10.20.30.40.5如果y和x具有相同的长度和形式(行或列),则向量y和x之间可以使用数组算术运算符进行加法、减法、乘法和除法运算,其形式如下:

z=x+yz=x-yz=x.*yz=x./y分别等价于:

清单1.12fori=1:6;z(i)=x(i)+y(i);endfori=1:6;z(i)=x(i)-y(i);endfori=1:6;z(i)=x(i)*y(i);endfori=1:6;z(i)=x(i)/y(i);end对于加法和减法,数组运算与线性代数中的向量运算相同。但是,.*和./分别被称为数组乘法运算符和数组除法运算符,它们不同于矩阵和向量乘除法。如果去掉.*和./中的句点,结果会完全不同。下面是数组的乘方运算举例:

g=z.^1.2;其中z是一个长度为6的向量,^运算符前面有一个句点,结果g是一个具有相同长度的向量。上述语句等价于:

fori=1:length(g);g(i)=z(i)^1.2;end这里,^运算符前面没有句点。可以通过添加元素或向量使数组变大。作为一个例子,假定:

x=23下面的命令将5添加进x,使其长度变为3:

x=[x,5]返回值为:

x=235对于列向量也可进行添加元素或向量的操作。假设y是一个列向量:

y=23则:

y=[y;7]得到:

y=237注意,给列向量添加元素使用的是分号。也可以将元素添加到向量的前面,例如:x=[9,x],将得到:

x=9235其中,x的右边部分是先前定义的。类似地,y=[-1;y]得到:

y=-1237添加的相反过程是从一个向量中取出它的部分。对于前面的y,

w=y(3:4)定义了一个向量w,它由y的第三和第四个元素组成,即:

w=37长度、大小:如果用户忘了向量的大小,可以向计算机查询。对一个向量:

x=[9,2,3,5]查询

length(x)的结果是:

ans=4此答案与数组的列数相同。定义y=[9,2,3]’,则length(y)返回ans=3;但是如果除了向量的长度之外,还想知道这个向量到底是行向量还是列向量,则必须使用size。例如:size(y)的返回值为:

ans=31其中第一个数代表行数,第二个数代表列数。从这个答案可以知道,y是一个3×1的数组,即一个长度为3的列向量。对于z=[9,2,3,5],size(z)返回:

ans=14即z是一个长度为4的行向量删除数组元素:用如下方法删除一个数组的元素。假定z=[3,5,7,9],要删掉该数组的第三项,则:

z(3)=[]得到:

z=[3,5,9]字符串变量:字符串变量是数组。例如:定义一个字符串变量:

v=’glacier’等价于:

v=[‘g’,’l’,’a’,’I’,’e’,’r’]下述命令将变量v转换为列字符串:

v=v’结果为:

glacier二位数组变量在MATLAB里,二位数组变量等同于一个矩阵。它可以通过指定其元素来定义。例如:一个3×3数组可以这样定义:m=[0.1,0.2,0.3;0.4,0.5,0.6;0.7,0.8,0.9];键入m作为一条命令,得到:

m=0.10000.20000.30000.40000.50000.60000.70000.80000.9000二维数组的整行或整列可以用一个冒号表示。例如:m(1,:)和m(:,3)分别表示m的第一行和第三列。例如:

c(1,:)=m(3,:);

c(2,:)=m(2,:);

c(3,:)=m(1,:);得到:

c=0.70000.80000.90000.40000.50000.60000.10000.20000.3000二维数组可以使用数组算术运算符进行加、减、乘、除的运算:c=a+bc=a-bc=a.*bc=a./b这里,a和b是相同大小的二维数组。上述语句c=a+b等价于:

fori=1:3forj=1:3

c(i,j)=a(i,j)+b(i,j);

endendif语句与数组数组变量可以在if语句中进行比较,假设a和b是相同大小的矩阵:当且仅当对所有元素有a(I,j)=b(I,j)时,a==b成立当且仅当对所有元素有a(I,j)>=b(I,j)时,a>=b成立当且仅当至少对一个元素有a(I,j)~=b(I,j)时,a~=b成立(a)给定一个数组:

x=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2];写出计算其负元素个数的程序。

(b)写出一段程序,使其能够找到(a)中给定数组的最大与最小值(不能使用min或max命令)。解答(a)写这段程序的关键是使用for/end和if/end。第一步将计数器初始化为0,然后对每一个x(i)检验是否有x(i)<0。如果条件满足,计数器加1,c即为最后的结果。

x=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2];

c=0;fori=1:length(x);ifx(i)<0c=c+1;endendc结果为:

c=5(b)在下面一段程序中,分别将xmin和xmax初始化为一个大的正数和一个绝对值大的负数。然后,让每一个x(i)与xmin和xmax进行比较。如果xmin大于x(i),则置xmin为x(i);类似地,如果xmax小于x(i),则置xmax为x(i)。

x=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2];

xmin=999;xmax=-999;fori=1:length(x);ifxmin>x(i),xmin=x(i);endifxmax<x(i),xmax=x(i);endend[xmin,xmax]结果为:

ans=-69MATLAB的数学函数与任何其他的编程语言一样,MATLAB有着为数众多的初等或高等数学函数。初等函数可以分为如下三类:(a)三角函数(b)其他初等函数(c)功能函数复变量:下面说明MATLAB如何对虚变量或复变量进行计算,键入:

cos(2+3*i)其中i为虚数单位,即-1的平方根。结果为:

ans=-4.1896-9.1092i数组变量:MATLAB里大部分函数可以将向量和矩阵作为变量。例如,如果:

x=123987则sin(x)得到:

ans=0.48150.90930.14110.41210.98940.6570这是一个与x同样大小的矩阵。功能函数sort:sort函数将一个向量按照升序重新排列。当一个随机次序的向量需要以升序重新排列时,此命令非常有用。变量x可以是行向量、列向量或矩阵。如果x是一个矩阵,则重新排列按列执行。这里给出几个例子:

sort([215])

ans=125sort([215]’)

ans=125sort([915;284])

ans=214985sum:sum(x)计算向量或矩阵x中元素的和。对于行向量或列向量,sum计算各元素的总和。如果x是矩阵,则返回值为由矩阵各列元素和组成的一个行向量。举例如下:

sum([215])

ans=8sum([215]’)

ans=8sort([215;985])

ans=11910max,min:max(x)和min(x)分别求出向量x的最大值和最小值。变量x可以是行向量、列向量或矩阵。如果x是一个矩阵,函数值为一个行向量,则其元素为矩阵相应列的最大或最小值(这个规则与sort,sum的规则相同)。mod:mod(x,y)返回y除以x的余数。所以,如果x能被y整除,则返回值为零。换句话说,如果x是y的整数倍,mod(x,y)为零。rand:可以通过函数rand生成随机数。其用法为rand(n),其中n规定了返回随机矩阵的大小。如果n=1,则返回一个随机数。当n>1,则返回一个n×n矩阵。除非特别规定,所生成的是0~1之间均匀分布的随机数。eval:该命令可以作为字符串被编辑,然后用eval执行。字符串可以通过input读入,或在程序中创建。例如:

x=0:0.1:10string=input(‘Typeafunctionname,andhitreturn:’,’s’);s=[‘plot(‘,’x’,string,’(x))’];

eval(s)如果输入为cos,则这段程序将画出x=0:0.1:10时y=cos(x)的图形。

M文件所谓M文件就是由MATLAB语言编写的可在MATLAB语言环境下运行程序源代码文件。由于商用的MATLAB软件是用C语言编写而成。因此,M文件的语法与C语言十分相似。对广大参加建模竞赛且学过C语言的同学来说,M文件的编写是相当容易的。M文件可以分为脚本文件(Script)和函数文件(Function)两种。M文件不仅可以在MATLAB的程序编辑器中编写,也可以在其他的文本编辑器中编写,并以“.m”为扩展名加以存储。当用户要运行的指令较多时,直接从键盘上逐行输入指令显得比较麻烦,而脚本文件(命令文件)可以较好地解决这一问题。用户可以将一组相关命令编辑在同一个ASCII码命令文件中,运行时只需输入文件名字,MATLAB就会自动按顺序执行文件中的命令。函数文件是另一种形式的M文件,它的第一句可执行语句是以function引导的定义语句。在函数文件中的变量都是局部变量。脚本文件脚本类似于DOS下的批处理文件,不需要在其中输入参数,也不需要给出输出变量来接受处理结果,脚本仅是若干命令或函数的集合,用于执行特定的功能。脚本的操作对象为MATLAB工作空间内的变量,并且在脚本执行结束后,脚本中对变量的一切操作均会被保留。在MATLAB语言中也可以在脚本内部定义变量,并且该变量将会自动地被加入到当前的MATLAB工作空间中,并可以为其他的脚本或函数引用,直到MATLAB被关闭或采用一定的命令将其删除。例如:%命令窗口中定义矩阵a,ba=pascal(3)a=111123136b=magic(3)b=816357492%在编辑器中编写下述命令

a=a+bb=a-ba=a-b在编辑器中编辑完上例的脚本文件后,保存至文件scripts—example中,然后在工作窗口中调用该脚本文件,

scripts—example>>aa=816357492>>bb=111123136其中矩阵a、b均是在工作空间中已定义完毕的,脚本运行时直接使用该变量,并对其进行操作,然后在命令窗口中调用该脚本,可以看到变量a、b已经进行了相互交换。函数文件MATLAB语言中,相对于脚本文件而言,函数文件是较为复杂的。函数需要给定输入参数,并能够对输入变量进行若干操作,实现特定的功能,最后给出一定的输出结果或图形等,其操作对象为函数的输入变量和函数内的局部变量等。MATLAB语言的函数文件包含如下5个部分。函数题头:指函数的定义行,是函数语句的第一行,在该行中将定义函数名、输入变量列表及输出变量列表等。HI行:指函数帮助文本的第一行,为该函数文件的帮助主题,当使用lookfor命令时,可以查看到该行信息。帮助信息:这部分提供了函数的完整的帮助信息,包括HI之后至第一个可执行行或空行为止的所有注释语句,通过MATLAB语言的帮助系统查看函数的帮助信息时,将显示该部分。函数体;指函数代码段,也是函数的主体部分。注释部分:指对函数体中各语句的解释和说明文本,注释语句是以%引导的。例如:Function[output1,output2]=function_example(input1,input2)%函数题头

%Thisisfunctiontoexchangetwomatrices%HI行

%input1,input2areinputvariables%帮助信息

%output1,output2areoutputvariables%帮助信息

output1=input2;%函数体

output2=input1;%函数体

%Theendofthisexamplefunction[a,b]=function_example(a,b)a=8163

温馨提示

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

评论

0/150

提交评论