欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > MATLAB—从入门到精通的第四天:函数、绘图与数学魔法

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

2025/3/29 19:36:14 来源:https://blog.csdn.net/m0_69824302/article/details/146427672  浏览:    关键词: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-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 曲面(假装自己在做科研)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词