当前位置: 首页 > news >正文

MATLAB 常用函数汇总大全和高级应用总结

基础应用

1. 基本数学运算函数

函数功能示例
abs(x)绝对值abs(-3)3
sqrt(x)平方根sqrt(16)4
exp(x)指数函数 exe^xexexp(1)2.7183
log(x)自然对数log(exp(3))3
log10(x)常用对数(以 10 为底)log10(100)2
sin(x), cos(x), tan(x)三角函数(弧度制)sin(pi/2)1
asin(x), acos(x), atan(x)反三角函数asin(1)1.5708
round(x)四舍五入round(3.6)4
floor(x)向下取整floor(3.6)3
ceil(x)向上取整ceil(3.2)4
mod(a,b)取模mod(7,3)1
rem(a,b)余数rem(7,3)1
sign(x)符号函数(-1, 0, 1)sign(-5)-1

2. 矩阵与数组操作

函数功能示例
size(A)返回矩阵维度size([1 2; 3 4])[2 2]
length(A)向量长度 / 最大维度长度length([1 2 3 4])4
numel(A)元素总数numel(eye(3))9
reshape(A,m,n)改变矩阵形状reshape(1:6,2,3) → 2x3 矩阵
transpose(A) / A.'转置(不共轭)[1+2i 3; 4 5]'
ctranspose(A) / A'共轭转置[1+2i 3; 4 5]'
diag(A)提取/生成对角矩阵diag([1 2 3])
triu(A)上三角矩阵triu(magic(3))
tril(A)下三角矩阵tril(magic(3))
inv(A)矩阵求逆inv([1 2; 3 4])
pinv(A)广义逆(伪逆)pinv([1 2; 3 4])
det(A)行列式det([1 2; 3 4])
rank(A)矩阵秩rank([1 2; 2 4])1
eig(A)特征值与特征向量[V,D] = eig([1 2; 2 1])
svd(A)奇异值分解[U,S,V] = svd(rand(3))

3. 统计与线性代数

函数功能示例
mean(A)平均值mean([1 2 3])2
median(A)中位数median([1 3 2])2
var(A)方差var([1 2 3])1
std(A)标准差std([1 2 3])1
sum(A)求和sum([1 2 3])6
prod(A)连乘prod([1 2 3])6
max(A)最大值max([3 7 2])7
min(A)最小值min([3 7 2])2
corrcoef(A,B)相关系数corrcoef([1 2 3],[2 4 6])

4. 绘图与可视化

函数功能示例
plot(x,y)二维折线图plot(0:0.1:2*pi, sin(0:0.1:2*pi))
scatter(x,y)散点图scatter(rand(10,1), rand(10,1))
bar(y)柱状图bar([1 3 2])
histogram(A)直方图histogram(randn(1000,1))
pie(A)饼图pie([2 3 4])
surf(X,Y,Z)三维曲面图surf(peaks)
mesh(X,Y,Z)三维网格图mesh(peaks)
contour(X,Y,Z)等高线图contour(peaks)
imshow(I)显示图像imshow(imread('cameraman.tif'))
imagesc(A)可视化矩阵imagesc(magic(5))

5. 文件输入输出

函数功能示例
load('file.mat')读取 .mat 文件load('data.mat')
save('file.mat','A')保存变量save('result.mat','A')
csvread('file.csv')读取 CSVcsvread('data.csv')
csvwrite('file.csv',A)写入 CSVcsvwrite('output.csv',A)
xlsread('file.xlsx')读取 Excel[num,text,raw] = xlsread('data.xlsx')
xlswrite('file.xlsx',A)写 Excelxlswrite('out.xlsx',rand(5))
fopen, fclose, fscanf, fprintf文本文件操作fid=fopen('test.txt','w'); fprintf(fid,'%f',pi); fclose(fid);

6. 图像处理常用函数

函数功能示例
imread('file')读入图像I = imread('cameraman.tif')
imwrite(I,'file')保存图像imwrite(I,'out.png')
rgb2gray(I)彩色转灰度Igray = rgb2gray(I)
imresize(I, scale)图像缩放imresize(I,0.5)
imrotate(I, angle)图像旋转imrotate(I,45)
imcrop(I, rect)裁剪图像imcrop(I,[50 50 100 100])
edge(I,'canny')边缘检测BW = edge(I,'canny')
fft2(I)二维傅里叶变换F = fft2(I)
ifft2(F)逆变换I2 = ifft2(F)

