(转载)从0开始学matlab(第14天)—while循环结构

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

1 while 循环

        只要满足一定的条件,While 循环是一个重复次数不能确定的语句块。它的基本形如下
        如果 expression 的值非零 (true) ,程序将执行代码块 (code block) ,然后返回到 while 语句执行。如果 expression 的值仍然非零,那么程序将会再次执行代码。直到 expression 的值变为 0 ,这个重复过程结束。当程序执行到 while 语句且 expression 的值为 0 之后,程序将会执行 end 后面的第一个语句。
        我们将用 whlie 循环编写一个统计分析的程序。
1
        统计分析在科学工程计算中,跟大量的数据打交道是非常平常的事,这些数据中的每一个数据都是对我们关心的一些特殊值的度量。本课程的第一次测验的成绩就是一个简单的例子。每一个成绩都对某一个学生在本课程中学到多少东西的度量。
        许多的时侯,我们并不关心某一个单个数据。我们可以通过总结得到几个重要的数据,以此告诉我们数据的总体情况。例如,一组数据的平均数 ( 数学期望 )和标准差。平均数的定义如下 :

标准差的定义如下:

        标准差则体现随机变量取值与其期望值的偏差。标准差的值较大,则表明该随机变量的取值与其期望值的偏差较大,反之,则表明此偏差较小。如果所有的输入数据都可以在一个数组中得到,这些数据的平均数就可以通过公式 (4.2) 直接计算出来,或应用 matlab 的内建函数 std 。本例的目的是要通过公式 4.1 4.2 计算平均数和标准差,向大家介绍 while循环的应用。我们要执行的算法是读取一个组数据,计算它们的平均数和标准差,最后输出结果。
答案 :
        程序必须能读取一系列的测量值,并能够计算出这些测量值的数学期望和标准差。在进行计算之前,我们有 while 循环来读取这些测量值。
        当所有的测量值输入完毕,我们必须通过一定的方法来告诉程序没有其它的数据输入了。在这里,我们假设所有测量值均为非负数,我们用一个负数来表示数据输入完毕。当一个负数输入时,程序将停止读取输入值,并开始计算这些数据的数学期望和方差。
        1.陈述问题因为我们假设所有的输入数据为非负数,则合适地问题陈述为 :计算一组测量数的平均数和方差,假设所有测量值为非负数 ;假设我们事先不知道有多少个测量数。一个负数的输入值将代表测量值输入的结束。
        2.定义输入值和输出值这个程序的输入是未知数目的非负数。输出为这些非负数的平均数和标准差。顺便还要打印出输入数据的数据,以便于检测程序的正确性。
        3.设计算法,这个程序可分为以下三大步 :
        累积输入数据,
        计算平均值和标准差
        写出平均值、标准差  
        每一大步的为读取输入值。为达此目的,我们必须提示用户输入合适的值。当数据输入完毕,我们将计算出数据的个数,它们的和与平方和。这些步骤的伪代码如下所示
将n,sum_x和sum_x2初始化为0
提示用户输入第一个数字
读入第一个x
while x >=0 (当x大于等于0时)
 n←n+1 (n加1)
 sum_x←sum_x + x (sum_x加上x)
 sum_x2←sum_x2 + x^2 (sum_x2加上x的平方)
 提示用户输入下一个数字
 读入下一个x
end(循环结束)

        注意我们必须在 while 循环开始之前,我们必须读取第一个值,这样在 while 循环第一次运行中才有了检测值。下一步,我们要计算出数学期望和标准差。这个步骤的伪代码就是公式(4.1)和(4.2) 的 matlab 版本。

x_bar ← sum_x / n
std_dev ← sqrt((n*num_x2 – sum_x^2) / (n*(n-1)))

        最后我们写出输出结果

写出平均值x_bar
写出标准差std_dev
写出输入数据点的数量n

        4.将伪代码转化为相应的 matlab 语句最终的 matlab 程序如下

% 脚本文件: stats_1.m
%
% 目的:
% 计算包含任意数量输入值的输入数据集的平均值和标准差。
%
% 定义变量:
% n——输入样本数
% std_dev——输入样本的标准差
% sum_x——输入值之和
% sum_x2——输入值平方的和
% x——一个输入数据值
% xbar——所有输入数据的平均值
% 初始化求和
n = 0; 
sum_x = 0; 
sum_x2 = 0;
% 读入第一个值
x = input('Enter first value: ');
% while循环来读取输入的值。
while x >= 0
    % 累计求和。
    n = n + 1; 
    sum_x = sum_x + x; 
    sum_x2 = sum_x2 + x ^ 2;
    % 读入下一个值
    x = input('Enter next value: '); 
end
% 计算均值和标准差。
x_bar = sum_x / n; 
std_dev = sqrt((n * sum_x2 - sum_x ^ 2)/(n*(n-1)));
    % 输出结果
