(转载)从0开始学matlab(第9天)—第一阶段总结

news2024/11/18 11:43:05

1.编程实例

        下面的例子将向大家介绍如何用 MATLAB 解决问题。

例1 温度转换程序

        问题:
        设计一个 MATLAB 程序,读取一个华氏温度的输入,输出开尔文温度。
        答案:
        华氏温度和开尔文温度的转换关系式可在物理学课本中找到。其关系式为:

        在物理学参考书中举了一些例子,我们可以用来检验我们程序是否正确。例如 

我们设计程序的步骤如下
1. 提示用户键入华氏温度值
2. 读取输入值
3. 通过关系式转换为开氏温度
4. 输出结果,结束
我们将会用 input 函数输入华氏温度,用 fprintf 函数输出结果。
clc
clear

% 目的:
% 将一个以华氏度为单位的温度转换为以开尔文为单位的温度。

% 定义变量:
% temp_f -- 华氏度温度
% temp_k -- 开尔文温度

% 提示用户输入华氏度温度
temp_f=input('请输入华氏度温度:');

% 将华氏度温度转换为开尔文温度
temp_k=(5/9)*(temp_f-32)+273.15;

% 输出结果
fprintf('%6.2f 华氏温度 = %6.2f 开尔文温度.\n', temp_f,temp_k);
运行结果:
        这个结果和物理教科书的结果相同。在本程序中, 我们重复出带单位的输入值和输出值. 只有带上单位输出才有意义. 按照惯例 , 任何输入变量和输出变量的单位都应打印出来 .
好的编程习惯
当你读取和写入数据时 , 使用适当的单位

例2 负载的最大输出功率

        问题:
        一个内阻 Rs
50Ω ,电动势 V 120V 的电源驱动一个负载 R L 。当 R L 为多少时, R L的功率最大?在这种情况下,功率为多少?画以 R L 为自变量的 R L 功率图。
        答案:
        在本程序中,我们需要改变 R L 的值,然后计算出每一个 R L 的功率。 R L功率的表达式为:

         I代表流经负载的电流。电流可由欧姆定律计算得到。

        这个问题解决的步骤如下
        1. 创建一个数组。这个数组是以 1 为起始项,以 1 步长的等差数组,共 100 项,这是 R L 的取值。
        2. 计算 R L 的电流,
        3. 计算每个 R L 的功率。
        4. 画出 R L 的功率图,以确定 R L 为多少时其功率最大。
        整个程序的代码如下:
clc
clear

% 目的:
% 计算并绘制负载电阻作为函数的功率。

% 定义变量:
% amps -- 负载电流(安培)
% pl -- 供电给负载的功率(瓦特)
% rl -- 负载电阻(欧姆)
% rs -- 电源内部电阻(欧姆)
% volts -- 电源电压(伏特)

% 设定电源电压和内部电阻的值
volts = 120;
rs = 50;

% 创建一个负载电阻数组
rl = 1:1:100;

% 计算每种电阻下的电流
amps = volts ./ (rs + rl);

% 计算每种电阻下负载所消耗的功率
pl = (amps.^2) .* rl;

