[信息与通信]matlab编程第二版 第四章

上传人:自*** 文档编号:80030380 上传时间:2019-02-18 格式:DOC 页数:35 大小:527KB
返回 下载 相关 举报
[信息与通信]matlab编程第二版 第四章_第1页
第1页 / 共35页
[信息与通信]matlab编程第二版 第四章_第2页
第2页 / 共35页
[信息与通信]matlab编程第二版 第四章_第3页
第3页 / 共35页
[信息与通信]matlab编程第二版 第四章_第4页
第4页 / 共35页
[信息与通信]matlab编程第二版 第四章_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《[信息与通信]matlab编程第二版 第四章》由会员分享,可在线阅读,更多相关《[信息与通信]matlab编程第二版 第四章(35页珍藏版)》请在金锄头文库上搜索。

1、目录第四章 循环结构14.1 while循环1例4.114.2 for循环5例4.26例4.36例4.484.2.1 运算的细节9例4.5114.2.2 break和continue语句124.2.3 循环嵌套134.3 逻辑数组与向量化144.3.1 逻辑数组的重要性15例4.6154.3.2 用if/else结构和逻辑数组创建等式17测试4.1174.4 附加例子18例4.718例4.8234.5 总结284.5.1 好的编程习惯总结294.5.2 matlab总结294.6 练习294.1294.2294.3294.4294.5294.6304.7304.9314.10314.11314

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

3、足一定的条件,While循环是一个重复次数不能确定的语句块。它的基本形如下while expression. code block.end如果expression的值非零(true),程序将执行代码块(code block),然后返回到while语句执行。如果expression的值仍然非零,那么程序将会再次执行代码。直到expression的值变为0,这个重复过程结束。当程序执行到while语句且expression的值为0之后,程序将会执行end后面的第一个语句。while循环的伪代码为while expr.end我们将用whlie循环编写一个统计分析的程序。例4.1统计分析在科学工程计算

4、中,跟大量的数据打交道是非常平常的事,这些数据中的每一个数据都是对我们关心的一些特殊值的度量。本课程的第一次测验的成绩就是一个简单的例子。每一个成绩都对某一个学生在本课程中学到多少东西的度量。许多的时侯,我们并不关心某一个单个数据。我们可以通过总结得到几个重要的数据,以此告诉我们数据的总体情况。例如,一组数据的平均数(数学期望)和标准差。平均数的定义如下:(4.1)其中xi代表n个样本中的第i个样本。如果所有的输入数据都可以在一个数组中得到,这些数据的平均数就可以通过公式(4.1)直接计算出来,或应用matlab的内建函数mean。标准差的定义如下:(4.2)标准差则体现随机变量取值与其期望值

5、的偏差。标准差的值较大,则表明该随机变量的取值与其期望值的偏差较大,反之,则表明此偏差较小。如果所有的输入数据都可以在一个数组中得到,这些数据的平均数就可以通过公式(4.2)直接计算出来,或应用matlab的内建函数std。本例的目的是要通过公式4.1,4.2计算平均数和标准差,向大家介绍while循环的应用。我们要执行的算法是读取一个组数据,计算它们的平均数和标准差,最后输出结果。答案:程序必须能读取一系列的测量值,并能够计算出这些测量值的数学期望和标准差。在进行计算之前,我们有while循环来读取这些测量值。当所有的测量值输入完毕,我们必须通过一定的方法来告诉程序没有其它的数据输入了。在这

6、里,我们假设所有测量值均为非负数,我们用一个负数来表示数据输入完毕。当一个负数输入时,程序将停止读取输入值,并开始计算这些数据的数学期望和方差。1.陈述问题因为我们假设所有的输入数据为非负数,则合适地问题陈述为:计算一组测量数的平均数和方差,假设所有测量值为非负数假设我们事先不知道有多少个测量数。一个负数的输入值将代表测量值输入的结束。2.定义输入值和输出值这个程序的输入是未知数目的非负数。输出为这些非负数的平均数和标准差。顺便还要打印出输入数据的数据,以便于检测程序的正确性。3.设计算法这个程序可分为以下三大步:Accumulate the input dataCalculate the m