fprintf('This data set的平均值为: %f\n', x_bar); 
fprintf('标准差:%f\n', std_dev); 
fprintf('数据点数:%f\n', n);

        5.检测程序为检测这个程序,我们将手工算出一组简单数据的平均数和标准差,然后与程序产生的结果进行比对。如果我们用三个输入值:34 和 5,那么它的平均数和标准差分别为

        这个结果说明了程序的正确性。在这个例子中,我们并没有完全遵循设计过程。这个失误导致这个软件有一个致命的缺陷。你能指出来它吗?
        我们的错误就在于我们没有检测程序所有可能的输入类型。请重看一遍程序。如果我们不输入数或者只输入一个数,那么上面的公式就会出现除以 0 的情况。这种除 0 错误将会在导致在命令窗口内出现 divide-by-zero 的警告,导致输出值为无穷大(NaN)。我们需要修改这个程序来解决这个问题,告诉用户这个问题是什么,并在适当的时侯停止。这个程序的修定版本为 stats_2。在运行运算之前,我们必须检查是否有足够多的输入值。如果没有,程序将打印出错误提示信息,并且跳出。你自己检测一下这个版本的程序。
        注意平均数和标准差可以通过 MATLAB 的内建函数 mean std 计算得到,输入数据存储在一个向量内,并把向量作为函数的参数。
% 脚本文件: stats_2.m 
%
% 目的:
% 计算包含任意数量输入值的输入数据集的平均数和标准偏差。
%
% 修改记录:
% 日期 程序员 修改描述
% ==== ========== =============================
% 12/05/97 S. J. Chapman 原始代码
% 1. 12/06/97 S. J. Chapman 如果输入值为0或1,修正除以0的错误。
%
% 定义变量:
% n——输入样本数
% std_dev——输入样本的标准差
% sum_x——输入值之和
% sum_x2——输入值平方的和
% x——一个输入数据值
% xbar——所有输入数据的平均值
% 初始化求和。
n = 0; sum_x = 0; sum_x2 = 0;
% 读入第一个值。
x = input('输入第一个数: ');
% while循环来读取输入的值。
while x >= 0 
 % 累计求和。 
 n = n + 1; 
 sum_x = sum_x + x; 
 sum_x2 = sum_x2 + x^2; 
 % 读入下一个值。
 x = input('输入下一个数: '); 
end 
% 检查是否有足够的输入数据。
if n < 2 % 不足的信息
 disp('至少必须输入两个数!'); 
else % 输入信息充足,所以
 % 计算平均值和标准偏差。
 x_bar = sum_x / n; 
 std_dev = sqrt( (n * sum_x2 - sum_x^2) / (n * (n-1)) ); 
 % 告诉用户。
 fprintf('这组数据的平均数是: %f\n', x_bar); 
 fprintf('标准偏差是:%f\n', std_dev); 
 fprintf('数据点数为:%f\n', n); 
end

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/24281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

整理6个超好用的在线编辑器!

随着 Web 开发对图像可扩展性、响应性、交互性和可编程性的需求增加&#xff0c;SVG 图形成为最适合 Web 开发的图像格式之一。它因文件小、可压缩性强并且无论如何放大或缩小&#xff0c;图像都不会失真而受到欢迎。然而&#xff0c;为了编辑 SVG 图像&#xff0c;需要使用 SV…

《五》 Git 中的标签和分支

标签 tag&#xff1a; Git 可以给仓库中某一次 commit 的提交打上标签。对于重大的版本经常会打上一个标签来表示它的重要性。 创建标签&#xff1a; git tag【tag 名称】&#xff1a;创建标签。 查看标签&#xff1a; git tag&#xff1a;查看标签。 推送标签到远程仓库…

任务40 评奖系统设计

系列文章 任务40 评奖系统设计 为教务处设计一个学生评价老师的程序&#xff1a; 每位学生投一张票&#xff0c;选出自己最喜爱的老师&#xff0c;选票格式为&#xff1a; | 第一喜爱的老师 | 第二喜爱的老师 |第三喜爱的老师 | | 工号 |工号 |工号 | 上述数据存放在一个数据…

随机网络构建

随机网络构建 文章目录 随机网络构建[toc]1 随机网络定义2 网络拓扑性质2.1 边数分布2.2 度分布 3 代码实现 1 随机网络定义 随机网络与规则网络相对应&#xff0c;最为经典的随机网络模型是Erds和Rnyi研究的ER随机图模型&#xff0c;ER随机图模型有两种定义方式&#xff1a; …

三种快速转换PDF为TXT的方法:简单、高效、免费

如何将PDF转换为TXT文件&#xff1f;在日常生活中&#xff0c;PDF和TXT是常见的文本格式。PDF格式文件具有稳定的布局和易于存储的特点。然而&#xff0c;许多在线下载的电子书通常是以PDF格式提供的&#xff0c;而电子阅读器通常不支持PDF格式&#xff0c;这就导致了无法方便地…

