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-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 曲面(假装自己在做科研)。