MATLAB核心技巧:从入门到精通

1.数值 显示 格式

format style 设置

eg: pi format longE;

or

2.清除指令

clc 清除命令行窗口

clear 清除工作区

cls

3.搜索路径设置

path(path,'E:\ads\')

or

addpath

4.M文件

用户把要实现的命令写在一个以.m为扩展的文件中,然后由matlab系统进行解读,最后运行结果。

类型:

脚本:也可以自己写函数;

函数:函数名和文件名相同;

5.通用描述

general 命令

函数:rand(), sin(60)

工具箱

abs , sqrt, exp

help abs

分号;,不打印在命令行中

6.通用命令

常用:cls clf clear exit quit home echo type more cd dir load diary pack hold(图形保持

close

快捷键

\[\]向量和矩阵标识符

1.向量

冒号表示

linspace(a1,an,n) n默认100 ,首元素尾元素 等分间距

logspace(a1,an,n) n默认50

算数运算

点积和叉积

2.矩阵matrix

特殊矩阵

ones(3,3) or ones(3)

zeros( )

eye()

diag()对角

magic

rand 0-1均匀分布

randn 高斯分布

稀疏矩阵

非零元素和行列索引来存,节省空间;

密度:

转换函数:满矩阵-稀疏矩阵

结论

MATLAB 的稀疏矩阵是按索引存储的,采用的是列优先顺序下的压缩列存储(CSC)格式。只保存了非零元素及其所在的行列索引,从而实现了高效的内存利用和运算性能。

导入外部数据 load

多维数组

1.数据类型

isinteger(x)

class(x)

双精度浮点(默认)

2.类型转换函数

复数:z = complex(x,y)

z = complex(x)

z = 12 + 6i;

z = rand(2)*2

3.字符,结构体(C++)

4.元胞数组

5.函数句柄

可作为参数传递给其他函数,C++中有相同概念函数指针或回调函数,执行时机和逻辑分离;

6.字符串

1.程序

M文件,扩展名.m。通过编写M文件可以实现各种复杂运算。

eg:

循环语句:for and while 前者有次数,后者没有,通过条件判断式来决定

条件语句:ifelse switch case

continue

return

break

交互命令:

echo

error

keyboard

2.调试

矩阵运算

范数

det

cond判断奇异性

rank

trace

特征值和特征向量

矩阵空间夹角

矩阵分解

1.chol

2.LU

3.QR

4.左右除:

为了方便记忆对哪个矩阵进行逆运算,规律如下:

在可逆形式下转换成逆矩阵,右除对右边矩阵逆,左除对左边矩阵逆。

  1. C/B=C*(inv(B)) (C右除B等于C乘以B的逆)

  2. A\C=inv(A)*C (A左除C=A的逆乘以C)

1.可视化

eg:

步骤:

2.二维图形绘制

双坐标轴

hold on 叠图

hold off

子图

subplot(m,n,k)

3.三维图形

plot3

mesh 三维网格图

surf

3.二维特殊图形

饼状图

阶梯图

条形图

等高线

errorbar

4.三维特殊图形函数

5.四维

1.坐标轴和图形标注

标注:

图例标注:legend

取点:ginput

2.命令控制

网格控制

view:观察点

3.颜色

增亮:

颜色标尺:

背景色:

光照设置:

4.图形窗口

创建:

get获得图形窗口属性;

打印或输出:

1.数学函数->matlab语言

三角函数:

指数对数

复数

截断或求余

2.特殊函数

坐标变换函数:

数论函数:

素数

1.符号运算

sym:

syms:

class

对象类型

符号运算

化简:

在 MATLAB 中,符号对象(symbolic object)普通数值(numeric value) 的区别主要体现在数据类型、计算方式、精度、用途等方面。下面我分学术和工程两个角度给你梳理一下。


1. 数据类型不同

特性 符号对象 (sym) 普通数值 (double, single 等)
数据类型 符号类型(Symbolic) 浮点数类型(Numeric)
存储形式 存储的是数学表达式或符号常量,不是近似值 存储的是有限精度的二进制浮点数
创建方式 syms x; f = sym('pi'); a = 3.1416;

2. 计算方式不同

  • 符号对象

    • 符号推导规则运算,不会做浮点近似化。

    • 能进行代数化简、微分、积分、解方程等符号运算。

    • 例如:

      复制代码
      syms x
      diff(sin(x)^2, x)   % 结果是 2*sin(x)*cos(x)
  • 普通数值

    • 数值计算规则运算,采用 IEEE 754 双精度(或单精度)近似。

    • 无法直接进行代数化简,结果通常是近似数。

    • 例如:

      复制代码
      x = pi/3;
      diff(sin(x)^2, x)   % 会报错,因为 x 只是数值

3. 精度与近似

  • 符号对象 → 理论上无限精度 (直到内存限制),保留 exact form,如 pisqrt(2)

  • 普通数值 → 有限精度(double 默认约 15~16 位有效数字),存在舍入误差。

举例:

复制代码
sym(pi) - 4*atan(sym(1))   % 结果是 0(完全相等)
pi - 4*atan(1)             % 结果是 0(数值上接近,但可能不是精确 0)

4. 用途上的区别

  • 符号对象

    • 符号微积分(diffint

    • 符号代数(simplifyfactor

    • 精确解析解(solve

    • 高精度常数计算(配合 vpa 可指定位数)

  • 普通数值

    • 数值仿真(ODE 数值解、FFT 等)

    • 工程数值计算(矩阵运算、统计分析等)

    • 实时计算与信号处理


5. 转换关系

  • 数值 → 符号

    复制代码
    a = 3.14;
    sym_a = sym(a);
  • 符号 → 数值

    复制代码
    x = sym('pi');
    double(x)  % 转为 double 类型近似值

总结表

特性 符号对象 (sym) 普通数值 (double/single)
精度 理论无限精度 有限(~15 位)
运算方式 代数运算 浮点近似运算
用途 推导、符号解、精确计算 数值计算、仿真
内存占用 较大 较小
速度

MATLAB 之所以要引入 符号对象(Symbolic Object) ,本质上是因为数值计算数学推导的需求是两类完全不同的任务,而普通浮点数无法满足后一类任务的精确性与表达能力。

我分几个层次解释一下**"为什么需要符号对象"**。


1. 解决浮点数无法表达精确数学对象的问题

普通数值(doublesingle)存储的是近似值,而许多数学对象是无法用有限二进制小数精确表示的,比如:

  • π\pi、ee、2\sqrt{2}

  • 分数 13\frac{1}{3}

  • 无理数、代数式

浮点数在这些情况下会引入舍入误差,而符号对象则保留精确的数学形式

复制代码
sym(pi)   % 保留为 π,不是 3.1416...

2. 支持解析计算(Analytical Computation)

有些任务必须基于公式推导而不是近似数值:

  • 符号微分(得出通用公式,而非某一点的导数)

  • 符号积分(求出积分解析式)

  • 符号解方程(求变量的精确表达式)

  • 代数化简(消去公共因子、展开或因式分解)

例子:

复制代码
syms x
diff(sin(x)^2, x)   % 结果是 2*sin(x)*cos(x),而不是数值

这种能力在通信理论推导、信号公式变换等科研任务中很重要。


3. 实现高精度或任意精度计算

浮点数精度有限(double 约 15~16 位有效数字)。

当需要极高精度(如大数计算、误差敏感问题)时,浮点运算会累积误差。

符号对象配合 vpa(Variable Precision Arithmetic)可以按需求设置精度:

复制代码
vpa(pi, 50)   % 计算 π 的 50 位有效数字

4. 支持数值与推导的混合工作流

在科研和工程计算中,经常需要先推导公式,再数值仿真。

  • 推导阶段:用符号对象得到通用解析公式

  • 仿真阶段:将符号公式转成数值函数,高速计算

这种模式可以减少人工推导错误,并在参数变化时自动更新公式。

例如 MU-MIMO 信道容量公式推导,可以用符号对象自动完成矩阵求导、迹运算等,再转为数值形式计算吞吐量。


5. 工程意义

  • 避免手工推导的繁琐与易错性(符号引擎自动化)

  • 保证结果的数学严谨性(不会因为舍入误差而得到错误结论)

  • 提供可复用的解析模型(直接嵌入到数值计算中)


总结一句

符号对象的存在,是为了让 MATLAB 不仅能"算数",还能"做数学"

它让 MATLAB 既能做高速的数值计算(仿真),也能做精确的符号推导(理论分析),两者结合才适用于科研和高精度工程应用。


对,你的理解方向是对的,但我帮你精确化一下:符号变量并不是简单的"把数值换成变量" ,而是把数值、变量甚至表达式都作为数学符号来处理,从而保留它们的精确结构。


1. 普通数值 vs 符号变量的本质区别

  • 普通数值

    • 只存储具体的数(例如 3.1416),MATLAB 只能对它做数值运算。

    • 计算结果是数值,没有"通用性"。

  • 符号变量 / 符号对象

    • 存储的是一个数学符号(例如 xx、π\pi、2\sqrt{2}),可以在运算中保持符号形式,不直接化成数值。

    • 能保留变量之间的关系,形成通用公式。

    • 计算结果可以是另一个公式,而不是一个单一的数。


2. 例子直观比较

数值计算

复制代码
x = pi/3;      % 数值
y = sin(x)^2;  % 已经是数值
diff(y, x)     % ❌ 报错,因为 y 是数值,不是表达式

符号计算

复制代码
syms x
y = sin(x)^2;   % 符号表达式
dy = diff(y, x) % 结果: 2*sin(x)*cos(x)

这里 x 就是一个符号变量,不是具体数值,所以 MATLAB 可以对它做微分、积分、化简等操作。


3. 不只是变量,还能是"精确数"

符号对象还可以表示常数的精确形式:

复制代码
sym(1/3)     % 保留为 1/3
1/3          % double 结果是 0.3333...

这意味着符号对象不仅仅是 "未知量 xx",也可以是一个精确常数 或一个代数式


4. 总结你的那句话

符号变量并非简单地将数值替换为变量,而是以符号形式存储数学对象(变量、常数或表达式),使其在运算中保留解析结构,从而能够生成通用公式,而不仅是针对特定数值的结果。


MATLAB符号变量的创建和简单运算-CSDN博客

2.符号表达式

作为一个公式;

极限:

求和:

泰勒:

积分:

傅里叶变换:

eg:阶跃函数

拉普拉斯变换:

eg:

Z变换:

eg:

3.符号矩阵运算

4.符号方程求解

5.可视化数学分析窗口

泰勒级数分析:

总结

是的,你现在已经抓到符号对象的核心特性了。

更精确地说,符号对象可以在两种"模式"下使用


1. 作为"表达式"运算(符号模式)

  • 所有变量、矩阵、公式保持符号形式,不转成具体数值。

  • 运算结果依旧是另一个公式(而不是数)。

  • 常见用途:推导公式、化简表达式、符号微分/积分、符号解方程等。

例子:

复制代码
syms x y
f = sin(x)^2 + y^2;   % 符号表达式
dfdx = diff(f, x)     % 结果是 2*sin(x)*cos(x)

2. 对符号赋值求数值(数值模式)

  • 可以用 subs 将符号变量替换成具体值,再用 double 转换为数值。

  • 常见用途:公式推导完成后,用特定参数计算结果。

例子:

复制代码
syms x y
f = sin(x)^2 + y^2;

f_sub = subs(f, [x y], [pi/3 2]);  % 用具体值替换符号
num_result = double(f_sub)         % 转成 double 类型数值

3. 符号矩阵同理

  • 推导阶段:符号矩阵保留精确结构,可做代数运算(行列式、逆、迹等)。

  • 计算阶段:赋值并数值化求具体结果。

例子:

复制代码
syms a b c d
A = [a b; c d];
det_A = det(A)          % 结果是 a*d - b*c (公式)
det_num = double(subs(det_A, [a b c d], [1 2 3 4])) % 结果是 -2

总结

你完全可以先用符号对象推导出通用表达式(保持解析精度),然后在需要时给符号变量赋值求数值。
这种"先符号推导 → 再数值计算"的模式特别适合通信系统公式推导 + 仿真这类科研任务,因为能避免手算公式的易错性,又能在仿真中复用公式。


数值计算:

求解方案:

高斯:

迭代法:对高阶

插值:

插值(Interpolation )在数学和信号处理里,指的是已知一组离散数据点,通过一定方法推算这些点之间未知位置的值

它的本质就是------用一个连续函数去"穿过"这些已知点,然后用它估计中间点


1. 插值的基本概念

假设你知道某函数在 x0,x1,...,xnx_0, x_1, \dots, x_n 处的值 y0,y1,...,yny_0, y_1, \dots, y_n,

插值的目标就是构造一个函数 P(x)P(x),使得:

P(xi)=yi,i=0,1,...,nP(x_i) = y_i, \quad i=0,1,\dots,n

并用 P(x)P(x) 来估算这些已知点之间的任意位置的值。


2. 插值 vs 拟合

  • 插值 :要求插值函数严格通过所有已知数据点,没有偏差。

  • 拟合:允许拟合曲线与数据点有一定误差,更关注整体趋势(比如最小二乘法拟合)。


3. 常见插值方法

方法 特点 举例
线性插值 (Linear) 相邻两点之间用直线连接,简单快速 interp1(x, y, xq, 'linear')
多项式插值 (Polynomial) 用高次多项式穿过所有点 拉格朗日插值、多项式插值公式
分段三次样条插值 (Cubic Spline) 分段三次多项式,保证一阶、二阶导数连续,曲线平滑 interp1(x, y, xq, 'spline')
二维/多维插值 适用于二维/三维数据 interp2interpn
傅里叶插值 用周期信号的频域展开做插值 信号处理中的带限插值

4. MATLAB 中的插值示例

复制代码
x = [0 1 2 3];
y = [0 1 0 1];

xq = 0:0.1:3;  % 查询点
y_linear = interp1(x, y, xq, 'linear'); % 线性插值
y_spline = interp1(x, y, xq, 'spline'); % 样条插值

plot(x, y, 'o', xq, y_linear, '-', xq, y_spline, '--');
legend('原始点', '线性插值', '样条插值');

5. 工程与科研中的意义

  • 信号处理:将离散采样信号恢复到连续时间(带限插值)。

  • 通信系统:定时同步、信道估计中利用插值获得未采样点的信道响应。

  • 数值计算:在已知离散解的情况下估算中间值(如有限元分析)。

  • 图像处理:图像缩放(最近邻插值、双线性插值、双三次插值)。


📌 一句话总结:

插值是"已知几个点,填补中间的空白"的过程,本质上是用一个连续函数通过这些点,然后用它预测未知点的值。


拟合:

polyfitpolyval 是 MATLAB 里一对常用的多项式拟合 + 计算工具,它们经常配合使用,但作用不同:


1. polyfit ------ 求多项式系数(拟合阶段)

作用 :给定一组数据点,找到一个指定阶数的多项式,使它在最小二乘意义下尽量接近这些数据。

语法

复制代码
p = polyfit(x, y, n)
  • xy:数据点(长度相同的向量)

  • n:拟合多项式的阶数

  • p:返回一个行向量,包含从高次项到常数项的系数

例子:

复制代码
x = [1 2 3 4];
y = [2.2 2.8 3.6 4.5];
p = polyfit(x, y, 1)   % 一阶拟合(直线)
% p 可能返回 [0.77 1.45],对应 0.77*x + 1.45

2. polyval ------ 计算多项式值(预测阶段)

作用:根据多项式系数,计算多项式在某些点的值。

语法

复制代码
y_fit = polyval(p, xq)
  • p:由 polyfit 返回的系数向量

  • xq:要计算的自变量值(可为标量、向量或矩阵)

  • y_fit:对应的多项式值

例子:

复制代码
xq = 1:0.5:4;       % 查询点
yq = polyval(p, xq) % 根据拟合多项式预测

3. polyfit + polyval 组合使用示例

复制代码
% 原始数据
x = [1 2 3 4];
y = [2.2 2.8 3.6 4.5];

% 用二阶多项式拟合
p = polyfit(x, y, 2);

% 生成更密的 x 值进行预测
xq = linspace(1, 4, 100);
yq = polyval(p, xq);

% 绘图
plot(x, y, 'o', xq, yq, '-');
legend('原始数据', '二阶拟合曲线');

4. 和插值的区别

  • 插值 :要求曲线经过所有原始点(误差为 0)。

  • polyfit 拟合:允许曲线不经过所有点,目标是最小化总体误差(最小二乘法)。

  • 多项式插值也能用 polyfit 实现,但拟合阶数要等于数据点数减 1(容易震荡)。


总结

  • polyfit:求多项式系数(拟合/插值)

  • polyval:用系数计算多项式值(预测/绘制)

  • 常用组合:
    polyfit 找系数 → 再 polyval 画曲线或求值


如果你需要,我可以帮你画一张**"polyfit vs 插值"对比图**,让你直观看到同一组点用线性拟合、二次拟合、样条插值的区别。这样你在科研(比如 MU-MIMO 信道曲线建模)时能快速判断用哪种方法。

相关推荐
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海5 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区8 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大9 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai9 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜9 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa9 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio