(转载)从0开始学matlab—总结

news2024/11/28 11:47:33

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/626726.html

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

相关文章

压力测试分为稳定性测试和破坏性测试

压力测试分为稳定性测试和破坏性测试 压力测试是一种对软件系统进行负载测试的常见手段,可以评估其在不同负载条件下的稳定性、性能和可靠性等指标。常见的压力测试分为两种类型:稳定性测试和破坏性测试。 1. 稳定性测试 稳定性测试也称为基准测试&#…

shell脚本基础3——正则表达式

文章目录 一、基本了解二、基本正则表达式2.1 字符匹配2.2 位置锚定2.3 匹配次数2.4 分组 三、扩展正则表达式3.1 字符匹配3.2 位置锚定3.3 匹配次数3.4 分组3.5 或者 一、基本了解 正则表达式分2种:基本正则表达式和扩展正则表达式。grep 、sed命令使用正则较多&am…

软考A计划-系统架构师-官方考试指定教程-(9/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

spiderflow的初步使用

1、简介 spider-flow 是一个爬虫平台,以图形化方式定义爬虫流程,无需代码即可实现一个爬虫 官网地址:https://www.spiderflow.org/ 2、spiderflow的初步使用 2.1拉取,配置和启动 从gitee上拉取 执行db里面的sql 里面会有6张表 …

为什么说高性能计算工程师越老越吃香?还难以被AI替代?

一般越老越吃香的岗位或者行业,一定是拥有无法或者难以轻易被替代的经验。 这些经验一般是靠时间、靠思维、靠试错不断积累起来的。然而AIGC来了,好像宣布AI会取代所有人一样,如经验丰富的律师、医生、教师等等,尤其是贡献了AIGC…

java ssm贸易平台-物流管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm贸易平台-物流管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主…

【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)

本篇文章依托kod可道云项目继续介绍阿里云产品,介绍DNS解析,CDN缓存,Web应用防火墙,弹性伸缩。 DNS解析 这里我将二级域名设为kod,一般都是设为www和,带表示可以不加二级域名,直接访问。也可以…

基于html+css的图展示117

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Java 八股文-集合框架篇

Java 集合框架 一、常见集合 1.说说有哪些常见集合? 集合相关类和接口都在java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。 其中Collection是集合List、Set的父接口&#xff0c…

AI热度降温?揭秘加德纳技术成熟度曲线与AI发展阶段

一文解决你所有对 AI 的焦虑 近期,我们发现ChatGPT的热度似乎不如前几个月。许多人尝试了这个技术,觉得它非常强大,但似乎与自己的日常生活和工作关系不大,因此逐渐失去了兴趣。 然而,这实际上是技术发展的正常周期&…

学术界用ChatGPT写论文,真的靠谱吗?

写论文时,赵铭用ChatGPT查询了国内外云计算技术的研究进展,并请它一一详细介绍。他用搜索引擎简单核实了真实性,润色后就放进了论文中,“我感觉它说的东西都是一些现状,也没什么好调整的,就直接用了&#x…

传感器-陀螺仪芯片

https://www.cnblogs.com/tomatokely/p/16392997.html 陀螺仪芯片厂家: ST ICM42605, MPU 6050, Murata SCL3300/3400 陀螺仪可选量程: 15.6/31.2/62.5/125/250/500/1000/2000 dps 加速度可选量程: 2/4/8/16 g 计算单位: 陀…

vue安裝及配置 nodejs安装配置

vue安装及配置 vue安装步骤 nodejs安装 安装nodejs环境:https://nodejs.org/en/ 查看node版本:node-v vue3.0需要使用node 8版本以上 npm镜像配置 npm是nodejs内置的资源管理器 npm两个镜像: 淘宝镜像:https://registry.npm.…

Mars3d的PolygonEntity的边框宽度outlineWidth只能是1

1.Mars3d的PolygonEntity的边框宽度只能是1 2.问题来源: 尝试在Mars3d官网的面的示例中修改高亮样式是,发现修改边框宽度为3或者是10,效果一致 function addDemoGraphic4(graphicLayer) { const graphic new mars3d.graphic.PolygonEntit…

车载以太网网络管理之UDPNM

前言 首先,请问大家几个小小问题,你清楚: 你知道UdpNm模块的主要作用是什么吗?UdpNm模块与其他AUTOSAR基础软件模块交互关系;UdpNm模块的网络管理算法,状态机如何运转?UdpNm模块的PNC功能如何…

TLE4250-2G-ASEMI代理英飞凌汽车芯片TLE4250-2G

编辑:ll TLE4250-2G-ASEMI代理英飞凌汽车芯片TLE4250-2G 型号:TLE4250-2G 品牌:Infineon(英飞凌) 封装:SCT-595-5 特性:驱动芯片、汽车芯片 温度范围-40C~150C 最大输入电压:-42 V~45 V TLE4250-2G…

跨境电商app系统开发

近年来,随着跨境电商行业的发展,越来越多的企业开始关注跨境电商app系统的开发。这些系统可以帮助企业更加高效地管理跨境电商业务,提高产品销售的效率,并且为消费者提供更加方便快捷的购物体验。 跨境电商app系统的开发需要考虑…

品牌618如何宣传,才能为业绩加油助力?

传媒如春雨,润物细无声,大家好,我是51媒体 胡老师。 随着618年中消费季的临近,许多企业和品牌都已经卯足了马力,争取在年终狂欢中多多增加公司业绩,现在的618 不仅仅涉及我们的吃穿用行,而且各…

计算机网络开荒2.2-Socket编程

文章目录 一、Socket概述二、Socket API 概述三、WinSock常用API3.1 常用API3.1.1 WSAStartUP3.1.2 WSACleanup3.1.3 Socket3.1.4 Closesocket3.1.5 bind3.1.6 listen3.1.7 connect3.1.8 accept3.1.9 send, sendto3.1.10 recv, recvfrom3.1.11 etsockopt, getsockopt 3.2 网络字…

H3C 交换机的VXLAN二层转发配置

H3C 交换机的VXLAN二层转发配置 本篇介绍H3C交换机的VXLAN二层转发配置。 基本概念: 首先了解VXLAN(Virtual eXtensible LAN,可扩展虚拟局域网络)的基本概念。VXLAN是基于IP网络、采用“MAC in UDP”封装形式的二层VPN技术。VXLAN可以基于…