% 绘制功率与负载电阻之间的曲线
plot(rl,pl);
title('功率与负载电阻之间的关系图');
xlabel('负载电阻(欧姆)');
ylabel('功率(瓦特)');
grid on;
        当这个程序运行时,产生的图象如图1 。从这个图我们可知当负载电阻为 50Ω时,功率最大。最大功率为 72W
        注意在本例中,用的是数组运算符.*,.^ ./. 这些运算符将会使数组 amps pl 按元素一一对应计算 .

 例 3 C­14 确定年代

        一个元素的放射性同位素是不稳定元素的一种特殊形态. 在一段时间内 ,它会自然的衰变为另一种元素 . 衰变一种呈指数下降的过程 . 如果 Q 0 是放射性物质在 t =0 时的初始量 ,那么它的质量与变量 t 的关系式为

        其中 λ 代表衰变率 .
        因为放射性元素的衰变是以一定的速率发生的,我们可以把它当作一个时钟来测定的衰变开始的时间。如果我们知道衰变开始时物质的质量和现在放射性元素剩余的质量 ,我们可以根据上面的公式 换算出衰变时间 t ,

        这个公式在科学的许多领域有着广泛的应用 . 例如 , 考古学家可以根据 C14 的衰变周期 ,来确定古生物距今生活的年代 . 现在活着的生物 C14 的含量是不变的 , 所以可以根据古生物 C14的现存量来确定古生物的生存年代 . 已知 C14 的衰变率 λ 0.00012097/ , 所以如果 C14 的剩余量可以通过测量得到 , 那么我们就可以根据公式 2.9 算出这个生物活在多少年之前 .
        编定一个程序, 读取样品中 C14 剩余量的百分比 , 计算样品距今的年代 , 并打印出结果 .
        这个问题解决的步骤如下
        1. 提示用户输入样品中 C14 的剩余量
        2. 读取百分比
        3. 将百分比转化成分数 Q 0/ Q
        4. 利用公式 计算出距今的年数
        5. 输出结果 , 结束 .
        代码如下
clc
clear

% 目的:
% 根据样本中剩余原始碳14的百分比计算样本年限

% 定义变量:
% age -- 样本年龄(年)
% lamda -- 碳14的衰变常数,单位为1/年 
% percent -- 测量时剩余的碳14含量的百分比 
% ratio  -- 测量时剩余的碳14含量与原始碳14含量之比

% 设定碳14的衰变常数
lamda = 0.00012097;

% 提示用户输入碳14剩余百分比
percent = input('请输入碳14剩余百分比:\n');

% 计算样本中的剩余碳14含量与原始碳14含量之比
ratio = percent / 100; % 转换为分数比例

% 计算样本的年龄
age = (-1.0/lamda) * log(ratio); % 单位为年

% 展示计算出的样本年龄
string = ['样本年龄为 ' num2str(age) '年。'];
disp(string);
        运行结果为:

 2.调试程序

        有一个古老的说法, 人这一生唯一能够确定的东西是死亡和税收 . 我们在这里再增加一项, 无论你编定多大的程序 , 你第一次运行时 , 肯定通不过 ! 程序中的错误我们称之为 BUGS,找出并排出它们 , 我们称之为调试 (debugging). 已知一个程序 , 而无法运行 , 我们怎样调试它呢?在 MATLAB 中有三种类型的错误 . 第一种错误是 语法错误 . 语法错误是 MATLAB 自身的错误,例如拼写错误和标点错误.当编译 M 文件时,maltab 编译器将会找出这些错误.例如,语句
x = ( y + 3 ) / 2 );
有一个语法错误, 因为其括号不平衡. 如果这句存储在 M 文件 test.m 中,当 test 编译时,将会出现下面的信息。
        第二种类型的错误是一种运行时错误。当一个非法的数学运算出现在程序的过程(例如,除以 0) ,将会出现运行时错误。这些错误将会使程序返回 Inf NaN,用来参与下一步的运算。导致这个程序的结果变无效。
        错误的第三种形式是逻辑错误(logical error).逻辑错误是指编译和运行都能通过,而产生了错误的结果。
        在编程过程中出现的最普遍的错误是书写错误。一些书写错误可能产生无效的MATLAB 语句。这些错误产生的语法错误可能会被编译器发现。另一个书写错误发生在变量名的书写上。例如,变量中的字符可能被调换,漏写或错写。这样就会创建一个新的变量,在前面我们已经提到,MATLAB 能够很容易地创造一个新的变量,它不会发现这个错误。、书写错误也能导致逻辑错误。例如,如果变量 vel1 和 vel2 都在程序中代表速度,如果一时疏忽用其中一个替代了另一个,那么你就只能用人工检查代码找出此类错误。有的时侯程序开始时能够执行,但是运行时错误和逻辑错误可能在执行中发生。在这种情况下,可能是输入错误,也可能是逻辑结构错误。找出这类错误的第一步是检查程序的输入数据。既可以去掉输入语句后的分号,也可以加入一个多余的输出语句以证明这个输入值是不是你想要的。如果你已经排除了变量名错误和输入值错误,接着你要处理的是逻辑错误。你应该检测是否有逻辑错误,应当检查每一个赋值语句。
        1.如果一个赋值语句非常的长,把他分成许多小的赋值语句。小的语句易证明。
        2.检查你的赋值语句中括号的放置。在赋值语句中,由于括号导致运算顺序错误是极其常见的错误。如果你对运算顺序仍有疑问,应该多加括号,使之更加清晰。
        3.保证每个变量正确的初始化。
        4.保证函数中用到的单位统一。例如,在三角函数中输入必须是弧度值,而不是角度值。如果你仍然得到的是错误的语句,在更多的位加上输出语句,以检查中间计算。如果你能确定错误的位置,那么你就知道在那里找到问题所在,百分九十五地在这片区域内。如果问题依然存在,那么这时你就应当把你遇到的问题解释给你的同学或老师,让他们给你检查错误。一个人看自己编写的代码找不到错误是非常常见的,而其他的人则可以迅速地找出错误的地方,而这个地方你可能已经看了一次又一次。