7. 信号处理常用函数

函数功能示例
fft(x)快速傅里叶变换fft([1 2 3 4])
ifft(X)逆 FFTifft(fft([1 2 3 4]))
filter(b,a,x)IIR/FIR 滤波y = filter([1 -1],[1],x)
conv(x,h)卷积conv([1 2 3],[1 1])
xcorr(x,y)互相关xcorr([1 2 3],[1 1])
spectrogram(x)时频分析spectrogram(sin(0:0.01:10))

8. 符号运算(Symbolic Math Toolbox)

函数功能示例
syms x定义符号变量syms x y
diff(f,x)符号微分diff(sin(x),x)cos(x)
int(f,x)不定积分int(x^2,x)x^3/3
int(f,a,b)定积分int(x^2,0,1)1/3
limit(f,x,a)极限limit(sin(x)/x,x,0)1
solve(eq,x)解方程solve(x^2-4==0,x)±2
taylor(f,x,a,n)泰勒展开taylor(exp(x),x,0,5)

高级应用

1.进阶数据结构与类型

  • Table / timetable / categorical

    • table, readtable, writetable:面向列的数据表,适合异构列(数值、字符串、类别)。
    • timetable:带时间索引的表,方便时序数据操作(retime, synchronize)。
    • categorical:节省内存并提高分组/比较效率,适用于离散标签。
    T = readtable('data.csv');
    TT = table2timetable(T,'RowTimes','Time');
    TT2 = retime(TT,'daily','mean');
    
  • Sparse 矩阵

    • sparse, nnz, spy,用于大规模稀疏系统;线性求解优先用 \(背后自动选最优方法),或 eigs, chol(稀疏 Cholesky)。
    A = sparse(i,j,v,m,n);
    x = A\b;        % 高效稀疏求解
    
  • Containers & 高级集合

    • containers.Map(键值表)、datetime / durationstring(比 char 更现代)、cell/struct

2.数值线性代数与稳定性技巧

  • 优先使用高层函数(A\b)而非显式 inv(A)

  • 常用稳定/高效求解器

    • \ (mldivide)、lsqminnorm(欠定最小范数)、linsolve(可传选项)、chol/cholupdateluqreigs
  • SVD/秩相关:对病态问题用 svdsvds 分析奇异值分布,做截断正则化(TSVD)。

  • 正则化 & 数值稳定化Tikhonov(添加 lambda*I)、pinv(伪逆)、ridge(统计工具箱)。

3. 性能优化与向量化(最影响速度的点)

  • 预分配:先 zeros, nan, cell,避免动态扩容。

    A = zeros(1,1e6);
    for k=1:1e6, A(k)=k; end
    
  • 向量化替代循环:尽量用矩阵运算、逻辑索引、bsxfun(旧),现在优先隐式扩展(implicit expansion)。

    % loop -> vectorized
    % for i: y(i)=a(i)+b;
    y = a + b;        % 隐式扩展 / 向量运算
    
  • 高效索引技巧:逻辑索引、find,用 accumarray 做分组统计替代循环。

  • 减少临时变量 / 内存峰值:链式运算可能产生临时大数组,必要时分步并 clear 临时结果。

  • 内存查看与管理whos, memory(Windows)查看内存分配;大数组用 singlegpuArray(见下)减小占用。

  • JIT-friendly 代码:避免在循环中使用复杂动态结构(动态字段、增长的 cell),保持数组类型一致。

4.并行计算与 GPU 加速

  • 多核并行(本地/集群)

    • parpool, parfor:并行 for;适合独立迭代任务。
    • spmd:分布式并行,处理分块数据或 Message Passing。
    • parfeval, backgroundPool:异步执行(注意你不能让我后台执行——这里仅说明)。
    parpool(4);
    parfor i=1:Nout(i) = heavyFunc(i);
    end
    
  • GPU 加速(需要 Parallel Computing Toolbox & GPU 支持)

    • gpuArray, gather, arrayfun(GPU 上的 elementwise 函数),大多数线性代数/FFT/conv 支持 GPU 版本。
    A_gpu = gpuArray(rand(1000));
    B_gpu = A_gpu * A_gpu;
    B = gather(B_gpu);
    
  • 处理大数据tall arrays(惰性评估)、datastore(分块读入 CSV/Datastore)、mapreduce(大数据 MapReduce 风格)。

    ds = datastore('bigdata/*.csv');
    tt = tall(ds);
    meanVal = mean(tt.Value);   % 在本地机器/cluster 上可扩展
    