7、ean and standard deviationWrite out the mean, standard deviation, and number of points每一大步的为读取输入值。为达此目的,我们必须提示用户输入合适的值。当数据输入完毕,我们将计算出数据的个数,它们的和与平方和。这些步骤的伪代码如下所示Initialize n, sum_x, and sum_x2 to 0Prompt user for first numberRead in first xwhile x =0 nn+1 sum_xsum_x + x sum_x2sum_x2 + x2 Prompt user

8、for next number Read in next xend 注意我们必须在while循环开始之前,我们必须读取第一个值,这样在while循环第一次运行中才有了检测值。下一步,我们要计算出数学期望和标准差。这个步骤的伪代码就是公式(4.1)和(4.2)的matlab版本。x_bar sum_x / nstd_dev sqrt(n*num_x2 sum_x2) / (n*(n-1)最后我们写出输出结果:Write out the mean value x_barWrite out the standard deviation std_devWrite out the number of i

9、nput data points n4.将伪代码转化为相应的matlab语句最终的matlab程序如下% Script file: stats_1.m% Purpose:% To calculate mean and the standard deviation of% an input data set containing an arbitrary number% of input values.% Record of revisions:% Date Programmer Description of change% = = =% 12/05/97 S. J. Chapman Origi

10、nal code% Define variables:% n - The number of input samples% std_dev - The standard deviation of the input samples% sum_x - The sum of the input values% sum_x2 - The sum of the squares of the input values% x - An input data value% xbar - The average of the input samples% Initialize sums.n = 0; sum_

11、x = 0; sum_x2 = 0;% Read in first valuex = input(Enter first value: );% While Loop to read input values.while x = 0 % Accumulate sums. n = n + 1; sum_x = sum_x + x; sum_x2 = sum_x2 + x2; % Read in next value x = input(Enter next value: );end% Calculate the mean and standard deviationx_bar = sum_x /

12、n;std_dev = sqrt( (n * sum_x2 - sum_x2) / (n * (n-1) );% Tell user.fprintf(The mean of this data set is: %fn, x_bar);fprintf(The standard deviation is: %fn, std_dev);fprintf(The number of data points is: %fn, n);5.检测程序为检测这个程序,我们将手工算出一组简单数据的平均数和标准差,然后与程序产生的结果进行比对。如果我们用三个输入值:3,4和5,那么它的平均数和标准差分别为我们把这些值

13、输入程序后,产生的结果为 stats_1Enter first value: 3Enter next value: 4Enter next value: 5Enter next value: -1The mean of this data set is: 4.000000The standard deviation is: 1.000000The number of data points is: 3.000000这个结果说明了程序的正确性。在这个例子中,我们并没有完全遵循设计过程。这个失误导致这个软件有一个致命的缺陷。你能指出来它吗?我们的错误就在于我们没有检测程序所有可能的输入类型。请重看

14、一遍程序。如果我们不输入数或者只输入一个数,那么上面的公式就会出现除以0的情况。这种除0错误将会在导致在命令窗口内出现dividebyzero的警告,导致输出值为无穷大(NaN)。我们需要修改这个程序来解决这个问题,告诉用户这个问题是什么,并在适当的时侯停止。这个程序的修定版本为stats_2。在运行运算之前,我们必须检查是否有足够多的输入值。如果没有,程序将打印出错误提示信息,并且跳出。你自己检测一下这个版本的程序。% Script file: stats_2.m% Purpose:% To calculate mean and the standard deviation of% an input data set containing an arbitrary number% of input values.% Record of revisions:% Date Programmer Description of change% = = =% 12/05/97 S. J. Chapman Original code% 1. 12/06/97 S. J. Chapman Correct divide-by-0 error if% 0 o

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号