当前位置:文档之家› MATLAB编程(第二版) 第四章

MATLAB编程(第二版) 第四章

MATLAB编程(第二版) 第四章
MATLAB编程(第二版) 第四章

目录

第四章循环结构 (1)

4.1 while循环 (1)

例4.1 (1)

4.2 for循环 (5)

例4.2 (6)

例4.3 (6)

例4.4 (8)

4.2.1 运算的细节 (9)

例4.5 (11)

4.2.2 break和continue语句 (12)

4.2.3 循环嵌套 (13)

4.3 逻辑数组与向量化 (14)

4.3.1 逻辑数组的重要性 (15)

例4.6 (15)

4.3.2 用if/else结构和逻辑数组创建等式 (17)

测试4.1 (17)

4.4 附加例子 (18)

例4.7 (18)

例4.8 (23)

4.5 总结 (28)

4.5.1 好的编程习惯总结 (29)

4.5.2 matlab总结 (29)

4.6 练习 (29)

4.1 (29)

4.2 (29)

4.3 (29)

4.4 (29)

4.5 (29)

4.6 (30)

4.7 (30)

4.9 (31)

4.10 (31)

4.11 (31)

4.12 (31)

4.13 (31)

4.14 (31)

4.15 (31)

4.16 (31)

4.17 (32)

4.18 (32)

4.19 (32)

4.20 (32)

4.21 (33)

4.22 (33)

4.23 (33)

4.24 (33)

4.25 (34)

4.26 (34)

4.27 (34)

4.28 (34)

第四章 循环结构

循环(loop)是一种matlab 结构,它允许我们多次执行一系列的语句。循环结构有两种基本形式:while 循环和for 循环。两者之间的最大不同在于代码的重复是如何控制的。在while 循环中,代码的重复的次数是不能确定的,只要满足用户定义的条件,重复就进行下去。相对地,在for 循环中,代码的重复次数是确定的,在循环开始之前,我们就知道代码重复的次数了。

4.1 while 循环

只要满足一定的条件,While 循环是一个重复次数不能确定的语句块。它的基本形如

句执行。如果expression 的值仍然非零,那么程序将会再次执行代码。直到expression 的值变为0,这个重复过程结束。当程序执行到while 语句且expression 的值为0之后,程序将会执行end 后面的第一个语句。

例4.1

统计分析在科学工程计算中,跟大量的数据打交道是非常平常的事,这些数据中的每一个数据都是对我们关心的一些特殊值的度量。本课程的第一次测验的成绩就是一个简单的例子。每一个成绩都对某一个学生在本课程中学到多少东西的度量。

许多的时侯,我们并不关心某一个单个数据。我们可以通过总结得到几个重要的数据,以此告诉我们数据的总体情况。例如,一组数据的平均数(数学期望)和标准差。平均数的定义如下:

∑==

N

i i

x

N

x 1

1 (4.1)

其中x i 代表n 个样本中的第i 个样本。如果所有的输入数据都可以在一个数组中得到,这些数据的平均数就可以通过公式(4.1)直接计算出来,或应用matlab 的内建函数mean 。

标准差的定义如下:

)

1()

(2

1

1

2--=

∑∑==N N x x N s N i N

i i i (4.2)

标准差则体现随机变量取值与其期望值的偏差。标准差的值较大,则表明该随机变量的取值与其期望值的偏差较大,反之,则表明此偏差较小。如果所有的输入数据都可以在一个数组中得到,这些数据的平均数就可以通过公式(4.2)直接计算出来,或应用matlab 的内建函数std 。本例的目的是要通过公式4.1,4.2计算平均数和标准差,向大家介绍while 循环的应用。我们要执行的算法是读取一个组数据,计算它们的平均数和标准差,最后输出结果。

答案:

程序必须能读取一系列的测量值,并能够计算出这些测量值的数学期望和标准差。在进行计算之前,我们有while 循环来读取这些测量值。

当所有的测量值输入完毕,我们必须通过一定的方法来告诉程序没有其它的数据输入了。在这里,我们假设所有测量值均为非负数,我们用一个负数来表示数据输入完毕。当一个负数输入时,程序将停止读取输入值,并开始计算这些数据的数学期望和方差。

1.陈述问题因为我们假设所有的输入数据为非负数,则合适地问题陈述为:计算一组测量数的平均数和方差,假设所有测量值为非负数?假设我们事先不知道有多少个测量数。一个负数的输入值将代表测量值输入的结束。

2.定义输入值和输出值这个程序的输入是未知数目的非负数。输出为这些非负数的平均数和标准差。顺便还要打印出输入数据的数据,以便于检测程序的正确性。

次运行中才有了检测值。

下一步,我们要计算出数学期望和标准差。这个步骤的伪代码就是公式(4.1)和(4.2)

与程序产生的结果进行比对。如果我们用三个输入值:3,4和5,那么它的平均数和标准差分别为

4123

1

11=?==∑=N i i x N x

1)

1()

(2

1

1

2

=--=

∑∑==N N x x N s N

i N

i i i

失误导致这个软件有一个致命的缺陷。你能指出来它吗?

我们的错误就在于我们没有检测程序所有可能的输入类型。请重看一遍程序。如果我们不输入数或者只输入一个数,那么上面的公式就会出现除以0的情况。这种除0错误将会在导致在命令窗口内出现divide-by-zero的警告,导致输出值为无穷大(NaN)。我们需要修改这个程序来解决这个问题,告诉用户这个问题是什么,并在适当的时侯停止。这个程序的修定版本为stats_2。在运行运算之前,我们必须检查是否有足够多的输入值。如果没

存储在一个向量内,并把向量作为函数的参数。在本章章末的练习中,将会要求你用标准的matlab函数创建一个新的版本程序。

4.2 for循环

for循环结构是另一种循环结构,它以指定的数目重复地执行特定的语句块。For循环

index读取的是数组expr的行数,然后程序执行循环体(loopbody),所以expr有多少列,循环体就循环多少次。expr经常用捷径表达式的]方式,即first:incr:last。