5.I/O、数据持久化与大文件处理

  • 高效读写matfile(增量读写 .mat)、memmapfile(二进制内存映射)、datastore/tall

    m = matfile('large.mat','Writable',true);
    chunk = m.A(1:1000,:);   % 不会把整个文件载入内存
    
  • 表格/文本readtable / writetable / detectImportOptions 用于自动推断与自定义列类型。

  • 图像/视频imread, imwrite, VideoReader, VideoWriter,对大视频做分帧处理并行化。

6.绘图、可视化与发布

  • 现代绘图 APItiledlayout 替代 subplotuifigure + uicontrol 用于交互式 GUI(App Designer)。

  • 导出高质量图exportgraphics, print, saveas,常配 -r300-r600 输出高分辨率图。

  • 交互与动画plotly(第三方)、getframe/movie, animatedline(实时时绘图)。

  • 三维/体数据trisurf, isosurface, volshow(App),pcshow(点云)、pcread/pcwrite

    tiledlayout(1,2);
    ax1 = nexttile; plot(ax1,x,y);
    ax2 = nexttile; imagesc(ax2,rand(100));
    exportgraphics(gcf,'fig.png','Resolution',300);
    

7.图像/信号处理常用进阶函数

  • 图像(Image Processing Toolbox)imfilter, imgaussfilt, imbinarize, imopen/imclose, regionprops, bwconncomp
  • 特征与匹配(Computer Vision Toolbox)detectSURFFeatures, detectHarrisFeatures, extractFeatures, matchFeatures
  • 频域/滤波(Signal Processing Toolbox)designfilt, filtfilt, butter, spectrogram, welch

8.调试、性能剖析与测试

  • 调试工具:断点、dbstop if error, keyboarddisp/fprintf

  • 分析性能profile on; ...; profile viewer,关注 CPU hotspots 与内存分配。

  • 单元测试matlab.unittest 框架(测试类、断言、测试套件、mock)。

    import matlab.unittest.TestCase
    classdef MyTest < TestCasemethods(Test)function testSimple(tc)tc.verifyEqual(1+1,2);endend
    end
    
  • 代码覆盖率:使用 matlab.unittest.TestRunner 的覆盖率插件检查测试覆盖度。

9.代码组织与工程化

  • 函数与包:使用 +package 命名空间和 @class(类)组织大型项目;addpath, savepath 管理路径。

  • 面向对象:值类(默认) vs 句柄类(继承 handle),注意句柄类的共享语义与内存管理。

  • 函数接口设计:使用 inputParserarguments(新语法,R2019b 及以后)做参数检查和默认值。

    function out = myfun(a,b,varargin)p = inputParser;addOptional(p,'scale',1,@isnumeric);parse(p,varargin{:});s = p.Results.scale;out = a + b*s;
    end
    
  • 文档与示例:在 .m 文件顶部用 help 注释,doc 自动生成帮助文档;使用 Live Script(.mlx)写可交互教程。

10.与外部语言/工具互操作

  • MEX / C / C++:用 mex 编译 C/C++ 代码以加速关键内核(注意内存管理与类型转换)。

  • Python 集成py 命名空间直接调用 Python,或用 pyrun

    py.numpy.array([1,2,3]);
    
  • Java / .NET:MATLAB 可直接调用 Java 类或编译为 Java 包。

  • 部署MATLAB Compiler 打包为独立应用或库(注意 license 要求),Simulink Coder 生成 C 代码嵌入设备。

