Vscode搭建轻量级Matlab开发环境

2023-11-04

一. 使用Vscode编写m文件的优势与不足

Matlab的启动速度很慢,为追求效率与编写体验,对于一些简单的m文件编写,我们可以选择在Vscode中进行编写和运行。

Vscode插件丰富,配置好Matlab环境后,可以实现以下功能:

  • 代码高亮
  • 代码自动补全
  • 实时语法检查
  • 代码格式化
  • 不启动Matlab GUI界面直接运行代码
  • 使用Matlab命令行的功能

遗憾的是,Vscode暂时还无法调试m文件也不能显示Matlab工作区,但编写不那么复杂的程序已经足够好用了。


二. 如何在Vscode中配置Matlab开发环境

2.1 安装Matlab相关扩展

Vscode中的Matlab扩展很多,比较好用的就下图中的四个。

扩展名 功能
Matlab 代码高亮、代码补全(此功能效果不佳,部分代码无法自动补全)、实时语法检查
Matlab Interactive Terminal 在Vscode的终端中运行m文件与Matlab命令行
Matlab Snippets 代码补全(对插件Matlab代码补全功能的补充)
matlab-formatter 代码格式化

2.2 扩展配置

2.2.1 Matlab扩展配置

共有5个选项可配置,我们需要配置的是其中的Matlabpath与Mlintpath。mlint.exe就是进行语法检查的程序。

对应Setting.json中的代码是:

  "matlab.matlabpath": "E:/Matlab/R2021a/bin/matlab.exe",
  "matlab.mlintpath": "E:/Matlab/R2021a/bin/win64/mlint.exe",

注意:此扩展无法通过环境PATH去发现对应程序,也无法在路径中以“$环境变量名”的方式使用环境变量,所以,Setting.json中需要写出两程序的绝对路径。这使得如果在多个电脑间使用Vscode,而这些电脑Matlab的安装位置或版本不一致时,每次同步设置都会使得此插件的路径设置失效,每次同步设置后都需要再根据具体电脑的Matlab位置去配置一遍这两个路径。

我已经在Github中向该插件的作者提出了这个问题,希望得到解决,但还没有得到回复。所以,现阶段,如果我们要使用多个电脑,最好保证Matlab安装位置与版本一致,这样就不用每次Setting.json同步后再去设置一下这两个路径了。

2.2.2 Matlab Interactive Terminal扩展设置

此扩展主页说明如下:

需要:

  • 64位Python
  • Matlab R2014b及以上版本
  • MATLAB Engine API for Python

注意:对Python的要求基于Matlab的版本,Matlab R2019b需要Python 3.6 或 3.7,关于MATLAB-Python的兼容性参考MathWorks网站。

简单来说,就是根据Matlab版本,安装相兼容的Python,然后在Python中安装一个名为MATLAB Engine API的支持包。

关于MATLAB Engine API的安装参见网站:https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html

打开CMD,

转到matlabroot\extern\engines\python文件夹,其中,matlabroot指的是matlab安装路径,代码为:

cd/d E:\Matlab\R2021a\extern\engines\python

再执行setup.py,代码为:

python setup.py install

过程如下:

注意:

  1. Python需添加到环境变量PATH中,否则python setup.py install将无法执行,因为cmd找不到Python.exe文件。

关于Python安装可参考我的另一篇博文:Python下载与安装教程

2.2.3 Matlab Snippets扩展设置

只需在setting.json中加一行代码:

"editor.snippetSuggestions": "top", // 在其它建议上方显示代码片段建议
2.2.4 matlab-formatter扩展设置

可调整缩进空格数,默认为4,一般不改。

此扩展可识别环境变量PATH,所以,Python加入PATH后,这里的Python Path不需要再指定。

说明一下,此扩展只要求Python 3,不要求特定版本的Python,如Python 3.7。

2.3 扩展设置总结

  1. 装好对应版本Python 3.x,Python路径添加到环境变量,然后安装MATLAB Engine API支持包

  2. 在setting.json中加入以下代码:

      //* matlab相关插件设置  begin +++++++++++++++++++++++++++++++++++++
      "editor.snippetSuggestions": "top", // 在其它建议上方显示代码片段建议
    
      "matlab.matlabpath": "E:/Matlab/R2021a/bin/matlab.exe",
      "matlab.mlintpath": "E:/Matlab/R2021a/bin/win64/mlint.exe",
      //* matlab插件相关 设置  end   -------------------------------------
    