好的编程习惯
确保你在编程设计过程:
1. 初始化所有变量
2. 适当应用括号使运算顺序清晰以减少调试的工作量
        在 MATLAB 中有一个专门的调试器,叫做 symbolic debugger. symbolic debugger 允许用户一句一句地执行语句,检测出所有的变量值,它能让你看到所有的中间值,而不用在其中加入输出语句。我们将会在后面介绍 symbolic debugger

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP-RIP双向重发布综合实验

拓扑结构: 要求: 1、两个协议间进行多点双向重发布 2、R7的环回没有宣告在OSPF协议中,而是在后期重发布进入的 3、解决环路,所有路径选择最优,且存在备份 4、R2的环回要在RIP中宣告,R3的环回要在OSPF中宣…

如何优雅的写C#,使用Visual studio

免责声明 本人接触C#,.Net一年时间,本文内容基于我平时对于C#语法的积累,如有问题请多包涵。以下内容除了C#之外,还有Visual studio编译器相关的内容。 在使用C#的一年多里面,我发现C#的语法糖真的很不错,Visual Stu…

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标: 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…

PCB 基础~典型的PCB设计流程,典型的PCB制造流程

典型的PCB设计流程 典型的PCB制造流程 • 从客户手中拿到Gerber, Drill以及其它PCB相关文件 • 准备PCB基片和薄片 – 铜箔的底片会被粘合在基材上 • 内层图像蚀刻 – 抗腐蚀的化学药水会涂在需要保留的铜箔上(例如走线和过孔) – 其他药水…

如何封装React无限滚动加载列表组件【含源码】

前言 由于需要考虑后端接口的性能问题,我们在请求业务数据列表的时候并不能直接请求全量数据。所以我们在请求数据时常见的方式是做分页查询。 对于前端交互而言,我们需要考虑如何优雅的让用户触发请求下一页数据的接口。常用的方法有两种:…

i春秋春季赛2023

只有两道逆向和一道misc,其他的有时间再写 wordle 不断筛有什么和没什么字母猜就行了 [6x] Guess a 5-letter word : first first [5x] Guess a 5-letter word : ideas Please enter a real English word that exists. [5x] Guess a 5-letter word : icily first…

View的基础与滑动

View的基础与滑动 1.View的基础知识 1.1View是什么 View是一种界面层的控件的一种抽象 ,我们知道的大多数控件都是直接或间接继承自View 如EditText,TextView等等 注意: EditText在compose中并没有相关控件,而是通过TextField来进行组合 Android中View本身就可以是单个控…

rt-thread启动流程(最详细教程)

资料下载 RT-Thread Simulator 例程 操作流程 将上面的仿真例程下载并解压,通过MDK打开,编译,调试,并打开串口点击运行,就可以看到如下输出了: 添加自己的 thread:在main()函数中添加即可&am…

【5.19】四、性能测试—流程

4.4 性能测试的流程 性能测试也遵循测试需求分析→测试计划制订→测试用例设计→测试执行→编写测试报告的基本过程,但在实现细节上,性能测试有单独一套流程: 1. 分析性能测试需求 在性能测试需求分析阶段,测试人员需要收集有关…

