matlab 运行m文件 Undefined function or variable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 运行m文件 Undefined function or variable相关的知识,希望对你有一定的参考价值。

为什么直接在M文件编辑页面上点击绿三角运行时会显示Undefined function or variable 'xxx'
xxx为m文件的文件名
可是把m文件的代码粘到命令里边就可以?

matlab 运行m文件出现Undefined function or variable原因是没有定义好变量。

参考解决方法:选择Set Path,然后把用户的文件所在的文件夹的路径添加进去应该就可以了。

扩展资料:

acot( )  反余切(返回弧度)

Asind( ) 反正弦(返回度数)

acotd( ) 反余切(返回度数)

cos( )  余弦(变量为弧度)

plot: x轴和y轴均为线性刻度(Linear scale)

loglog: x轴和y轴均为对数刻度(Logarithmic scale)

semilogx: x轴为对数刻度,y轴为线性刻度

semilogy: x轴为线性刻度,y轴为对数刻度

atand( ) 反正切(返回度数)

参考资料来源:百度百科-MATLAB

参考技术A   matlab 运行m文件出现Undefined function or variable原因是没有定义好变量。

  MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
  MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
  MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
  
参考技术B 如果代码粘到命令里能运行,那么说明你的代码是正确的,出现你说的那种错误,以我的经验来看,我感觉应该是你没设定工作路径导致的,工作路径没设好,MATLAB就无法找到你所定义的m文件,就会出现你讲的错误。
解决方法:选择Set Path,然后把你的文件所在的文件夹的路径添加进去应该就可以了。本回答被提问者采纳
参考技术C 没有定义好变量

从 MATLAB 编译的函数运行 .m 文件

【中文标题】从 MATLAB 编译的函数运行 .m 文件【英文标题】:Running an .m file from a MATLAB-compiled function 【发布时间】:2011-09-13 23:12:31 【问题描述】:

背景

假设我在 MATLAB 中编译了以下简单函数

function foo(path_to_m_file)
  disp([' Running ' path_to_m_file])
  run(path_to_m_file);
end

函数foo 只是获取 .m 文件的路径并尝试运行它。

但是,当我在编译后实际尝试运行foo 时:

./run_foo.sh $path_to_run_time $path_to_m_file

其中path_to_m_file 是一个简单的.m 文件,其中包含如下语句:

a = 2;

我收到以下错误:

Error using ==> run
MATLAB:run:FileNotFound

但是,我知道foo 获得了正确 路径。例如,如果我尝试将run 的行替换为foo 中的以下两行

fID = fopen(conf_file, 'rt');
first_line = textscan(fID, '%s', Inf, 'Delimiter', '\n');

foo 读取.m 文件的对应行。所以.m 文件就在那里,MATLAB 引擎可以“看到”它。事实上,我什至可以在使用textscan 读取的字符串上运行eval

所以我的问题是:

    为什么会出现上述错误?为什么foo 不运行.m 文件?

    更新:请参阅下面@strictlyrude27 的回答,了解似乎是对这个问题的回答。

    如果上述方法不起作用。有没有办法让 MATLAB 编译的函数运行 .m 文件,该文件可能在编译原始函数之后发生了变化?

我第二个问题的动机:

我希望能够“更新”作为项目一部分的.m 文件,而无需重新编译整个项目。对此的任何想法将不胜感激。

【问题讨论】:

【参考方案1】:

来自 MATLAB 编译器的documentaton:

编译后的应用程序不会在运行时处理 MATLAB 文件

MATLAB 编译器的设计目的是让您可以部署锁定功能。可部署的 MATLAB 文件在 MATLAB Compiler 加密它们时被暂停或冻结 - 从那时起它们不会改变。这并不意味着您不能部署灵活的应用程序——这意味着您必须在设计应用程序时考虑到灵活性。例如,如果您希望最终用户能够在两种不同的方法之间进行选择,则它们都必须被编译。

MCR 仅适用于在构建组件时加密的 MATLAB 代码。任何动态生成新的 MATLAB 代码的函数或进程都不会对 MCR 起作用。

某些 MATLAB 工具箱(例如 Neural Network Toolbox™ 产品)会动态生成 MATLAB 代码。由于 MCR 只执行加密的 MATLAB 文件,而 Neural Network Toolbox 生成未加密的 MATLAB 文件,因此 Neural Network Toolbox 中的某些功能无法部署。

同样,无法部署需要检查 MATLAB 函数文件内容的函数。例如,HELP 是动态的,在部署模式下不可用。如果您提供 MATLAB 函数原型,您可以在部署模式下使用 LOADLIBRARY

不要编译生成 MATLAB 代码的函数并尝试部署它,而是执行以下任务:

    在 MATLAB 中运行一次代码以获得您生成的函数。

    使用 MATLAB Compiler 编译 MATLAB 代码,包括生成的函数。

提示:使用EVALFEVAL 的另一种替代方法是使用匿名函数句柄。 如果您需要为动态运行时处理创建 MATLAB 代码的能力,您的最终用户必须安装 MATLAB。

【讨论】:

谢谢@strictlyrude27。抱歉,我应该说我已经看到了,但我很惊讶我能够在我用textscan 阅读的行上运行eval,所以我仍然不确定为什么run 不起作用,但eval 可以。我会在 OP 上更新这个。有了这个,我仍然想知道我的第二个问题是否有答案。 Run() 使用调用文件系统上定义的函数的正常机制。如果编译后的 Matlab 代码可以从磁盘运行正常的.m 文件,那么您可以编译一个小 GUI,以重现完整的 Matlab IDE 功能并绕过 Matlab 的许可机制。 Eval 受到更多限制,因为它只计算表达式而不定义函数(而且速度很慢);一方面,仅仅构建整个语言是不够的;另一方面,它被广泛使用,以至于他们真的无法禁用它并且编译的程序仍然可以工作。【参考方案2】:

您可以逐行读取 m 文件并使用 eval() 函数执行每一行。 m 文件的格式存在限制(例如,没有换行符,每行必须包含完整的 MATLAB 语句),但它确实有效,并且可以添加到已编译应用程序内的运行时环境中。我使用这种技术允许用户为我开发的已编译应用程序定义配置和数据文件。

显然,如果您的最终用户提供了一个格式不正确的 m 文件来评估,您最终将遇到难以解决的错误。

【讨论】:

以上是关于matlab 运行m文件 Undefined function or variable的主要内容,如果未能解决你的问题,请参考以下文章

matlab分三段运行时报错Undefined function or method 'Hermite' for input arguments of type '

Matlab:从命令行运行 m 文件

MATLAB中 怎样让两个M文件相关联着一起运行?

matlab,简述脚本M文件和函数M文件的区别?

从 MATLAB 编译的函数运行 .m 文件

如何在后台重复运行 Matlab .m 文件?