在for和end之前的语句我们称之为循环体。在for循环运转的过程中,它将被重复的执行。For循环结构函数如下:

1.在for循环开始之时,matlab产生了控制表达式

2.第一次进入循环,程序把表达式的第一列赋值于循环变量index,然后执行循环体内的语句。

3.在循环体的语句被执行后,程序把表达式的下一列赋值于循环变量index,程序将再一次执行循环体语句。

4.只要在控制表达式中还有剩余的列,步骤3将会一遍一遍地重复执行。我们要举大量的例子来说明for循环的操作。

10次。循环系数ii在第一次执行的时侯是1,第二次执行的时侯为2,依次类推,当最后一次执行时,循环指数为10。在第十次执行循环体之后,再也没有新的列赋值给控制表达式,程序将会执行end语句后面的第一句。注意在循环体在最后一次执行后,循环系数将会一直为10。

环指数ii在第一次执行时为1,第二次执行时为3,依此类推,最后一次执行时为9。在第五次执行循环体之后,再也没有新的列赋值给控制表达式,程序将会执行end语句后面的第一句。注意在循环体在最后一次执行后,循环系数将会一直为9。

循环指数ii在第一次执行时为1,第二次执行时为3,第三次执行时为7。循环指数在循环结束之后一直为7。

循环指数ii 在第一次执行时为行向量??????41,第二次执行时为??????54,第三次执行时为??

?

???76。

这个例子说明循环指数可以为向量。

例4.2

阶乘(factorial )函数

5]。这种循环将会执行5次,ii 值按先后顺序依次为1,2,3,4,5。n_factorial 最终的计算结果为1ⅹ2ⅹ3ⅹ4ⅹ5=120。

例4.3

计算the day of year

the day of year 是指这一年已经逝去的天数(包括当天)。在平年中,它的取值范围为1到365,在闰年中,它的取值范围1到366。编写一个matlab 程序,输入年,月,日,输入为对应的the of year 。

答案:

为了确定the day of year ,程序需要计算先前月份的天数之后,然后再计算当月已经过去了多少天,在求和的过程中将会用到for 循环。因为每一个月的天数不尽相同,所以我们要确定每一个月的正确天数。我们用switch 结构来确定它。

在闰年时,在二月后的某一天的the day of year 将会比平年时大1。因为在闰年的二月份多出一个2月29号。所以为了正确地计算出the day of year ,我们必须确定那一年是闰年。在公历中,闰年是这样规定的

1.能被400整除的年为闰年

2.能被

100整除但不能被400整除的年不为闰年 3.能被4整除但不能被100整除年为闰年 4.其余的年份不为闰年

我们将用到mod (求余)函数来确定一个数是否能被另一个数整除。如果函数的返回值为0,则说一个数能被另一个数整除,否则,则不然。

下面是一个用于计算the day of year 的程序。注意程序如何计算出前面月份总共的天

1.1999年不是闰年。它的1月1号对应的day of year是1,12月31号必定对应的是365。

2.2000年是一个闰年。它的1月1号对应的day of year是1,12月31号必定对应的是366。

3.2001年不是闰年。它的1月1号对应的day of year是30。这个程序5次运行后的结

例4.4

统计分析

执行如下算法:

输入一系列的测量数,计算它们的平均数和标准差。这些数可以是正数,负数或0。

答案:

这个程序必须能够读取大量数据,并能够计算出这些测量值的平均数和标准差。这些测量值可以是正数,负数或0。

因为我们再也不能用一个数来表示数据中止的标识了,我们要求用户给出输入值的个

数,然后用for循环读取所有数值。

下面的就是这个修定版本的程序。它允许各种输入值,请你自己验证下面5个输入值

4.2.1 运算的细节

既然我们已经看了许多for循环的例子。在用for循环时,我们必须检查许多重要的细节。

1.没有必要缩进for循环的循环体。即使所有语句都左对齐,matlab程序也会识别出这个循环。但缩进循环体能增强代码的可读性,所以建议大家缩进循环体。

好的编程习惯

对于for循环体总是要缩进两个或更多空格,以增强程序的可读性。

2.在for循环中,我们不能随意修改循环指数。循环指数常被用作计算器,

如果修改了它们将会导致一些奇怪而难以发现的错误。下面的一个例子将初始化一个函数的数组。但是语句“ii=5”的突然出现,导致只有a(5)得到了初始化,它得到了本应赋给

好的编程习惯

在循环体中绝不修改循环指数的值。

步骤:第一步,创建一个新数组。第二步,把旧数组的元素复制到新数组当中。第三步,把扩展的元素写入新数组。第四步,删除旧数组。对于大数组来说这些步骤是相当耗时的。

当一个for循环中存储了一个预先未定义的数组,在第一次循环执行的时侯,循环结构迫使matlab重复执行以上步骤。从另一方面说,如果在循环开始之前数组预先分配了数组的大小,那么复制就不需要了,执行代码的速度也将加快。下面代码片段向大家展示了在循环开始之前如何预先分配数组。

好的编程习惯

在循环执行开始之前,总是要预先分配一个数组,这样能大大增加循环运行的速度。

4.用for循环和向量计算是非常常见的。例如,下面的代码片段用for循环计算1到

慢15倍还多。这是由于matlab通过每一次循环时,每行都要翻译执行一次。也相当于matlab翻译执行了300行代码。相反,如果用向量算法,matlab只需要翻译执行4行代码。所以用向量语句它的执行速度非常快。

向量算法的缺点是需要很大的内存,因为一些间接的数组需要创建。这经常是一小点损失,所以要比for循环算法好的多。

在matlab中,用向量算法代替循环的算法的过程称之为向量化(vectorization)。向量化能够改进许多的matlab程序。

