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 信道曲线建模)时能快速判断用哪种方法。

相关推荐
FL162386312914 小时前
C# OpenCvSharp 基于霍夫变换直线检测的文本图像倾斜校正文本图像倾斜校
开发语言·c#
leo__52014 小时前
MATLAB实现UKF(无迹卡尔曼滤波)原理
人工智能·matlab
techdashen14 小时前
在 Fly.io 上使用 Rust 构建远程开发环境:从 Tokio 到 eBPF
开发语言·后端·rust
fie888914 小时前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab
留白_14 小时前
pandas文件读取与存储
开发语言·python·pandas
夕除14 小时前
AOP 实现 Redis 缓存切面解析
java·开发语言·python
feifeigo12314 小时前
马尔可夫决策过程(MDP)MATLAB 实现
开发语言·matlab
攻城狮Soar15 小时前
STL源码解析之list(1)
开发语言·c++
x***r15115 小时前
Postman-win64-7.3.5-Setup安装配置教程(Windows 详细版)
开发语言·lua
林森lsjs15 小时前
【日耕一题】4. 较为复杂情况下的求和
java·开发语言