【AI Earth试玩】权限配置与openAPI调用工具库

前言 AI earth是阿里达摩院出的遥感云计算平台,我简单体验下来感觉像是GEE的python版本遥感深度学习计算平台,整体体验还是挺不错的,尤其是多分类的结果还是挺惊艳的。 平台提供工具箱和notebook两种模式,工具箱整个交互简单易用…

DJ 5-4 以太网 Ethernet

目录 一、以太网的物理拓扑结构 二、以太网物理层标准 1、以太网技术:10Base-T 和 100Base-T 2、以太网技术:1000Base 系列 3、曼彻斯特编码* 4、差分曼彻斯特编码机制* 三、以太网链路层控制技术 四、以太网的帧结构 1、前同步码 2、MAC 地址…

Spring Boot 项目【前后端分离】之后端实现加 LambdaQueryWrapper实现源码分析和手动模拟

目录 Spring Boot 项目【前后端分离】 之架子搭建 技术栈 实现功能03-创建Spring Boot 后端项目 需求分析/图解 思路分析 代码实现 1. 创建springboot_furn 项目 2. 修改pom.xml , 引入mybatis-plus 等相关依赖 3. 创建application.yml 配置port & 配置DB 连接信息…

【数据结构】KMP算法:计算next与nextval函数值(图解)

例&#xff1a;计算模式串"abaabcac"的KMP算法中next函数值 由函数定义 n e x t [ j ] { 0 , j 1 M a x { k ∣ 1 < k < j 且 " t 1 t 2 ⋅ ⋅ ⋅ t k − 1 " " t j − k 1 t j − k 2 ⋅ ⋅ ⋅ t j − 1 " } 1 , k 1 next[j]\left…

asp.net高校运动会管理系统的设计与实现

本高校运动会管理系统是针对我院当前运动会工作需要而开发的B/S模式的网络系统&#xff0c;涉及到运动会赛前的报名录入准备与分组编排、赛中的成绩处理、赛后的成绩汇总与团体总分的统计。它将是一个完整统一、技术先进、高效稳定、安全可靠的基于Internet/Intranet的高校运动…

一、Git安装(Git+TortoiseGit图形化)

Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方式…

《计算机网络—自顶向下方法》 Wireshark实验(八):ICMP 协议分析

ICMP&#xff08;Internet Control Message Protocol&#xff09;网络控制报文协议。它是 TCP/IP 协议簇的一个子协议&#xff0c;用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户…

进程概念

目录 冯诺依曼体系结构 操作系统OS 系统调用和库函数概念 进程 task_struct内容分类 组织进程 初识fork 进程状态 Z(zombie)-僵尸进程 孤儿进程 进程优先级 环境变量 和环境变量相关的命令 环境变量的组织方式 程序地址空间 冯诺依曼体系结构 关于冯诺依曼&…

Linux 防火墙 iptables

iptables概述 Linux 系统的防火墙 &#xff1a;IP信息包过滤系统&#xff0c;它实际上由两个组件netfilter 和 iptables组成。 主要工作在网络层&#xff0c;针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。 iptables是Linux系统防火墙的一种&#xff0c;是Ce…

SpringBoot【开发实用篇】---- 整合第三方技术(消息)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;消息&#xff09; 消息的概念Java处理消息的标准规范JMSAMQPMQTTKafka 购物订单发送手机短信案例订单业务短息处理业务 SpringBoot整合ActiveMQ安装整合 SpringBoot整合RabbitMQ安装整合&#xff08;direct模型&#x…

【操作系统复习】第7章 输入/输出系统1

I/O系统管理的主要对象 ➢ I/O设备和对应的设备控制器 I/O系统的主要任务 ➢ 完成用户提出的I/O请求 ➢ 提高I/O速率 ➢ 改善I/O设备的利用率 I/O系统的上、下接口 ➢ I/O系统接口&#xff08;上接口&#xff09; ➢ 软件/硬件接口&#xff08;下接口&#xff09…