好的编程习惯

那种既可以用向量可以解决的问题,也可以用循环解决的问题,最好用向量解决,这是因为向量执行的速度快。

例4.5

比较向量算法和循环为了比较循环和向量算法执行若无事所用的时间,用两种方法编程并测试三个运算所花的时间。

1.用for循环计算1到10000的之间每一个整数的平方,而事先不初始化平方数组。

2.用for循环计算1到10000的之间每一个整数的平方,而事先初始化平方数组。

3.用向量算法计算计算1到10000的之间每一个整数的平方。

答案:

这个程序必须用上面提供的三种方示计算出1到10000之间的每一个整数的平方,并测试每一个种算法的时间。测试时间要用到matlab函数tic和toc。tic函数复位内建计时器,而toc函数则从最后一次调用tic以秒开始计时。

因为在许多的计算机中它的时间钟是相当粗略的,所以有必要多运行几次以获得相应的平均数。

4.2.2 break和continue语句

有两个附加语句可以控制while和for循环:break和continue语句。break语句可以中止循环的执行和跳到end后面的第一句执行,而continue只中止本次循环,然后返回循环的顶部。如果break语句在循环体中执行,那么体的执行中止,然后执行循环后的第一个可执行性语句。用在for循环中的break语句的例子如下:

语句在ii为3时执行,然后执行

语句只中止本次循环,然后返回循环的顶部。在for循环中的控制变量将会更

break和continue语句可用在while循环和for循环中。

4.2.3 循环嵌套

一个循环完全出现在另一个循环当中,这种情况经常发生。如果一个循环完全出现在另一个循环当中,我们称这两个循环为带嵌套的循环。下面的例子用两重for循环嵌套来

部循环的循环体将被执行3次,它的循环指数ii将会先后被赋值为1,2,3。当完全执行完内部的循环后,外部的for循环将会把2赋值于循环指数ii,然后内部的for循环将会再

当matlab遇到一个end语句,它将与最内部的开放结构联合。所以第一个end语句与语句“for jj = 1:3”,第二个end语句与语句“for ii = 1:3”联合。如果在循环嵌套中一个end语句突然被删除,将会产生许多难以发现的错误。

如果for循环是嵌套的,那么它们必须含有独立的循环变量。如果它们含有相同的循环变量,那么内部循环将改变外部循环指数的值。

如果break或continue语句出现在循环嵌套的内部,那么break语句将会在包含它的最

序将会打印出”End of inner loop”,外部循环指数将会增加1,内部循环的执行重新开始。

4.3 逻辑数组与向量化

在第二章中,我们提出matlab 有两个基本类型的数据类型:数字型与字符型。数字型数据包括数字,字符型数据包含字符。除这两个数据类型之外,还有第三类数据类:逻辑型。

“逻辑”数据类型在matlab 中并不真实存在。其实,它是带特定逻辑属性标准数字型数据类型。逻辑型数组通过所有的关系运算符和逻辑运算符创建。它们区别于数字型的是在调用whos 命令时,(logical)会出现在类型的后面。

这些语句将会产生两个数组a 和b 。a 将会产生一个数组????

??????987654321,b 将会产生一个特殊的含有逻辑属性????

??????111100000。当调用whos 命令时,结果如下。注意b 后面的(logical)

会把a 值赋于c ,从而使c 带有一定的逻辑性:

一个数组的逻辑属性可以通任何的数学运算去除。例如,如果我们在c 数组加0,数组的值不会改变,而它的逻辑属性将会消失

4.3.1 逻辑数组的重要性

逻辑数组有一个重要的属性——它在算术运算中能提供一个屏蔽(mask)。屏蔽(mask)是指一个数组,它从另一个数组选择所需的元素参与运算。指定的运算只在选择的元素上执行,而不执行原有的元素。

例如,假设数组a和b的定义如上节所示。那么语句a(b)=sqrt(a(b))会计算a中相应的元素的平方根,相应的元素是指与b数组中的非零元素相对应的数组a中的元素。其他元

例4.6

用逻辑数数组进行屏蔽运算为了比较循环结构,选择结构与应用逻辑数组运算的快慢,我们进行下面两个计算,并对它进行计时。

1.创建一个含10000个元素的数组,其值依次为1到10000之间的整数。用for循环和if结构计算大于5000的元素的平方根。

2.创建一个含10000个元素的数组,其值依次为1到10000之间的整数。用逻辑数组计算大于5000的元素的平方根。

答案:

这个程序必须创建一个含10000个元素的数组,其值依次为1到10000之间的整数。

用两种不同的方法计算出大于5000的元素的平方根。

好的编程习惯

如果用可能的话,可用逻辑函数选择数组中的元素。如果逻辑数组进行运算,要比循环快得多。

4.3.2 用if/else结构和逻辑数组创建等式

逻辑数组经常被用来替代for循环中的if/else结构。正如我们在上节所看到的,把逻辑运算当作一个屏蔽来选择数组中的某些元素进行运算。如果你要利用那些没有被选择到的元素进行运算,只需要在逻辑屏蔽上加一个非运算符(-)。例如,假设我们要计算一个二维数组中所有的大于5的元素的平方根,然后其余的数的平方。利用循环和选择结构的代码

测试4.1

本测试提供了一个快速的检查方式,看你是否掌握了4.1到4.3的基本内容。如果你对本测试有疑问,你可以重读4.1到4.3,问你的老师,或和同学们一起讨论。在附录B中可以找到本测试的答案。

定义域为-6π

??

?=0