三. 效果展示

从下图可以看到Vscode具备了代码Lint检查,高亮,格式化与运行代码的功能。


四. 其它可能用到的Matlab插件

4.1 Code Runner

Code Runner可以一键运行几十种语言,但默认是不支持Matlab的m语言的,直接运行会提示语言不支持:

需要在Setting.json中加一行设置,如下:

  "code-runner.executorMap": {
    "matlab": "cd $dir && matlab -nosplash -nodesktop -r $fileNameWithoutExt"
  },

并且需要将matlab.exe添加到系统环境变量PATH中,如下图所示,否则Code Runner扩展会找不到matlab。

运行演示:

可见,Code Runner是打开一个单独的Matlab命令行,而Matlab Interactive Terminal是将终端当做命令行,其余方面,两者运行m语言没什么区别。个人更喜欢Matlab Interactive Terminal的方式,它更护眼。

4.2 Matlab Code Run

此扩展下载量也很大,功能也是运行m语言的,但是,在我的台式机和笔记本上都无法运行,会提示如下错误。

不知道怎么解决这个问题,有同学知道可以在评论区告诉我,谢谢,暂时放弃此插件。


五. 总结

用Vscode编写m语言很便捷,不需要启动matlab(启动时间很长),不足的是无法调试,看不到工作区。基本满足简单m程序的开发需求。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vscode搭建轻量级Matlab开发环境 的相关文章

  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • Matlab 的 imresize 函数中用于插值的算法是什么?

    我正在使用 Matlab Octaveimresize 对给定的二维数组重新采样的函数 我想了解如何使用特定的插值算法imresize works 我在Windows上使用八度 e g A 1 2 3 4 是一个二维数组 然后我使用命令 b
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • 如何在MATLAB中显示由三个矩阵表示的图像?

    我有 3 个相同大小的 2D 矩阵 假设 200 行和 300 列 每个矩阵代表三种 基本 颜色 红色 绿色和蓝色 之一的值 矩阵的值可以在 0 到 255 之间 现在我想组合这些矩阵以将它们显示为彩色图像 200 x 300 像素 我怎样
  • matlab中求和函数句柄

    Hi我试图对两个函数句柄求和 但它不起作用 例如 y1 x x x y2 x x x 3 x y3 y1 y2 我收到的错误是 对于 function handle 类型的输入参数 未定义函数或方法 plus 这只是一个小例子 实际上我实际
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB

