MATLAB—从入门到精通的第四天:函数、绘图与数学魔法
MATLAB—从入门到精通的第四天:函数、绘图与数学魔法
欢迎来到第四天的 MATLAB 奇幻之旅!今天的内容将包含 函数编写、数据搬运(导入/导出)、让数据跳舞(绘图),以及 数学咒语(代数、微积分)。我们还会顺路拜访 MATLAB 的亲戚 GNU Octave,最后用 Simulink 玩个“乐高式”仿真!全程高能,附带代码段子,请系好安全带。
1. 函数:MATLAB 的“偷懒神器”
1.1 函数是什么?
函数就像哈利波特的魔法咒语——输入一些东西(参数),念咒语(代码),然后得到结果(返回值)。
优点:避免重复写代码,让你的脚本干净得像刚洗过的白衬衫。
示例:写一个“加法器”函数
matlab
复制
% 在文件 add_numbers.m 中写下以下内容 function result = add_numbers(a, b)% 这是注释:这个函数会返回 a + bresult = a + b; end
使用它:
matlab
复制
sum = add_numbers(3, 5); % 调用函数 disp(sum); % 输出:8(你看,是不是比手算快?)
1.2 函数的高级玩法:多输入多输出
想要一次处理多个参数并返回多个结果?没问题!
示例:计算圆的面积和周长
matlab
复制
% 文件 circle_tools.m function [area, perimeter] = circle_tools(radius)area = pi * radius^2; % 面积perimeter = 2 * pi * radius; % 周长 end
调用:
matlab
复制
[r, p] = circle_tools(5); % 输入半径5 disp(['面积:', num2str(r), ',周长:', num2str(p)]); % 输出:面积:78.5398,周长:31.4159
2. 数据搬运工:导入与导出
2.1 数据导入:从 Excel 偷数据
假设你有一个 Excel 文件 data.xlsx,里面记录了某人的奶茶消费记录:
| 日期 | 奶茶杯数 | 价格(元) |
|---|---|---|
| 2023-01-01 | 2 | 30 |
| 2023-01-02 | 1 | 15 |
用 MATLAB 读取 Excel
matlab
复制
data = readtable('data.xlsx'); % 读取为表格
disp(data);
% 输出:
% 日期 奶茶杯数 价格
% 2023-01-01 2 30
% 2023-01-02 1 15
小贴士:如果 MATLAB 报错,可能是你没安装 Excel 插件。这时候可以大喊一声“sudo apt-get install liboctave-dev”(仅限 Linux 用户)。
2.2 数据导出:把结果存成文件
假设你计算了奶茶总开销,想保存结果:
保存到文本文件
matlab
复制
total_cost = sum(data.价格);
save('奶茶账单.txt', 'total_cost', '-ascii'); % 保存为纯文本
查看文件内容:
复制
30 15 45 % 总开销(别喝太多奶茶,会胖)
3. 让数据跳舞:MATLAB 绘图
3.1 基础绘图:折线图与散点图
MATLAB 的绘图功能能让数据瞬间变成“舞林高手”。
示例:画正弦函数
matlab
复制
x = 0:0.1:2*pi; % 生成 0 到 2π 的等差数列
y = sin(x); % 计算正弦值figure; % 新建一个画布
plot(x, y, 'r--'); % 红色虚线
title('正弦函数的优雅舞姿'); % 加标题
xlabel('X轴:角度'); % X轴标签
ylabel('Y轴:振幅'); % Y轴标签
grid on; % 显示网格线
效果:一条红色虚线正弦曲线在网格上翩翩起舞。
3.2 高级绘图:柱状图与子图
想同时展示多个图表?用 subplot 分屏!
示例:奶茶消费柱状图
matlab
复制
figure;
subplot(2,1,1); % 2行1列的第1个子图
bar(data.奶茶杯数); % 柱状图
title('每日奶茶杯数(老板看了会沉默)');subplot(2,1,2);
plot(data.价格, 'mo-'); % 品红色圆圈连线
title('每日奶茶开销(钱包看了会流泪)');
4. 数学咒语:代数、微积分与多项式
4.1 代数:解方程
MATLAB 可以轻松解方程,比手算快 100 倍(而且不会算错)。
示例:解方程组
{2x+y=5x−y=1{2x+y=5x−y=1
matlab
复制
syms x y; % 定义符号变量 eq1 = 2*x + y == 5; % 方程1 eq2 = x - y == 1; % 方程2 [x_sol, y_sol] = solve([eq1, eq2], [x, y]); % 求解 disp([x_sol, y_sol]); % 输出:[2, 1]
4.2 微积分:求导与积分
微积分是 MATLAB 的拿手好戏,不用手算导数的感觉真爽!
示例:求导数
syms x; f = x^3 + 2*x + 5; df = diff(f, x); % 求导 disp(df); % 输出:3*x^2 + 2
integral_result = int(x^2, x, 0, 1); % 积分 disp(integral_result); % 输出:1/3
4.3 多项式:拟合与求根
多项式就像数学中的“乐高积木”,可以拼出任意曲线。
示例:用多项式拟合数据
x = [1, 2, 3, 4, 5]; y = [2, 3, 5, 7, 11]; p = polyfit(x, y, 2); % 二次多项式拟合 disp(p); % 输出系数,如 [0.5, -0.3, 2.1]
5. 变换:让信号“变身”
5.1 傅里叶变换
傅里叶变换能把时域信号变成频域信号,相当于给信号拍 X 光片。
示例:分析信号频率
matlab
复制
Fs = 1000; % 采样率 1000 Hz t = 0:1/Fs:1-1/Fs; % 时间向量 f = 50; % 信号频率 50 Hz signal = sin(2*pi*f*t); Y = fft(signal); % 傅里叶变换 plot(abs(Y)); % 画频谱(你会看到一个尖峰在50 Hz)
6. 亲戚见面会:GNU Octave 教程
6.1 什么是 GNU Octave?
Octave 是 MATLAB 的“开源表弟”,语法相似但免费。如果你买不起 MATLAB,可以找它凑合。
示例:在 Octave 中运行 MATLAB 代码
octave
复制
% 直接粘贴之前的加法函数 sum = add_numbers(3, 5); disp(sum); % 输出:8(和 MATLAB 一样!)
注意:Octave 的图形界面可能有点“复古”,但核心功能能用就行!
7. Simulink 仿真:乐高式建模
7.1 Simulink 是什么?
Simulink 是 MATLAB 的“乐高工具箱”,用拖拽模块的方式搭建系统模型。适合控制工程、信号处理等。
示例:搭建一个简单的正弦波模型
-
打开 Simulink,新建模型。
-
拖拽以下模块:
-
Sine Wave(生成正弦信号)
-
Scope(显示波形)
-
-
用线连接它们。
-
点击运行,看 Scope 中的波形跳舞!
8. 总结与彩蛋
8.1 今日成就
-
✅ 学会了写函数偷懒。
-
✅ 成了数据搬运工(导入/导出)。
-
✅ 让数据在图上跳了舞。
-
✅ 用 MATLAB 施展了数学魔法。
-
✅ 认识了 MATLAB 的亲戚 Octave。
-
✅ 用 Simulink 搭了乐高模型。
8.2 彩蛋:MATLAB 冷知识
-
输入
why并按回车,MATLAB 会给你一个哲学回答(试试看,比如 “why is the sky blue?”)。 -
输入
surf(peaks)可以画一个炫酷的 3D 曲面(假装自己在做科研)。
相关文章:
MATLAB—从入门到精通的第四天:函数、绘图与数学魔法
MATLAB—从入门到精通的第四天:函数、绘图与数学魔法 欢迎来到第四天的 MATLAB 奇幻之旅!今天的内容将包含 函数编写、数据搬运(导入/导出)、让数据跳舞(绘图),以及 数学咒语(代数、…...
人工智能:企业RAG方案
一、LangChain FAISS、Milvus / Weaviate介绍 在企业 RAG (Retrieval-Augmented Generation)方案中,LangChain FAISS 和 Milvus / Weaviate 都是用于向量检索(Vector Search)的核心工具。两者的核心区别在于 存储方…...
【leetcode hot 100 39】组合总和
错误解法一:每一次回溯都遍历提供的数组 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integer> te…...
基于 Java 和深度学习的图像分类应用实践
前言 随着人工智能技术的飞速发展,深度学习在图像处理、自然语言处理等领域展现出强大的能力。然而,许多开发者认为深度学习只能依赖 Python 的框架(如 TensorFlow 或 PyTorch)。事实上,Java 生态也有成熟的深度学习库,如 Deeplearning4j(DL4J),适合企业级应用场景。…...
SpringMVC全局异常处理机制
异常处理机制 异常处理的两种方式: 编程式异常处理:是指在代码中显式地编写处理异常的逻辑。它通常涉及到对异常类型的检测及其处理,例如使用 try-catch 块来捕获异常,然后在 catch 块中编写特定的处理代码,或者在 f…...
基于32单片机的无人机直流电机闭环调速系统设计
标题:基于32单片机的无人机直流电机闭环调速系统设计 内容:1.摘要 本文针对无人机直流电机调速需求,设计了基于32单片机的无人机直流电机闭环调速系统。背景在于无人机应用场景不断拓展,对电机调速精度和稳定性要求日益提高。目的是开发一套高精度、响应…...
如何实现园区零碳管理?安科瑞EMS3.0推动园区低碳转型
当工业园区电费年耗超千万、碳排数据成监管红线,传统“拉闸限电”式管理已无法应对双碳倒计时——如何让光伏、储能、充电桩“听懂指令”,让每一度电创造3倍价值?187*210*98*782 一、零碳园区管理的三大痛点 1. 能源错配严重:风…...
Python Django入门(创建其他网页)
在本章中,你将学习如何使用 Django(http://djangoproject.com/ )来开发一个名为“学习笔记”(Learning Log)的项目,这是一个在线日志系统,让你能够记录所学习的有关特定主题的知识。 我们将为这…...
Error: The resource name must start with a letter
Error: The resource name must start with a letter 这个错误通常是由于资源名称(如布局文件、字符串资源、ID 等)不符合命名规则导致的。Android 资源名称必须遵循以下规则: 必须以字母开头(不能以数字或下划线开头)…...
2025年- G23-Lc97-104.二叉树的最大深度-java版(递归调用左右子树)
1.题目描述 2.思路 要用到max函数,返回的时候返回左右子树的最大值。其次要递归调用左右子树,寻找最大深度。 在每个递归返回时,我们 必须把当前节点的深度算进去,否则我们只计算了子树的深度,而没有包括当前节点。 …...
Powershell WSL Windows系统复制数据到ubuntu子系统系统
从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…...
零基础上手Python数据分析 (7):Python 面向对象编程初步
写在前面 回顾一下,我们已经学习了 Python 的基本语法、数据类型、常用数据结构和文件操作、异常处理等。 到目前为止,我们主要采用的是 面向过程 (Procedural Programming) 的编程方式,即按照步骤一步一步地编写代码,解决问题。 这种方式对于简单的任务已经足够,但当程序…...
到底爱不爱我
L2-3 到底爱不爱我 古代少女有了心上人时,会悄悄折一条树枝,揪那枝上的叶子,揪一片叶子念一句“爱我”,再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候,看看是停在“爱”还是“不爱”。 但聪明的慧娘一眼洞…...
Python 3.13.2安装教程(安装包)Python 3.13.2 快速安装指南
文章目录 前言一 、Python 3.13.2下载二、Python 3.13.2安装教程1.运行安装程序2.选择安装方式3.自定义安装选项4.开始安装5.安装完成6.打开程序7.验证安装 前言 Python 作为一门通用编程语言,在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库,使…...
CentOS 7 64位安装Docker
以下是在已有的 CentOS 7 64 位虚拟机上安装 Docker 并配置华为镜像源的详细步骤: 1. 备份原有 Yum 源(可选,建议操作) # 备份原有仓库文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu…...
Linux驱动学习笔记(六)
平台总线 1.平台总线模型也叫platform总线模型,平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分:platform_device和platform_driver,例如可使用文件device.c和d…...
35、deque 容器的扩容机制
1. deque 的底层数据结构 deque(双端队列)的底层实现通常由分块连续内存和中央控制结构组成。具体结构如下: 分块存储:元素被存储在多个固定大小的内存块(称为缓冲区)中,每个缓冲区可容纳多个…...
透析Vue的nextTick原理
nextTick 是 Vue.js 中的一个核心机制,用于在 下一次 DOM 更新周期后 执行回调函数。它的核心原理是 利用 JavaScript 的事件循环机制(Event Loop),结合微任务(Microtask)或宏任务(Macrotask&am…...
windows单节点验证victoriametrics结合AlertManger实现告警推送webhook
安装victoriametrics https://docs.victoriametrics.com/single-server-victoriametrics/下载地址 https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.113.0找到victoria-metrics-windows-amd64-v1.113.0.zip https://github.com/VictoriaMetric…...
鸿蒙保姆级教学
鸿蒙(HarmonyOS)是华为推出的一款面向全场景的分布式操作系统,支持手机、平板、智能穿戴、智能家居、车载设备等多种设备。鸿蒙系统的核心特点是分布式架构、一次开发多端部署和高性能。以下是从入门到大神级别的鸿蒙开发深度分析,…...
w264民族婚纱预定系统
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
Compose 实践与探索十五 —— 自定义触摸
1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier: Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了,直接去讲解更复杂的…...
炫酷的3D按钮效果实现 - CSS3高级特性应用
炫酷的3D按钮效果实现 - CSS3高级特性应用 这里写目录标题 炫酷的3D按钮效果实现 - CSS3高级特性应用项目介绍核心技术实现1. 基础结构设计2. 视觉效果实现2.1 背景渐变2.2 立体感营造 3. 交互动效设计3.1 悬停效果3.2 按压效果 技术要点分析1. 深度层次感2. 动画过渡3. 性能优…...
Flutter小白零基础入门到高级项目实战全集
Flutter零基础入门到高级项目实战全集内容如下: Dart入门基础教程16讲、Null safety 、late 关键字、空类型声明符?、非空断言!、required 、Flutter入门基础、Flutter瀑布流布局、Flutter动画、Flutter异步流、GlobalKey 、Flutter国际化、…...
teaming技术
一.介绍 在CentOS 6与RHEL 6系统中,双网卡绑定采用的是bonding技术。到了CentOS 7,不仅能继续沿用bonding,还新增了teaming技术。在此推荐使用teaming,因其在查看与监控方面更为便捷 。 二.原理 这里介绍两种最常见的双网卡绑定…...
前端开发:Vue以及Vue的路由
Vue是什么 警告:本文作者是底层程序员,对Vue只是偶尔用到,研究并不深入,对Vue的理解可能非常肤浅甚至存在错误,请多包含。以下文字只为外行记录分享,专业前端朋友可以略过。 作为一个底层老程序员&#x…...
【JavaEE进阶】Linux常用命令
目录 🍃前言 🌴pwd 与 ls 🚩pwd 🚩ls 🎍cd 🌲mkdir与touch 🚩mkdir 🚩touch 🍀cat与rm 🚩cat 🚩rm 🎋vim 🚩…...
【FastGPT】利用知识库创建AI智能助手
【FastGPT】利用知识库创建AI智能助手 摘要创建知识库上传文档创建应用准备提示词准备开场白关联知识库AI回答效果 摘要 关于FastGPT的部署,官方提供了docker-compose方式的部署文档,如果使用的是podman和podman-compose的同学,可以参考这篇…...
【DeepSeek 学c++】dynamic_cast 原理
用于向下转化。 父类引用指向指类对象 假设父亲是a, 子类是b. B* pb new B; 子类对象 A* pa 父类引用指向子类对象, 那么向上转化 Apa pb 这个是自动完成的,隐式转化,不需要dynamic_cast 向下转化指的是 A pa new B。 这个是指向子类对象…...
设计一套水产养殖系统
设计一套水产养殖系统 引言 水产养殖在全球粮食安全和经济发展中日益重要。它不仅为不断增长的人口提供了重要的蛋白质来源,还在许多地区创造了就业机会并促进了经济增长 。全球超过一半的人类消费的海产品来自水产养殖,并且这一比例预计将继续上升 。…...