sin )(t t f e l s e w h r e r 0 >s i n t t w h e r e a l l f o r 另一次用逻辑数组。

4.4 附加例子

例4.7

用最小二乘法画噪声数据的近似曲线

下落物体将会作匀加速度运动,它的速度符合下面的公式

v(t) = at + v 0 (4.3)

v(t)代表物体在t 时刻的速度。加速度为g ,初速度v 0为0。这个公式出现在基础物理学中,我们大家都非常的熟悉。如果我们要画出下落物体的速度时间图象,我们得到的(v ,t )测量值应当在同一条直线上。但是,学习物理的同学都知道,在实验室得到的测量值不一定是直线。为什么会这样呢?因为所有的测量都有误差。在所有测量值中都有一定的噪声。

在工程和科研方面,有许多像这个例子一样带有噪声,而我们希望得到最符合的结果。这个问题叫做线性待定问题。给出一系列带噪声的测量值(x ,y ),它遵循一条直线,如何确定“最符合”这条直线的解析式呢。

如果我们确定了待定系数m 和b ,那么我们就确定了解析式4.4。

y=mx+b (4.4)

确定待定系数m 和b 的标准方法为最小二乘法。之所以称为最小二乘法,是因为根据偏差的平方和为最小的条件来选择常数m 和b 的。公式如下:

x x x y

x xy m )()()()(2∑∑∑∑--=

(4.5)

x m y b -=

(4.6)

其中,∑x 代表所有测量值x 之和,∑y 代表所有测量值y 之和,∑xy 代表所有对应的x 与y 的乘积之和,x 代表测值量x 的数学期望。y 代表测值量y 的数学期望。已知有一系列含有噪声的数据(x ,y ),编写程序用最小二乘法计算出m 和b 。数据要求从键盘输入,画出每一个数据点还有画出最适合的直线。

答案:

1. 陈述问题

已知有一系列含有噪声的数据(x,y)用最小二乘法计算m和b。数据要求从键盘输入,画出每一个数据点还有画出最适合的直线。

2. 定义输入输出值

这个程序所需的输入值为点的个数,以及点的坐标。输出是用最小二乘法得到的斜率以及y上的截距。

3. 设计算法

中使用input函数读取输入量(x,y)。每一个输入值将会产生一个数组([x,y]),然后这个函数将会返回这个数组到调用程序。注意在这里应用for循环是合适的,因为我们事先知道循环要执行多少次。

用最小二乘法得到解析式对应的直线用2pixel的实直线画出。在此之前我们要用到hold on 命令。画完直线之后,调用hold off命令。我们在图象中将会添加相应的标题,以及相应的图例。

Matlab程序设计教程第二版刘卫国课后参考答案(供参考)

第二章 1 求下列表达式的值。 (1) w=sqrt(2)*(1+0.34245*10^(-6)) (2) a=3.5; b=5; c=-9.8; x=(2*pi*a+(b+c)/(pi+a*b*c)-exp(2))/tan(b+c)+a (3) a=3.32; b=-7.9; y=2*pi*a^(2)*[(1-pi/4)*b-(0.8333-pi/4)*a] (4) t=[2,1-3*i;5,-0.65]; z=1/2*exp(2*t)*log(t+sqrt(1+t^(2))) 2 求下列表达式 A=[-1,5,-4;0,7,8;3,61,7]; B=[8,3,-1;2,5,3;-3,2,0]; (1) A+6*B A^2-B+eye (2) A*B A.*B B.*A (3) A/B B\A (4) [A,B] [A([1,3],:);B^2] 3 根据已知,完成下列操作 (1) A=[23,10,-0.778,0;41,-45,65,5;32,5,0,32;6,-9.54,54,3.14]; K=find(A>10&A<25); A(K) (2) A=[23,10,-0.778,0;41,-45,65,5;32,5,0,32;6,-9.54,54,3.14]; B=A(1:3,:) C=A(:,1:2) D=A(2:4,3:4) E=B*C (3) E

2 用if语句 score=input('请输入成绩:'); if score>=90&&score<=100 disp('A'); elseif score>=80&&score<=89 disp('B'); elseif score>=70&&score<=79 disp('C'); elseif score>=60&&score<=69; disp('D'); elseif score<60&&score>=0; disp('E'); else disp('出错'); end 用switch语句 score=input('请输入成绩:'); switch fix(score/10) case {9,10} disp('A'); case {8} disp('B'); case {7} disp('C'); case {6} disp('D'); case {0,1,2,3,4,5} disp('E'); otherwise disp('出错'); end 第四章1题 1) X=0:10; Y=x-x.^3/6; P lot(x,y) 2) t=0:0.01:2*pi; x=8.*cos(t); y=4*sqrt(2).*sin(t); plot(x,y) 2题

《MATLAB程序设计与应用(刘卫国)》(第二版) 答案

《MATLAB程序设计与应用(刘卫国)》(第二版)实验一MATLAB运算基础 1.(1) z1=2*sin(pi*85/180)/(1+exp(2)) (2)x=[2,1+2i;-0.45,5]; z2=log(x+sqrt(1+x.^2))/2 (3)a=-3.0:0.1:3.0; z3=0.5*(exp(0.3*a)-exp(-0.3*a)).*sin(a+0.3)+log((0.3+a)/2) (4)t=0:0.5:2.5; z4=(t>=0&t<1).*t.^2+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3).*(t.^2-2*t+1) 2. A=[12,34,-4;34,7,87;3,65,7]; B=[1,3,-1;2,0,3;3,-2,7]; (1)a=A+6*B b=A-B+eye(size(A)) %I=eye(size(A)) (2)c=A*B d=A.*B (3)e=A^3 f=A.^3 (4)g=A/B h=B\A (5)m=[A,B] n=[A([1,3],:);B^2] 3. A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20;21,22,23,24,25]; B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11]; (1)C=A*B (2)D=C(3:end,2:end) 4.(1) a=100:999; b=rem(a,21)==0; c=find(b); d=length(c) (2)ch='Just as Bianhaiman said,Xiehong is ...'; e=find(ch>='A'&ch<='Z'); ch(e)=[] 实验二 MATLAB矩阵分析与处理 1.E=eye(3);

