MATLAB—从入门到精通的第四天:函数、绘图与数学魔法

news2025/3/22 9:36:25

MATLAB—从入门到精通的第四天:函数、绘图与数学魔法

欢迎来到第四天的 MATLAB 奇幻之旅!今天的内容将包含 函数编写数据搬运(导入/导出)让数据跳舞(绘图),以及 数学咒语(代数、微积分)。我们还会顺路拜访 MATLAB 的亲戚 GNU Octave,最后用 Simulink 玩个“乐高式”仿真!全程高能,附带代码段子,请系好安全带。


1. 函数:MATLAB 的“偷懒神器”

1.1 函数是什么?

函数就像哈利波特的魔法咒语——输入一些东西(参数),念咒语(代码),然后得到结果(返回值)。
优点:避免重复写代码,让你的脚本干净得像刚洗过的白衬衫。

示例:写一个“加法器”函数

matlab

复制

% 在文件 add_numbers.m 中写下以下内容
function result = add_numbers(a, b)
    % 这是注释:这个函数会返回 a + b
    result = 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-01230
2023-01-02115
用 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 的“乐高工具箱”,用拖拽模块的方式搭建系统模型。适合控制工程、信号处理等。

示例:搭建一个简单的正弦波模型
  1. 打开 Simulink,新建模型。

  2. 拖拽以下模块:

    • Sine Wave(生成正弦信号)

    • Scope(显示波形)

  3. 用线连接它们。

  4. 点击运行,看 Scope 中的波形跳舞!


8. 总结与彩蛋

8.1 今日成就

  • ✅ 学会了写函数偷懒。

  • ✅ 成了数据搬运工(导入/导出)。

  • ✅ 让数据在图上跳了舞。

  • ✅ 用 MATLAB 施展了数学魔法。

  • ✅ 认识了 MATLAB 的亲戚 Octave。

  • ✅ 用 Simulink 搭了乐高模型。

8.2 彩蛋:MATLAB 冷知识

  • 输入 why 并按回车,MATLAB 会给你一个哲学回答(试试看,比如 “why is the sky blue?”)。

  • 输入 surf(peaks) 可以画一个炫酷的 3D 曲面(假装自己在做科研)。

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

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

相关文章

基于 Java 和深度学习的图像分类应用实践

前言 随着人工智能技术的飞速发展,深度学习在图像处理、自然语言处理等领域展现出强大的能力。然而,许多开发者认为深度学习只能依赖 Python 的框架(如 TensorFlow 或 PyTorch)。事实上,Java 生态也有成熟的深度学习库,如 Deeplearning4j(DL4J),适合企业级应用场景。…

如何实现园区零碳管理?安科瑞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 资源名称必须遵循以下规则: 必须以字母开头(不能以数字或下划线开头&#xff09…

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 管理员打开执行…

到底爱不爱我

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 作为一门通用编程语言,在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库,使…

Linux驱动学习笔记(六)

平台总线 1.平台总线模型也叫platform总线模型,平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分:platform_device和platform_driver,例如可使用文件device.c和d…

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. 性能优…

teaming技术

一.介绍 在CentOS 6与RHEL 6系统中,双网卡绑定采用的是bonding技术。到了CentOS 7,不仅能继续沿用bonding,还新增了teaming技术。在此推荐使用teaming,因其在查看与监控方面更为便捷 。 二.原理 这里介绍两种最常见的双网卡绑定…

【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。 这个是指向子类对象…

【递归,搜索与回溯算法篇】- 名词解释

一. 递归 1. 什么是递归? 定义: 函数自己调用自己的情况关键点: ➀终止条件: 必须明确递归出口,避免无限递归 ➁子问题拆分: 问题需能分解成结构相同的更小的子问题缺点: ➀栈溢出风险&#x…

Beans模块之工厂模块注解模块@Qualifier

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

数据结构---图的深度优先遍历(DFS)

一、与树的深度优先遍历之间的联系 1.类似于树的先根遍历。 递归访问各个结点: 2.图的深度优先遍历 先设置一个数组,初始值全部设置为false,先访问一个结点,在用一个循环,依次检查和这个结点相邻的其他结点&#xff0c…

健康养生:拥抱生活,从呵护身心开始

在这个瞬息万变的时代,人们好似不停旋转的陀螺,在忙碌中迷失了对健康的关注。然而,健康养生绝非可有可无的点缀,它是幸福生活的基石,如同阳光与空气,滋养并支撑着我们的生命。当我们懂得拥抱健康养生&#…