You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Notebook的MATLAB内核中直接编写函数?

在Jupyter Notebook的MATLAB内核中直接定义函数的解决办法

我之前也踩过这个坑,太懂这种不想来回切换外部.m文件的烦躁了!在Jupyter的MATLAB内核里,每个代码单元格默认是当作脚本来执行的,而MATLAB的脚本里直接写函数定义会触发Error: Function definitions are not permitted in this context的报错——这就是问题的根源。不过有几个不用依赖外部文件的实用办法,亲测有效:

  • 把函数定义放在单元格末尾(局部函数方式)
    MATLAB允许在脚本的最后添加局部函数,只要所有可执行的代码都放在函数定义之前就行。举个例子:

    % 先写调用逻辑
    result = myAdd(2, 3);
    disp(result);
    
    % 函数定义必须放在单元格的最后位置
    function out = myAdd(a, b)
        out = a + b;
    end
    

    执行这个单元格后,函数会被加载到工作区,后续单元格也能直接调用它。

  • 用匿名函数处理简单逻辑
    如果你的函数逻辑很简短(一行就能写完),匿名函数是最省心的选择,直接在单元格里定义+调用:

    myMultiply = @(x, y) x * y;
    disp(myMultiply(4, 5));
    

    这种方式不需要写完整的function...end结构,适合简单运算或者轻量逻辑的函数。

  • 用matlab.lang.makeFunctionHandle创建复杂函数句柄
    要是函数逻辑有多行,可以把函数代码拼接成字符串,再用这个工具转换成函数句柄,完全不用外部文件:

    funcStr = ['function out = myComplexFunc(a, b)', ...
               '    if a > b', ...
               '        out = a^2 - b;', ...
               '    else', ...
               '        out = b^2 + a;', ...
               '    end', ...
               'end'];
    myComplexFunc = matlab.lang.makeFunctionHandle(funcStr);
    disp(myComplexFunc(3, 5));
    

    注意拼接字符串时要保持MATLAB的语法格式,比如换行的地方用...连接。

  • 单独用单元格定义函数(高版本MATLAB支持)
    如果你用的是MATLAB R2021a及以上版本的内核,可以直接创建一个只包含函数定义的单元格:

    function out = mySubtract(a, b)
        out = a - b;
    end
    

    执行这个单元格后,函数就会被加载到工作区,之后的任意单元格都能直接调用它,就像调用外部函数一样方便。

我个人日常用得最多的是前两种方法:简单逻辑用匿名函数,复杂一点的就把函数塞到单元格末尾当局部函数,完全不用碰外部.m文件。你可以根据自己的函数复杂度选合适的方式试试!

内容的提问来源于stack exchange,提问作者splinter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:06:37