刘卫国版MATLAB程序设计与应用课后实验六八九

实验六 高层绘图操作 %第一题: 程序代码如下: x=linspace(0,2*pi,101); y=(0.5+3*sin(x)./(1+x.^2)).*cos(x); plot(x,y) 01234567 -1 -0.5 0.5 1 1.5 %第二题: %(1) 程序代码如下: x=linspace(-2*pi,2*pi,100); y1=x.^2; y2=cos(2*x); y3=y1.*y2; plot(x,y1,'b-',x,y2,'r:',x,y3,'y--'); text(4,16,'\leftarrow y1=x^2'); text(6*pi/4,-1,'\downarrow y2=cos(2*x)'); text(-1.5*pi,-2.25*pi*pi,'\uparrow y3=y1*y2');

-8 -6 -4 -2 2 4 6 8 -30-20 -10 10 20 30 40 %(2) 程序代码如下: x=linspace(-2*pi,2*pi,100); y1=x.^2; y2=cos(2*x); y3=y1.*y2; subplot(1,3,1);%分区 plot(x,y1); title('y1=x^2');%设置标题 subplot(1,3,2); plot(x,y2); title('y2=cos(2*x)'); subplot(1,3,3); plot(x,y3); title('y3=x^2*cos(2*x)');

-10 10 0510 15202530 35 40y1=x 2 -10 10 -1-0.8 -0.6 -0.4-0.200.20.4 0.6 0.8 1y2=cos(2*x) -10 10 -30-20 -10 10 20 30 40 y3=x 2*cos(2*x) %(3) 程序代码如下: x=linspace(-2*pi,2*pi,20); y1=x.^2; subplot(2,2,1);%分区 bar(x,y1); title('y1=x^2的条形图');%设置标题 subplot(2,2,2); stairs(x,y1); title('y1=x^2的阶梯图'); subplot(2,2,3); stem(x,y1); title('y1=x^2的杆图'); subplot(2,2,4); fill(x,y1,'r');%如果少了'r'则会出错 title('y1=x^2的填充图'); %其他的函数照样做。

matlab程序设计与应用第二版习题答案

matlab程序设计与应用第二版习题答案【篇一:matlab程序设计与应用(第二版)实验答案】 %实验一 matlab运算基础 %第1题 %(1) z1=2*sin(85*pi/180)/(1+exp(2)) %(2) x=[2,1+2i;-0.45,5]; z2=0.5*log(x+sqrt(1+x.^2)) %(3) a=-3.0:0.1:3.0; z3=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2) %(4) t=0:0.5:2.5; z4=t.^2.*(t=0t1)+(t.^2-1).*(t=1t2)+(t.^2-2*t+1).*(t=2t3) %第2题 a=[12 34 -4;34 7 87;3 65 7]; b=[1 3 -1;2 0 3;3 -2 7]; a+6*b a-b+eye(size(a)) a*b a.*b a^3 a.^3 a/b b\a [a,b] [a([1,3],:);b^2] %第3题 a=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25] b=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] c=a*b f=size(c) d=c(f(1)-2:f(1),f(2)-1:f(2)) whos %第4题 %(1):

a=100:999; b=rem(a,21); c=length(find(b==0)) %(2): a=lsdhksdlkklsdkl; k=find(a=aa=z); a(k)=[] %实验二 matlab矩阵分析与处理 %第1题 e=eye(3); r=rand(3,2); o=zeros(2,3); s=diag([2,3]); a=[e,r;o,s]; a^2 b=[e,(r+r*s);o,s^2] %第2题 h=hilb(5) p=pascal(5) hh=det(h) hp=det(p) th=cond(h) tp=cond(p) %第3题 a=fix(10*rand(5)) h=det(a) trace=trace(a) rank=rank(a) norm=norm(a) %第4题 a=[-29,6,18;20,5,12;-8,8,5] [v,d]=eig(a) %数学意义略 %第5题方法一 %(1): a=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6]; b=[0.95,0.67,0.52]; x=inv(a)*b %(2):

MATLAB程序设计及应用(第二版)课后实验答案

。 Matlab课后实验题答案 《 实验一 MATLAB运算基础 1. 先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。 (1) 0 12 2sin85 1 z e = + (2) 21 ln( 2 z x =,其中 212 0.455 i x + ??=?? -?? (3) 0.30.3 3 0.3 sin(0.3)ln, 3.0, 2.9,,2.9,3.0 22 a a e e a z a a - -+ =++=--

(4) 22 42011 122123t t z t t t t t ?≤

) 3. 设有矩阵A 和B 1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况。 4. 完成下列操作: (1) 求[100,999]之间能被21整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果:

MATLAB程序设计与应用(第二版)

阅阅读读时时::请请选选择择““视视图图||文文档档结结构构图图””,,弹弹出出文文档档中中的的标标题题链链接接。。数学软件 MATLAB 程序设计与应用

第1章MATLAB系统环境 1.1 MATLAB概貌 1.2 MATLAB环境的准备 1.3 MATLAB操作界面 1.4 MATLAB帮助系统 自上世纪80年代以来,出现了科学计算语言,亦称数学软件。 MATLAB Mathematica Mathcad Maple LINDO LINGO 1.1 MATLAB概貌p3 MATLAB 是MATrix LABoratory(矩阵实验室)的缩写。 1984年由Math Works 公司推出,现已成为国际公认的优秀的工程应用开发环境,是影响最大,流行最广的科学计算语言。 1.1.1 MATLAB的发展

