【问题标题】:MATLAB tutorial for programmers [closed]面向程序员的 MATLAB 教程 [关闭]
【发布时间】:2011-02-11 02:30:10
【问题描述】:

我很快就会招收一些新学生,他们将编写 MATLAB 代码。他们是 MATLAB 新手,但有 Java 和 C++ 编码经验。

我将让他们浏览 MATLAB 帮助的 Getting Started 部分。另外,我想给出一个小教程,目的是防止他们犯一些人们在切换到 MATLAB 时最常见的错误(例如“MATLAB 从 1 开始计数”),并向他们展示一些他们可能不会的特性当来自其他语言时要注意(例如“你可以直接从数组中减去一个标量,对于向量,有 bsxfun”)。

我应该告诉他们哪些最重要的事情?

【问题讨论】:

  • 不仅仅是 Matlab 从 1 开始计数——几乎每个人都这样做。只有感染了 C 的程序员才从 0 开始数数。如果您怀疑我,请查看您左手的手指并开始数数。 :-)
  • 更严重的是,他们将编写 Matlab 代码是为了什么?现在它是一个相当大的产品,信号处理领域感兴趣的特征可能与数值乐观主义者感兴趣的特征不同。
  • @High Performance Mark:他们将进行图像分析(以及一些优化)。幸运的是,他们不需要加载图像数据,因为我有一个为他们做这件事的类。

标签: matlab bsxfun


【解决方案1】:

足够简洁的 cmets,这也是一个答案:

  1. Matlab 桌面:所有窗口的用途、将代码从历史记录拖回命令窗口、变量检查器等。
  2. 绘图:不仅仅是绘图命令,还有如何使用绘图 GUI 工具,以及如何从图形创建 M 文件。
  3. 脚本和函数的 M 文件,以及它们之间的主要区别。
  4. M-Lint,分析器。
  5. 将 Matlab 用作教授浮点运算的危险和陷阱的工具。
  6. 获得帮助:通过命令行、Web、文档、文件交换……
  7. 设置路径和当前工作目录。
  8. 从文件导入数据、将数据导出到文件、加载和保存。

这应该足以让他们忙碌一个小时左右。

为了澄清,我提出这些主题是为了帮助您教您的学生避免常见的 Matlab 错误,包括:

  1. 该工具的非生产性使用,重新键入可以轻松从历史记录中调用的命令,使用 C(或 Java)样式的文件读取命令而不是 uuimport,当 Matlab 可以为您绘制图形时,慢慢键入脚本来绘制图形,想知道什么编辑器右边距中的所有橙色小线的意思和弯曲的下划线,当帮助工具可以告诉他们时,试图自己解决问题,还有很多其他的东西,Matlab 用户需要很长时间才能学习。李>
  2. 浮点运算不是实数。
  3. 可能还有很多其他的东西。

【讨论】:

  • “浮点运算不是真实的”是什么意思?
  • @Jonas:我的意思是浮点算术并不能完全实现对实数的算术。对 SO 的定期监控表明,有很多程序员,包括经验丰富的程序员,需要一段时间才能“搞定”这个。
  • @Jonas:comp.soft-sys.matlab,我敢说,对于 Matlab 特定的问题和答案,甚至比 SO 还要好。
  • @High Performance Mark:啊,我明白你的意思了。是的,如果突然0 不等于0,这可能是相关的。我个人更喜欢 SO 而不是 comp.soft-sys.matlab,因为 SNR 更高,而且你知道,我的学生最终可能会在工作面试中收到关于他们 SO 代表的问题 :)
【解决方案2】:

关于可能导致混淆的意外或非直观的 MATLAB 功能,这个问题有一些很好的指针:

关于很酷的省时/效率技巧,这个其他问题有一些很好的例子:

对于一些可能更高级的主题,您可以参考这个问题的答案:

现在只需 0.02 美元。根据我在 SO 上看到的最常见的问题类型,我想说您需要确保他们对以下概念有很好的理解:

以下是一些已经在 MATLAB 中实现的简洁功能,可以节省他们一些时间和精力:

【讨论】:

    【解决方案3】:

    我同意之前的答案,但我想说索引是研究 MATLAB 的第一个也是最重要和最复杂的概念。我看到很多 C 程序员从 MATLAB 开始只是写循环,很多循环,像

    这样可笑的东西
    for i=1:10
        a(i)=i;
    end
    

    而不是简单的a=1:10;

    所以我建议他们阅读矩阵编程概念:

    • 如何创建简单的向量和矩阵
    • 哪些变量可用于索引
    • 如何创建和应用索引
    • 逻辑运算和函数、逻辑和数字索引(查找函数)
    • 索引表达式的右侧和左侧
    • 索引数值矩阵和元胞数组的区别
    • 如何使用索引作为不同函数的输出,例如排序、唯一、ismember 等。
    • 您不能将索引应用于中间结果

    至于生产力,我要补充一点,知道如何使用编辑器的单元格模式非常有用。

    【讨论】:

      【解决方案4】:

      从概念上讲,MATLAB 在某些方面与您提到的其他语言非常不同:

      • 在 Java 使用向上转换时使用了单元格
      • globalpersistent 变量在 Java 中是 static
      • gui 句柄只是double 类型的数字
      • 嵌套函数是closures,Java和C/C++都没有这个特性
      • 很少使用 private 和 @TYPE 文件夹来确定可见性范围
      • 数组处理技巧
      • 使用 MATLAB 语法与 Java/COM/.Net 轻松实现互操作
      • variadic function arguments,用varargin/varargout处理函数参数
      • memorymanagement

      【讨论】:

      • 我不会告诉他们全局变量和持久变量,希望我永远不会看到他们使用它们:)。不过有很多优点!
      • 全局变量,不——然而,持久变量非常有用。与静态数据一样,它们提供了本地化良好的持久数据存储,否则可能必须公开或使用全局数据。
      【解决方案5】:

      对于那些来自 C 系列语言的人来说,元素操作符是新的。我花了几个月的时间才发现./.* 运算符。在此之前,我曾经为元素操作编写 for 循环。所以也许这是应该指出的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 2011-08-09
        • 2012-03-04
        • 2011-05-01
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多