当前位置: 首页 > article >正文

MATLAB—从入门到精通的第二天

在第一天的学习中,我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构(嵌套 ifswitch循环类型 和 向量操作,帮助读者进一步掌握 MATLAB 的核心编程技能。


1. 条件语句进阶

1.1 嵌套 if 语句

嵌套 if 语句允许在一个条件分支中嵌入另一个条件判断,适用于处理多层级逻辑。

语法
if condition1% 当 condition1 为 true 时执行if condition2% 当 condition1 和 condition2 同时为 true 时执行end
end
示例

判断一个数是否为 正偶数

x = 10;
if x > 0if mod(x, 2) == 0disp('正偶数');elsedisp('正奇数');end
elsedisp('非正数');
end
注意事项
  • 避免过度嵌套(一般不超过 3 层),否则代码可读性会降低。

  • 使用逻辑运算符(&&||)简化多层条件:

    if x > 0 && mod(x, 2) == 0disp('正偶数');
    end

1.2 switch 语句

switch 语句用于根据表达式的值执行不同的代码块,适合替代多层 if...elseif 结构。

语法
switch expressioncase value1% 当 expression == value1 时执行case value2% 当 expression == value2 时执行otherwise% 当无匹配 case 时执行
end
示例

根据星期数输出对应的名称:

day = 3;
switch daycase 1disp('星期一');case 2disp('星期二');case 3disp('星期三');otherwisedisp('无效输入');
end
% 输出:星期三
case 的多值匹配

一个 case 可以匹配多个值(使用元胞数组):

color = 'red';
switch colorcase {'red', 'yellow'}disp('暖色');case {'blue', 'green'}disp('冷色');
end
% 输出:暖色

1.3 嵌套 switch 语句

switch 语句内部可以嵌套另一个 switch,但实际开发中较少使用(优先考虑代码结构优化)。

示例

根据用户角色和权限显示菜单:

role = 'admin';
permission = 'write';switch rolecase 'admin'switch permissioncase 'read'disp('显示管理员只读菜单');case 'write'disp('显示管理员编辑菜单');endcase 'user'disp('显示用户菜单');
end
% 输出:显示管理员编辑菜单

2. 循环结构

2.1 while 循环

while 循环在条件为真时重复执行代码块,适合未知迭代次数的场景。

语法
while condition% 循环体
end
示例

计算 1 到 100 的和:

sum = 0;
i = 1;
while i <= 100sum = sum + i;i = i + 1;
end
disp(sum);  % 输出:5050
流程图
开始 → 检查条件 → 条件为真 → 执行循环体 → 更新条件 → 重复检查↓条件为假 → 结束循环

2.2 for 循环

for 循环用于遍历数组或指定次数的迭代,适合已知范围的循环。

语法
for index = start:step:end% 循环体
end
示例

遍历数组元素并计算平方:

A = [2, 4, 6, 8];
for k = 1:length(A)A(k) = A(k)^2;
end
disp(A);  % 输出:[4, 16, 36, 64]
遍历矩阵

按列遍历矩阵:

matrix = [1 2; 3 4];
for col = matrixdisp(col);
end
% 输出:
% 1
% 3
% 2
% 4

2.3 嵌套循环

嵌套循环用于处理多维数据(如矩阵运算)。

示例

生成乘法表:

for i = 1:9for j = 1:ifprintf('%d*%d=%d\t', j, i, i*j);endfprintf('\n');
end
输出
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
...

2.4 break 与 continue

  • break:立即终止当前循环,跳转到循环外。

  • continue:跳过当前迭代,进入下一次循环。

示例

查找第一个能被 7 整除的数:

for num = 100:200if mod(num, 7) ~= 0continue;  % 跳过非整除情况enddisp(['找到:', num2str(num)]);break;         % 找到后退出循环
end
% 输出:找到:105

3. 向量操作

3.1 向量创建

向量是 MATLAB 的核心数据类型,分为 行向量 和 列向量

方法示例说明
直接输入v = [1 2 3 4]行向量
冒号运算符v = 1:2:10生成 [1,3,5,7,9]
linspace 函数v = linspace(0,1,5)生成 0 到 1 的 5 等分点
zeros/onesv = zeros(1,5)零向量 [0,0,0,0,0]

3.2 向量运算

加法与减法

向量维度必须一致:

A = [1 2 3];
B = [4 5 6];
C = A + B;  % 输出:[5 7 9]
D = A - B;  % 输出:[-3 -3 -3]
标量乘法
v = [1 2 3];
result = 2 * v;  % 输出:[2 4 6]
转置向量

使用单引号 ' 或 transpose() 函数:

row = [1 2 3];
col = row';       % 转置为列向量 [1; 2; 3]

3.3 向量高级操作

追加向量

使用方括号 [] 或 cat() 函数:

v1 = [1 2];
v2 = [3 4];
v3 = [v1 v2];        % 输出:[1 2 3 4]
v4 = cat(2, v1, v2); % 水平拼接(同 [v1 v2])
向量模长

计算向量的欧几里得范数:

v = [3 4];
magnitude = norm(v);  % 输出:5
向量点积

使用 dot() 函数或运算符 .* 配合 sum()

A = [1 2 3];
B = [4 5 6];
dot_product = dot(A, B);       % 输出:32
dot_product_manual = sum(A .* B);  % 输出:32

4. 应用案例

4.1 斐波那契数列生成

使用 for 循环生成前 10 项:

fib = zeros(1, 10);
fib(1:2) = [1 1];
for i = 3:10fib(i) = fib(i-1) + fib(i-2);
end
disp(fib);  % 输出:[1 1 2 3 5 8 13 21 34 55]

4.2 向量化计算

避免显式循环,提升代码效率:

% 计算向量元素的平方和
v = 1:100;
sum_squares = sum(v.^2);  % 输出:338350

5. 总结与练习

5.1 核心知识点

主题关键内容
嵌套 if多层级逻辑判断,避免过度嵌套
switch多分支条件匹配,支持多值 case
while/for循环控制,break 与 continue 的使用
向量操作创建、运算、模长与点积计算

5.2 练习题目

  1. 编写一个 switch 语句,根据月份返回季节(如 1-3 月为春季)。

  2. 使用嵌套循环生成一个 5x5 的矩阵,其中对角线元素为 1,其余为 0。

  3. 计算两个向量的夹角(公式:θ = arccos( (A·B) / (||A|| ||B||) ))。


6. 下一步学习建议

  1. 矩阵操作:学习矩阵乘法、逆矩阵和特征值计算。

  2. 函数编写:掌握函数参数传递与返回值处理。

  3. 数据可视化:使用 plot() 和 scatter() 绘制二维/三维图形。

通过实践巩固知识,逐步掌握 MATLAB 在科学计算和工程分析中的强大能力!

相关文章:

MATLAB—从入门到精通的第二天

在第一天的学习中&#xff0c;我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构&#xff08;嵌套 if、switch&#xff09;、循环类型 和 向量操作&#xff0c;帮助读者进一步掌握 MATLAB 的核心编程技能。 1. 条件语句进阶 1.1 嵌套…...

【认识OpenThread协议】

OpenThread 是一种基于 IPv6 、IEEE 802.15.4 标准的低功耗无线 Mesh 网络协议&#xff0c;主要用于智能家居、物联网设备等场景。它的设计目标是实现设备之间的高效通信、低功耗运行和高可靠性。 OpenThread官方文档 ① 特性 低功耗: 适合电池供电的设备。 Mesh 网络: 支持多…...

驱动开发系列46 - Linux 显卡KMD驱动代码分析(七)- 显存管理

目录 一:概述 二:应用程序和UMD调用栈 三:KMD 显存分配和和映射过程 一:概述 显存管理是图形驱动程序中至关重要的一部分,涉及到从用户空间(UMD,User Mode Driver)到内核空间(KMD,Kernel Mode Driver)的显存分配和管理。本文将首先梳理从一个 OpenGL 应…...

MATLAB代码开发实战:从入门到高效应用

一、MATLAB生态系统的核心优势 &#xff08;扩展原有内容&#xff0c;增加行业数据&#xff09; MATLAB在全球工程领域的市场占有率已达67%&#xff08;2024年IEEE统计&#xff09;&#xff0c;其核心优势体现在&#xff1a; 矩阵运算速度比传统编程快3-5倍包含22个专业工具箱…...

为什么 NFS 不适合作为 TDengine 的数据存储

NFS NFS 是一种分布式文件系统&#xff0c;允许多台计算机通过网络共享文件。其具有以下优点&#xff1a; 共享存储: 多个数据库实例可以共享同一个 NFS 目录&#xff0c;适合分布式数据库或集群环境。灵活性: 数据存储可以集中管理&#xff0c;便于备份和迁移。成本低: 利用…...

办公常用自动化工具

自动化办公工具说明文档 代码全部在底部。 文件批量重命名工具 (file_renamer.py) 功能概述 file_renamer.py 是一个用于批量重命名文件的工具&#xff0c;可以根据自定义规则为文件重命名&#xff0c;支持按日期、序号、原文件名等格式进行命名。 主要功能 支持按文件类…...

字节跳动 —— 建筑物组合(滑动窗口+溢出问题)

原题描述&#xff1a; 题目精炼&#xff1a; 给定N个建筑物的位置和一个距离D&#xff0c;选取3个建筑物作为埋伏点&#xff0c;找出所有可能的建筑物组合&#xff0c;使得每组中的建筑物之间的最大距离不超过D。最后&#xff0c;输出不同埋伏方案的数量并对99997867取模。 识…...

开源数字人模型Heygem

一、Heygem是什么 Heygem 是硅基智能推出的开源数字人模型&#xff0c;专为 Windows 系统设计。基于先进的AI技术&#xff0c;仅需1秒视频或1张照片&#xff0c;能在30秒内完成数字人形象和声音克隆&#xff0c;在60秒内合成4K超高清视频。Heygem支持多语言输出、多表情动作&a…...

Linux远程工具SecureCRT下载安装和使用

SecureCRT下载安装和使用 SecureCRT是一款功能强大的终端仿真软件&#xff0c;它支持SSH、Telnet等多种协议&#xff0c;可以连接和管理基于Unix和Windows的远程主机和网络设备。SecureCRT提供了语法高亮、多标签页管理、会话管理、脚本编辑等便捷功能&#xff0c;安全性高、操…...

从前端视角理解消息队列:核心问题与实战指南

消息队列&#xff08;Message Queue&#xff09;是现代分布式系统的核心组件之一&#xff0c;它在前后端协作、系统解耦、流量削峰等场景中发挥着重要作用。本文从前端开发者视角出发&#xff0c;解析消息队列的关键问题&#xff0c;并结合实际场景给出解决方案。 一、为什么要…...

Android 线程池实战指南:高效管理多线程任务

在 Android 开发中&#xff0c;线程池的使用非常重要&#xff0c;尤其是在需要处理大量异步任务时。线程池可以有效地管理线程资源&#xff0c;避免频繁创建和销毁线程带来的性能开销。以下是线程池的使用方法和最佳实践。 1. 线程池的基本使用 &#xff08;1&#xff09;创建线…...

CentOS7下安装MongoDB

步骤 1&#xff1a;创建 MongoDB Yum 仓库文件 你需要创建一个 MongoDB 的 Yum 仓库配置文件&#xff0c;以便从官方源下载 MongoDB。打开终端并使用以下命令创建并编辑该文件&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo 在打开的文件中&#xff0c;输入以下…...

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…...

【网络协议详解】——QOS技术(学习笔记)

目录 QoS简介 QoS产生的背景 QoS服务模型 基于DiffServ模型的QoS组成 MQC简介 MQC三要素 MQC配置流程 优先级映射配置(DiffServ域模式) 优先级映射概述 优先级映射原理描述 优先级映射 PHB行为 流量监管、流量整形和接口限速简介 流量监管 流量整形 接口限速…...

【工具使用】IDEA 社区版如何创建 Spring Boot 项目(详细教程)

IDEA 社区版如何创建 Spring Boot 项目&#xff08;详细教程&#xff09; Spring Boot 以其简洁、高效的特性&#xff0c;成为 Java 开发的主流框架之一。虽然 IntelliJ IDEA 专业版提供了Spring Boot 项目向导&#xff0c;但 社区版&#xff08;Community Edition&#xff09…...

基于Prometheus+Grafana的Deepseek性能监控实战

文章目录 1. 为什么需要专门的大模型监控?2. 技术栈组成2.1 vLLM(推理引擎层)2.2 Prometheus(监控采集层)2.3 Grafana(数据可视化平台)3. 监控系统架构4. 实施步骤4.1 启动DeepSeek-R1模型4.2 部署 Prometheus4.2.1 拉取镜像4.2.2 编写配置文件4.2.3 启动容器4.3 部署 G…...

Spring学习笔记:工厂模式与反射机制实现解耦

1.什么是Spring? spring是一个开源轻量级的java开发应用框架&#xff0c;可以简化企业级应用开发 轻量级 1.轻量级(对于运行环境没有额外要求) 2.代码移植性高(不需要实现额外接口) JavaEE的解决方案 Spring更像是一种解决方案&#xff0c;对于控制层&#xff0c;它有Spring…...

pytest数据库测试文章推荐

参考链接&#xff1a; 第一部分&#xff1a;http://alextechrants.blogspot.fi/2013/08/unit-testing-sqlalchemy-apps.html第二部分&#xff1a;http://alextechrants.blogspot.fi/2014/01/unit-testing-sqlalchemy-apps-part-2.html...

vue3 二次封装uni-ui中的组件,并且组件中有 v-model 的解决方法

在使用uniappvue3开发中&#xff0c; 使用了uni-ui的组件&#xff0c;但是我们也需要自定义组件&#xff0c;比如我要自定一个picker 的组件&#xff0c; 是在 uni-data-picker 组件的基础上进行封装的 父组件中的代码 <classesselect :selectclass"selectclass"…...

探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件的全面测评

随着边缘计算和人工智能技术的迅速发展&#xff0c;性能强大的嵌入式AI开发板成为开发者和企业关注的焦点。NVIDIA近期推出的Jetson Orin Nano 8GB开发套件&#xff0c;凭借其40 TOPS算力、高效的Ampere架构GPU以及出色的边缘AI能力&#xff0c;引起了广泛关注。本文将从配置性…...

Prompt 工程

一、提示原則 import openai import os import openai from dotenv import load_dotenv, find_dotenv from openai import OpenAI def get_openai_key():_ load_dotenv(find_dotenv())return os.environ[OPENAI_API_KEY]client OpenAI(api_keyget_openai_key(), # This is …...

【学习笔记】《逆向工程核心原理》03.abex‘crackme-2、函数的调用约定、视频讲座-Tut.ReverseMe1

文章目录 abexcrackme-21. Visual Basic文件的特征1.1. VB专用引擎1.2. 本地代码与伪代码1.3. 事件处理程序1.4. 未文档化的结构体 2. 开始调试2.1. 间接调用2.2. RT_MainStruct结构体2.3. ThunRTMain()函数 3. 分析crackme3.1. 检索字符串3.2. 查找字符串地址3.3. 生成Serial的…...

React基础之项目实战

规范的项目结构 安装scss npm install sass -D 安装Ant Design组件库 内置了一些常用的组件 npm install antd --save 路由基础配置 npm i react-router-dom 路由基本入口 import Layout from "../page/Layout"; import Login from "../page/Login"; impor…...

SAP-ABAP:SAP数据库视图的创建图文详解

在SAP ABAP中&#xff0c;数据库视图&#xff08;Database View&#xff09;是通过ABAP字典&#xff08;ABAP Dictionary&#xff09;创建的。数据库视图是基于一个或多个数据库表的虚拟表&#xff0c;它允许你定义一种逻辑视图来访问数据。以下是创建数据库视图的步骤&#xf…...

基于深度学习的肺炎X光影像自动诊断系统实现,真实操作案例分享,值得学习!

医疗影像智能化的技术演进 医学影像分析正经历从人工判读到AI辅助诊断的革命性转变。传统放射科医师分析胸部X光片需要8-12年专业训练&#xff0c;而基于深度学习的智能系统可在秒级完成检测。本文将以肺炎X光检测为切入点&#xff0c;详解从数据预处理到模型部署的全流程实现。…...

Unity Shader学习总结

1.帧缓冲区和颜色缓冲区区别 用于存储每帧每个像素颜色信息的缓冲区 帧缓冲区包括&#xff1a;颜色缓冲区 深度缓冲区 模板缓冲区 自定义缓冲区 2.ImageEffectShader是什么 后处理用的shader模版 3.computerShader 独立于渲染管线之外&#xff0c;在显卡上运行&#xff0c;大量…...

算法精讲 | 树(番外):平衡世界的四大守护者:AVL vs 红黑树 vs B树 vs B+树

&#x1f332; 算法精讲 | 树&#xff08;番外&#xff09;&#xff1a;平衡世界的四大守护者&#xff1a;AVL vs 红黑树 vs B树 vs B树 &#x1f4c5; 2025/03/12 || &#x1f31f; 推荐阅读时间 30分钟 &#x1f680; 开篇&#xff1a;数据结构界的四大天王 想象你是一名图书…...

第十八:go 并发 goroutine

channel 可以让多个goroutine 之间实现通信 Add方法调用时机&#xff1a;必须在goroutine 启动之前调用Add方法来增加计数器的值。 如果在goroutine已经启动之后再调用Add&#xff0c;可能会导致Wait方法提前返回&#xff0c;因为计数器没有正确反映正在运行的goroutine的数量…...

在vs中无法用QtDesigner打开ui文件的解决方法

解决方法 右键ui文件&#xff0c;选择打开方式&#xff0c;弹出如下界面。 点击添加&#xff0c;弹出如下界面 点击程序后边的三个点&#xff0c;去电脑查找designer.exe,我的位置为D:\Qt\Qt5.9.9\5.9.9\msvc2015_64\bin\designer.exe。 名称可以自己起一个名字&#xff0c…...

【Maven教程与实战案例】

文章目录 前言一、Maven是什么&#xff1f;二、Maven的安装与配置1. 安装前置条件2. 下载与配置 Maven3. 验证安装 三、Maven的核心概念1. POM.xml 文件2. 构建生命周期与插件机制 四、实战项目示例1. 项目目录结构2. 编写代码App.javaAppTest.java 3. 构建项目4. 运行项目 前言…...