1. 从MATLAB 4.2c开始,每个版本增加了一个建造编号; 2. 例如MATLAB7.6的建造编号是R2008a。说明MATLAB7.6与MATLAB2008a是等同的; 3. 对于建造编号,正规化以后,每年出两个版本。一般来说。a是测试版,b是正式版。a是前半 年出,b是后半年出。 教材采用MATLAB7.0(R14,2004) 实验室采用MATLAB 7.8(R2009a,2009.3,汉化) 1.1.2 MATLAB的主要功能p4 ◆数值计算和符号计算功能 ◆绘图功能 ◆语言体系 ◆MATLAB工具箱 (1) 数值计算和符号计算功能 MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。 MATLAB先后和著名的符号计算语言Maple与MuPAD(从MATLAB 2008b开始使用MuPAD)相结合,使得MATLAB具有符号计算功能。 (2) 绘图功能 可以绘制二维和三维图形。 MATLAB提供了两个层次的绘图操作: ●对图形句柄进行的低层绘图操作; ●建立在低层绘图操作之上的高层绘图操作。 (3) 语言体系 MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 MATLAB是解释性语言,不能脱离MATLAB环境而独立运行。 (4) MATLAB工具箱 MATLAB包含两部分内容:基本部分和各种可选的工具箱。 MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 基本部分 构成MATLAB的核心内容,也是使用和构造工具箱的基础。 功能性工具箱 主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。 学科性工具箱 Control System Toolbox 控制系统工具箱 Signal Processing Toolbox 信号处理工具箱 Neural Network Toolbox 神经网络工具箱 Optimization Toolbox 最优化工具箱 Financial Toolbox 金融工具箱 Statistics Toolbox 统计学工具箱 开始→工具箱 MATLAB具备很强的开放性 除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。

MATLAB程序设计与应用(第二版)实验参考答案

MATLAB程序设计与应用(第二版)实验参考答案 %实验一MATLAB运算基础 %第一题 %(1) z1=2*sin(85*pi/180)/(1+exp(2)) %(2) x=[2,1+2i;-0.45,5]; z2=0.5*log(x+sqrt(1+x.^2)) %(3) a=-3.0:0.1:3.0; z3=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2) %(4) t=0:0.5:2.5; z4=t.^2.*(t>=0&t<1)+(t.^2-1).*(t>=1&t<2)+(t.^2-2*t+1).*(t>=2&t<3) %第二题 A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; A+6*B A-B+eye(size(A)) A*B A.*B A^3 A.^3 A/B B\A [A,B] [A([1,3],:);B^2] %第三题 A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25] B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] C=A*B F=size(C) D=C(F(1)-2:F(1),F(2)-1:F(2)) whos %第四题 %(1): A=100:999; B=rem(A,21); C=length(find(B==0)) %(2): A='lsdhKSDLKklsdkl';

k=find(A>='A'&A<='Z'); A(k)=[] %实验二MATLAB矩阵分析与处理 %第一题 E=eye(3); R=rand(3,2); O=zeros(2,3); S=diag([2,3]); A=[E,R;O,S]; A^2 B=[E,(R+R*S);O,S^2] %第二题 H=hilb(5) P=pascal(5) Hh=det(H) Hp=det(P) Th=cond(H) Tp=cond(P) %第三题: A=fix(10*rand(5)) H=det(A) Trace=trace(A) Rank=rank(A) Norm=norm(A) %第四题: A=[-29,6,18;20,5,12;-8,8,5] [V,D]=eig(A) %数学意义略 %第五题方法一: %(1): A=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6]; b=[0.95,0.67,0.52]'; x=inv(A)*b %(2): B=[0.95,0.67,0.53]'; x=inv(A)*B %(3): cond(A) %第五题方法二: A=hilb(4) A(:,1)=[] A(4,:)=[] B=[0.95,0.67,0.52]';

(完整word版)MATLAB程序设计及应用(第二版)课后实验答案