字节软测划水四年,内容过于真实......

先简单交代一下吧&#xff0c;潇潇是某不知名211的本硕&#xff0c;18年毕业加入一个小厂&#xff0c;之后跳槽到了字节跳动&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间他完成了一次晋升&#xff0c;换了一家…

SAP-MM-计算方案字段解析

01、 “步骤”&#xff1a;标识此条件类型在计算方案中的顺序编号&#xff0c;此编号会影响到后续业务中条件类型的排序&#xff0c;不同条件类型之间的编号最好间隔大一些&#xff0c;这样设置便于以后对计算方案进行扩展&#xff1b; 02、 “计数器”&#xff1…

Apache Kafka - 重识消费者

文章目录 概述Kafka消费者的工作原理Kafka消费者的配置Kafka消费者的实现高级API低级API 导图总结 概述 Kafka是一个分布式的消息队列系统&#xff0c;它的出现解决了传统消息队列系统的吞吐量瓶颈问题。 Kafka的高吞吐量、低延迟和可扩展性使得它成为了很多公司的首选消息队…

面试前15天刷完这个笔记,拿下字节测开岗offer....

面试&#xff0c;跳槽&#xff0c;每天都在发生&#xff0c;跳槽&#xff0c;更是很常见的&#xff0c;对于每个人来说&#xff0c;跳槽的意义也各不相同&#xff0c;可能是一个人更向往一个更大的平台&#xff0c;更好的地方&#xff0c;可以通过换一个环境改变自己的现状。而…

解密Java Class文件不为人知的秘密

Java 诞生多年&#xff0c;因此在网络上&#xff0c;有关 Java Class 文件格式解析的文章有很多&#xff0c;但他们大多数都是在列举《Java 虚拟机》中定义的格式&#xff0c;通读下来&#xff0c;好像所有的东西都讲清楚了&#xff0c;但是我个人好像并没有看懂&#xff0c;不…

2. css表格属性、文本属性、列表属性、边距属性、尺寸属性

1. 表格属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…

【JavaSE】Java基础语法(十五):继承

文章目录 1. 继承的实现2. 继承的好处和弊端3. Java中继承的特点4. 继承中的成员访问特点5. super6. 继承中构造方法的访问特点7. 继承中成员方法的访问特点8. super内存图9. 方法重写10. 权限修饰符 1. 继承的实现 继承的概念 继承是面向对象三大特征之一&#xff0c;可以使得…

【状态估计】基于随机方法优化PMU优化配置(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

路径规划算法:基于猫群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于猫群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于猫群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法猫群…

基于docker部署testlink并集成mantis

使用docker pull命令拉取需要的镜像。由于testlink和mantis都需要存储相关数据&#xff0c;所以这里可以看到还拉取了一个mysql镜像。 # docker pull bitnami/testlink:1.9.16-r8 # docker pull vimagick/mantisbt # docker pull mysql:5.7.20 使用docker network命令中创建…

Altium Designer 相同电路多组复制布线

在进行设计开发的时候&#xff0c;总会遇到相同的电路&#xff0c;或者模块&#xff0c;这些电路可以使用相同的布局和走线。我们可以画好其中一部分&#xff0c;然后直接复制&#xff0c;就可以提高效率。下面记录我自己的实际操作过程&#xff0c;有一些地方遇到了问题&#…

抽象轻松JavaScript

想象一样&#xff0c;现在有一个苹果&#xff0c;两个苹果&#xff0c;一箱苹果在你面前 看&#xff0c;上面的三种苹果&#xff0c;&#xff08;我写的是苹果就是苹果&#xff09; 语境1 例如你现在要搬运苹果&#xff01; 那么现在上面有苹果&#xff0c;一个&#xff0c;两…

大数据好找工作么?前景如何

大数据好不好找工作不是一概而论的&#xff0c;要根据你个人的学历情况&#xff0c;掌握技能程度&#xff0c;所在城市招聘需求&#xff0c;甚至是你的面试能力和简历是否突出优势有关。 但是毋庸置疑的是&#xff0c;大数据目前的发展前景还是相当优秀的。 我们知道&#xf…

每天一个面试题之final在java中有什么作用?

final在java中有什么作用&#xff1f; final关键字表示最终的含义 当它用来修饰一个引用时&#xff1a; <1>:如果引用为基本数据类型&#xff0c;则该引用为常量&#xff0c;该值无法被修改。<2>:如果引用为引用数据类型&#xff0c;例如&#xff0c;对象/数组等…

Java的CookieManager

文章目录 1. 简介2. CookieStore 1. 简介 Java5包括一个抽象类Java.net.CookieHandler&#xff0c;它定义了存储和获取Cookie的一个API&#xff0c;但不包括这个抽象类的实现&#xff0c;所以还有很多工作要做。Java6进一步作了补充&#xff0c;为CookieManager增加了一个可以…