11.常见陷阱与实战建议

  • 不要用 for 盲目替代向量化,在某些含大量复杂逻辑的情形下 parfor + preallocation 更适合。
  • 避免 eval:维护性差且慢,用 function handlesstr2func 替代。
  • 注意隐式类型转换:字符串、char、cell 和 categorical 的混用会引发奇怪错误。
  • 随机性可复现rng(seed,'twister') 固定种子。
  • I/O 性能:对重复读写大数组采用 matfile 或二进制格式减少开销。
  • 版本差异bsxfun 在旧版必须用,新版(R2016b 以后)支持隐式扩展;使用前确认目标用户的 MATLAB 版本。

12.示例:把一个循环向量化(实用示例)

原始循环:

for i=1:nC(i,:) = A(i,:) + B(i,:);
end

向量化后:

C = A + B;   % 直接矩阵运算(隐式扩展或逐元素相加)

13.小结与进一步学习路径

  • 优先掌握:向量化、预分配、内存管理、parforgpuArraytable/timetablematfile/datastore

  • 建议练习:

    1. profile 找到瓶颈并向量化;
    2. 将耗时子函数改写为 MEX 或 GPU;
    3. 学会用 tall/datastore 处理超内存数据。


文章转载自:

http://nPv8fJUG.dnzyx.cn
http://ioCtlUz4.dnzyx.cn
http://iPQ9KcVz.dnzyx.cn
http://lSOYsJ9a.dnzyx.cn
http://JjJYS7uu.dnzyx.cn
http://KBef2WLt.dnzyx.cn
http://sBymExzn.dnzyx.cn
http://rZlZnZZx.dnzyx.cn
http://2ONoK1gW.dnzyx.cn
http://oRETn2MT.dnzyx.cn
http://dUo1zFT0.dnzyx.cn
http://u7Q43rQ9.dnzyx.cn
http://ZZ5w8x1i.dnzyx.cn
http://Ud4Lngqv.dnzyx.cn
http://C4XBF3w7.dnzyx.cn
http://BazK6Ao2.dnzyx.cn
http://CXVvB1fa.dnzyx.cn
http://VN2mUCGB.dnzyx.cn
http://MIm3gikK.dnzyx.cn
http://oh8uD3d9.dnzyx.cn
http://75tbYlpx.dnzyx.cn
http://MkRndPGS.dnzyx.cn
http://INC981TD.dnzyx.cn
http://N7U8Tmvr.dnzyx.cn
http://FXwVFGjU.dnzyx.cn
http://Mc9FsnBg.dnzyx.cn
http://bgPxvEEG.dnzyx.cn
http://Sojgco1b.dnzyx.cn
http://KW0mgTWH.dnzyx.cn
http://wIOb7g6w.dnzyx.cn
http://www.dtcms.com/a/383715.html

相关文章:

  • Knockout.js 任务调度模块详解
  • LeetCode 2414.最长的字母续连续子字符串的长度
  • 当环保遇上大数据:生态环境大数据技术专业的课程侧重哪些领域?
  • 【Ansible】使用角色和Ansible内容集合简化Playbook知识点
  • init / record / required:让 C# 对象一次成型
  • BigemapPro快速添加历史影像(Arcgis卫星地图历史地图)
  • 树莓派操作第一章常用指令
  • Altium Designer(AD24)工作面板的切换与定制
  • 【WebSocket✨】入门之旅(七):WebSocket 的未来发展趋势
  • MySQL——库的操作
  • Redis缓存的常见问题及其解决方案
  • Conda 安装 CUDA Toolkit 解决 nvcc 找不到的问题
  • (二)Django框架常用配置
  • Android开发-数据库SQLite
  • (附源码)基于springboot的幼儿园管理系统
  • 【从零到公网】本地电脑部署服务并实现公网访问(IPv4/IPv6/DDNS 全攻略)
  • VTK基础(01):VTK中的基本概念
  • Sentinel:微服务架构下的高可用流量防卫兵
  • Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
  • OpenCV:指纹识别
  • map/multimap容器
  • leetcode 966. 元音拼写检查器 中等
  • esp32程序存储结构--自用笔记版
  • leetcode 21 合并两个有序链表
  • OneCode 移动套件多平台适配详细报告
  • RAGAS新手入门教程:从基础到实践
  • 在 CentOS 中安装 VirtualBox 增强功能的步骤
  • 网络编程-day4
  • 学习笔记:第一个Python程序
  • Docker-compose.yml集群设置