随机推荐

  • windows命令行下ftp连接超时的可能原因

    1 需要连接的主机没有启用ftp服务 iis没有建立ftp站点 ftp身份验证设置不当 详情参考博文 windows下使用ftp 以及 windows开启ftp服务 两篇博文有重复的部分 我将他们取并集操作了一遍 另外 我还处理了iis未授
  • 使用Visual Studio编译ffmpeg

    一 首先参照下面的链接配置和编译 FFmpeg在VS2017下的编译 vs2017 ffmpeg源码编译 鱼儿 1226的博客 CSDN博客 vs2019编译ffmpeg源码为静态库动态库 完整步骤 亲测可行 ffmpeg vs 令狐掌门的
  • 嵩天老师-Python语言程序设计-Python123配套练习测验题目汇总整理

    测验1 Python基本语法元素 知识点概要 普遍认为Python语言诞生于1991年 Python语言中的缩进在程序中长度统一且强制使用 只要统一即可 不一定是4个空格 尽管这是惯例 IPO模型指 Input Process Output
  • 求最长不含重复字符的子字符串——C++

    声明 本文原题主要来自力扣 记录此博客主要是为自己学习总结 不做任何商业等活动 一 原题描述 剑指 Offer 48 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串 计算该最长子字符串的长度 示例 1 输入
  • Linux查看进程命令

    查看进程 1 ps 命令用于查看当前正在运行的进程 grep 搜索 例如 ps ef grep java 表示查看所有进程里 CMD 是 java 的进程信息 2 ps aux grep java aux 显示所有状态 ps 3 kill
  • Sublime Text4 配置 Python3 环境、代码提示、编译报错教程

    1 配置 Python3 环境 单击 工具 gt 编译系统 gt 新建编译系统 弹出 替换里面的内容为 cmd G CodeTools anaconda3 python exe u file file regex File line 0 9
  • 数据中台数据分析过程梳理

    在当今社会中 随着企业的快速发展 相关业务系统的建设也会越来越多 新的业务模式 新的IT架构 多云环境的出现等等 而一些问题就逐渐暴露了出来 企业之间的IT无法做到互通 新模式生产数据与旧数据无法互通 企业IT架构错综复杂 底层数据互通更加
  • java使用opencv库二值化图片

    应用场景 截取监控视频图片保存到本地后用作后期监控视频角度调整参考 使用二值化后的图片并进行透明度降低进行监控矫正 package img import java awt Color import java awt image Buffer
  • delphi XE5如何把其它程序而不是本软件在通知区域的图标隐藏?不是关闭进程。请举个详细例子,比如Shell_NotifyIcon...

    Delphi XE5可以使用API函数Shell NotifyIcon来实现隐藏其它程序的图标 具体代码例子如下 procedure HideIcon APid Cardinal var noteIconData TNOTIFYICONDA
  • 关于 hostapd

    关于 hostapd 主页 http w1 fi hostapd hostapd是一个IEEE 802 11的AP和IEEE 802 1X WPA WPA2 EAP RADIUS验证器 此页面用于怎么在linux系统下使用它 其他操作系统请
  • 金融贷款行业实时高精准获客 ——三网运营商大数据

    都说生产是第一因素 但对于任何企业来说 客户来源才是第一因素 在大多数行业 获得客户的困难已经成为行业的挑战 如今 许多行业和企业获得客户的主要来源是在线促销和客户获取 现在几乎每个人都有一部手机 运营商可以根据移动客户的访问行为 通信行为
  • 排查java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException:***

    首先排查 vi etc sysconfig network 没有就加上 HOSTNAME 你的主机名 XXXX 如果有 接着排查 vi etc hosts 没有就加上 127 0 0 1 localhost localdomain loca
  • 2021年全球与中国高速分散机行业市场规模及发展前景分析

    2021年全球与中国高速分散机行业市场规模及发展前景分析 本报告研究全球与中国市场高速分散机的发展现状及未来发展趋势 分别从生产和消费的角度分析高速分散机的主要生产地区 主要消费地区以及主要的生产商 重点分析全球与中国市场的主要厂商产品特点
  • 论文阅读:DeepFake-Adapter: Dual-Level Adapter for DeepFake Detection(Deepfake模型快速调参)

    一 论文信息 论文名称 DeepFake Adapter Dual Level Adapter for DeepFake Detection 作者团队 项目主页 https github com rshaojimmy DeepFake Ad
  • python爬取 百姓网部分数据 + 存入MongoDB数据库详细案例

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 实施步骤 二 目标网站 先分析目标网站 三 获取数据 1 引入库 2 请求数据 2 1 获取第一层链接 3 抓取数据 3 1 分析页面 3 2 抓取数据 四
  • 图像可变游程之混乱代码

    图像可变游程之混乱代码 图像可变游程之混乱编码 可变游程编码 VLC 混乱编码 参考代码 图像可变游程之混乱编码 这里 对我的自画像代码作一个简要解释 自画像代码实际上是一个解码器 包括两个部分 图像的可变游程编码 varied lengt
  • ValueError: check_hostname requires server_hostnameWARNING: You are using pip version 21.1.3

    ValueError check hostname requires server hostname WARNING You are using pip version 21 1 3 however version 22 2 2 is av
  • LCD1602芯片的使用——简单易懂

    题目 想在LCD1602上显示两行如下字样 huaianxinxi wantin 想完成上面的显示必须掌握LCD1602芯片的基本知识 将在程序下面附上LCD1602芯片的基本知识 供大家参考 我实现的比较简单 没有什么花哨的显示 大家首先
  • js 聚合函数

    在JavaScript中 聚合函数是一种用于处理数据集合的函数 它们接收一个数据集合作为输入 并返回一个单一的值作为输出 聚合函数通常用于对数据进行统计 计算总和 平均值 最大值 最小值等操作 下面是一些常见的聚合函数的概念 sum 求和
  • Vscode搭建轻量级Matlab开发环境

    一 使用Vscode编写m文件的优势与不足 Matlab的启动速度很慢 为追求效率与编写体验 对于一些简单的m文件编写 我们可以选择在Vscode中进行编写和运行 Vscode插件丰富 配置好Matlab环境后 可以实现以下功能 代码高亮