Matlab课后实验题答案 实验一 MATLAB运算基础 1. 先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。 (1) 0 12 2sin85 1 z e = + (2) 21 ln( 2 z x =+,其中 212 0.455 i x + ??=?? -?? (3) 0.30.3 3 0.3 sin(0.3)ln, 3.0, 2.9,,2.9,3.0 22 a a e e a z a a - -+ =++=--L (4) 2 2 4 2 01 112 2123 t t z t t t t t ?≤< ? =-≤< ? ?-+≤< ? ,其中t=0:0.5:2.5 2. 已知:

1234413134787,2033657327A B --???? ????==???? ????-???? 求下列表达式的值: (1) A+6*B 和A-B+I (其中I 为单位矩阵) (2) A*B 和A.*B (3) A^3和A.^3 (4) A/B 及B\A (5) [A,B]和[A([1,3],:);B^2] 解: 3. 设有矩阵A 和B 1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况。

4. 完成下列操作: (1) 求[100,999]之间能被21整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果: (2). 建立一个字符串向量 例如: ch='ABC123d4e56Fg9';则要求结果是: 实验二 MATLAB 矩阵分析与处理 1. 设有分块矩阵33 322322E R A O S ?????? =? ??? ,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩

MATLAB程序设计与应用课后习题答案

西安科技大学MATLAB程序设计 专业:信息与计算科学 班级:1001班 学号:1008060129 姓名:刘仲能 2012年6月27日

实验一 2.已知: ?? ??? ?????-=76538773443412A ,???? ? ?????--=723302131B 求下列表达式的值: (1)A+6*B 和A-B+I (其中I 为单位矩阵) (2)A*B 和A.*B (3)A^3和A.^3 (4)A/B 及B\A (5)[A,B]和 [A([1,3],:);B^2]

3.设有矩阵A 和B ????? ??? ??? ?? ???=252423222120191817161514 13121110987654321A ,??????? ? ????????--=11134079423096171603B (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况 (1) (2) (3)

4.完成下列操作 (1)求[100,999]之间能被21整除的数的个数。(2)建立一个字符串向量,删除其中的大写字母。 (1)(2)

实验二 3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。 运行截图: A 矩阵的行列式值、迹、秩分别如下: 范数如下: 4.已知 ?? ?? ? ?????--=5881252018629A 求A 的特征值及特征向量,并分析其数学意义。 运行截图:

5.下面是一个线性方程组:???? ? ?????=????????????????????52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1) 求方程的解; (2) 将方程右边向量元素 改为0.53,在求解,并比较 的变化和解的相对 变化; (3) 计算系数矩阵A 的条件数并分析结论。 (2) 变大,其解中,相对未变化前的 的解:x1变大,x2变小,x3变大。 (3) 由于A 矩阵的条件数很大,故当线性方程组中的b 变大时,x 也将发生很大的变

MATLAB程序设计教学大纲

《MATLAB程序设计教学大纲》 课程代码:1010330 实验教学:24学时+16学时 课程学分:2.5 先修课程:C/C++程序设计语言或VB程序设计语言 课程的性质和教学目标 《MATLAB程序设计》是工科大学非计算机类理、工、管理专业学生的一门计算机必修基础课。MATLAB 作为一种高级科学计算软件,是进行算法开发、数据可视化、数据分析以及数值计算的交互式应用开发环境。本课程注重实际能力的培养,使学生能够运用MATLAB进行一般的工程计算,掌握MATLAB的基本技术。 二、教学要求: 课程的指导思想是“学以致用”,课程知识点系统全面,能锻炼学生的动手能力。课堂教学讲述了MATLAB基本技术,包括基本计算、矩阵处理、符号运算、计算结果可视化等,结合实际问题,探索“理论结合实践”的教学模式,注重精讲多练,培养学生利用MATLAB解决专业实际工程问题的能力。课堂教学覆盖不到之处通过实验课让学生在实践中学习,力求实现“教学与自学相结合”的教学原则,重视创新能力和综合能力的培养。 三、教学内容 第一章 MATLAB课程概述() 1. MATLAB开发环境介绍

2. MATLAB环境设置和路径设置 3. MATLAB的安装与激活 第二章 MATLAB程序设计基础() 1. 常量与变量的使用方法; 2. 数组的创建和使用方法; 3. 各种运算符的使用方法; 4. 函数文件的创立和使用:m文件的创建和调用方法; 5. 三种控制结构(顺序结构、分支结构和循环结构) 6. 调试技巧 第三章 MATLAB数值计算() 1. 矩阵运算(矩阵的构造,矩阵的基本运算和高级运算) 2. 多项式运算(多项式的构造和运算) 3. 其他数值计算 4. 数据处理(数据插值和曲线拟合) 第四章 MATLAB符号计算 1. 符号定义 2. 符号运算(初等代数运算,复合函数,反函数,极限,泰勒展开,级数求和,符号微分,符号积分等) 第五章图形处理 1. 2D图形处理 2. 3D图形处理 3. 声音与动画的实现 第六章图形用户界面编程简介

《非参数统计》与MATLAB编程 第四章 符号秩和检验法

第四章符号和检验法 函数 signrank 格式 p = signrank(x) 原假设为x的中位数为0,显著性水平为0.05的双侧检验。 p = signrank(x,m) 原假设为x的中位数为m,显著性水平为0.05的双侧检验。 p = signrank(x,m,alpha) 原假设为x的中位数为m,显著性水平为alpha的双侧检验。 [p,h] = signrank(...,'alpha', alpha) 例:[p,h] = signrank(...,'alpha', 0.01) [p,h,stats] = signrank(...,'method', ‘exact’) 用精确的方法 [p,h] = signrank(...,'method', ‘approximate’) 用正态近似的方法 [p,h,stats]=signrank(x,y,'alpha',0.01,'method','exact') [p,h,stats]=signrank(y1,y2,0.01,'method','approximate') 所P值除以2,得到相应单侧检验的P值。 §4.2 x=[20.3 23.5 22 19.1 21 24.7 16.1 18.5 21.9 24.2 23.4 25]; y=[18 21.7 22.5 17 21.2 24.8 17.2 14.9 20 21.1 22.7 23.7];

[p,h,stats]=signtest(x,y) p = 0.3877 h = stats = sign: 4 length(find((x-y)>0)) ans = 8 2*(1-binocdf(7,12,0.5)) ans = 0.3877 p =0.3877与书上算的不一样,书上算错了。符号检验接受原假设。

电子书_MATLAB程序设计与应用(第二版)

阅阅读读时时::请请选选择择““视视图图 || 文文档档结结构构图图””,,弹弹出出文文档档中中的的标标题题链链接接。。 数学软件 MATLAB 程序设计与应用

第1章MATLAB系统环境 1.1 MATLAB概貌 1.2 MATLAB环境的准备 1.3 MATLAB操作界面 1.4 MATLAB帮助系统 自上世纪80年代以来,出现了科学计算语言,亦称数学软件。 MATLAB Mathematica Mathcad Maple LINDO LINGO 1.1 MATLAB概貌p3 MATLAB 是MATrix LABoratory(矩阵实验室)的缩写。 1984年由Math Works 公司推出,现已成为国际公认的优秀的工程应用开发环境,是影响最大,流行最广的科学计算语言。 1.1.1 MATLAB的发展 2. 例如MATLAB7.6的建造编号是R2008a。说明MATLAB7.6与MATLAB2008a是等同的;

3. 对于建造编号,正规化以后,每年出两个版本。一般来说。a是测试版,b是正式版。a是前半 年出,b是后半年出。 教材采用MATLAB7.0(R14,2004) 实验室采用MATLAB 7.8(R2009a,2009.3,汉化) 1.1.2 MATLAB的主要功能p4 ◆数值计算和符号计算功能 ◆绘图功能 ◆语言体系 ◆MATLAB工具箱 (1) 数值计算和符号计算功能 MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。 MATLAB先后和著名的符号计算语言Maple与MuPAD(从MATLAB 2008b开始使用MuPAD)相结合,使得MATLAB具有符号计算功能。 (2) 绘图功能 可以绘制二维和三维图形。 MATLAB提供了两个层次的绘图操作: ●对图形句柄进行的低层绘图操作; ●建立在低层绘图操作之上的高层绘图操作。 (3) 语言体系 MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 MATLAB是解释性语言,不能脱离MATLAB环境而独立运行。 (4) MATLAB工具箱 MATLAB包含两部分内容:基本部分和各种可选的工具箱。 MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 基本部分 构成MATLAB的核心内容,也是使用和构造工具箱的基础。 功能性工具箱 主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。 学科性工具箱 Control System Toolbox 控制系统工具箱 Signal Processing Toolbox 信号处理工具箱 Neural Network Toolbox 神经网络工具箱 Optimization Toolbox 最优化工具箱 Financial Toolbox 金融工具箱 Statistics Toolbox 统计学工具箱 开始→工具箱 MATLAB具备很强的开放性 除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。

Matlab程序设计与应用第二版刘卫国

实验一:T1: %%第一小题 z1=2*sin(85*pi/180)/(1+exp(2)) %%第二小题 x=[2,1+2i;-0.45,5]; z2 %%第三小题 a=-3.0:0.1:3.0; 0.3)+log((0.3+a)/2) %%第四题 t=0:0.5:2.5 z4=(t>=0&t<1).*(t.^2)+(t>=1&t<2).*(t .^2-1)+(t>=2&t<3).*(t.^2-2*t+1) T2: A=[12,34,-4;34,7,87;3,65,7] B=[1,3,-1;2,0,3;3,-2,7] disp ('A+6*B='); disp(A+6*B); disp('A-B+I=');disp(A-B+eye(3)); disp('A*B=');

disp(A*B); disp('A.*B='); disp(A.*B); disp('A^3='); disp(A^3); disp('A.^3='); disp(A.^3); disp('A/B='); disp(A/B); disp('B\A='); disp(B\A); disp('[A,B]='); disp([A,B]); disp('[A([1,3],:);B^2]='); disp([A([1,3],:);B^2]); T3: z=1:25; A=reshape(z,5,5)'; B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11];C=A*BD=C(3:5,2:3) T4-1: a=100:999;

b=find(rem(a,21)==0); c=length(b) T4-2: a=input('请输入一个字符串:','s'); b=find(a>='A'&a<='Z'); a(b)=[]; disp(a); 实验二: T1: E=eye(3),R=rand(3,2),O=zeros(2,3),S=d iag([1,2]); A=[E,R;O,S] disp('A^2='); disp(A^2); disp('[E,R+RS;O,S^2]'); B=[E,R+R*S;O,S^2] T2: H=hilb(5) P=pascal(5)Hh=det(H) Hp=det(P) Th=cond(H)

MATLAB程序设计与应用

实验一 MATLAB 运算基础 第二题:已知 A=??????????7653877344-3412 B=??? ? ??????72-33021-31 求下列问题: 1) A+6*B 和A-B+I 2) A*B 和A.*B 3) A^3 A.^3 4) A/B B\A 5) [A,B] [A(1,3),:B.^2] 解: >> A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; I=[1 0 0;0 1 0;0 0 1]; (1) >> A+6*B ans = 18 52 -10 46 7 105 21 53 49 >> A-B+I ans = 12 31 -3 32 8 84 0 67 1 (2) >> A*B ans = 68 44 62 309 -72 596 154 -5 241 >> A.*B

ans = 12 102 4 68 0 261 9 -130 49 (3) >> A^3 ans = 37226 233824 48604 247370 149188 600766 78688 454142 118820 >> A.^3 ans = 1728 39304 -64 39304 343 658503 27 274625 343 (4) >> A/B ans = 16.4000 -13.6000 7.6000 35.8000 -76.2000 50.2000 67.0000 -134.0000 68.0000 >> B\A ans = 109.4000 -131.2000 322.8000 -53.0000 85.0000 -171.0000 -61.6000 89.8000 -186.2000 (5) >> [A,B] ans =

MATLAB程序设计和应用课后习题答案解析

专业技术资料分享 西安科技大学MATLAB程序设计 专业:信息与计算科学 班级: 1001班 学号:1008060129 姓名:刘仲能 2012年6月27日

实验一 2.已知: ?? ??? ?????-=76538773443412A ,???? ? ?????--=723302131B 求下列表达式的值: (1)A+6*B 和A-B+I (其中I 为单位矩阵) (2)A*B 和A.*B (3)A^3和A.^3 (4)A/B 及B\A (5)[A,B]和 [A([1,3],:);B^2]

3.设有矩阵A 和B ????? ?? ?????????=25242322212019181716151413121110987654321A ,??????? ?????????--= 11134079423096171603B (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况 (1) (2) (3)

4.完成下列操作 (1)求[100,999]之间能被21整除的数的个数。 (2)建立一个字符串向量,删除其中的大写字母。 (1) (2) 实验二 3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。

运行截图: A 矩阵的行列式值、迹、秩分别如下: 范数如下: 4.已知 ?? ?? ? ?????--=5881252018629A 求A 的特征值及特征向量,并分析其数学意义。 运行截图:

5.下面是一个线性方程组:?? ??? ?????=???? ????????????????52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1) 求方程的解; (2) 将方程右边向量元素 改为0.53 ,在求解,并比较 的变化和解的相 对变化; (3) 计算系数矩阵A 的条件数并分析结论。 (2) 变大,其解中,相对未变化前的 的解:x1变大,x2变小,x3变大。 (3) 由于A 矩阵的条件数很大,故当线性方程组中的b 变大时,x 也将发生很大的变化,即数值稳定性较差。 实验三 3.硅谷公司员工的工资计算方法如下: (1)工作时数超过120小时者,超过部分加发15%; (2)工作时数低于60小时者,扣发700元; (3)其余按每小时84元计发。

相关主题
文本预览
相关文档 最新文档