gpt4 book ai didi

matlab - 如何在 Matlab 函数中设置变量的范围

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:46 24 4
gpt4 key购买 nike

我在 Matlab 函数和命令窗口中运行相同的代码时观察到一个奇怪的行为。它已在 How does scoping in Matlab work? 中描述,但我不明白如何解决我的具体问题。代码如下:

exporteddata.m  %File created by an external program 
%to export data in Matlab format

surface = struct('vertices', [...]) ;
%I can't specify in the external program
%the name of the variable, it's always "surface"

我的实际代码是:

   myfunction.m 

function output = myfunction(input)
load(input);
n = size(surface.vertices);
....

运行时

myfunction('exporteddata.m'); 

我收到以下错误:

<强>???类 hg.surface 没有合适的方法、属性或字段顶点。

当从命令窗口或在 Debug模式下运行相同的指令时,代码运行良好。

如何在函数中指定我需要工作区中存在的可变曲面,而不是 Matlab 函数?

最佳答案

首先,我必须指出surface是 MATLAB 中的内置函数,因此重载它只是……不好。糟糕,糟糕,糟糕!

话虽如此,MATLAB 解释器在解析变量名方面做得非常好,并且通常可以正确地将它们与函数名区分开来。那么你问你的问题在哪里?
我相信您使用了错误的功能:load是一个将数据从 MAT 文件加载到工作区的函数。它不适用于 m 文件。由于未正确执行“exportedata.m”,surface 从未被创建为变量,因此 MATLAB 将其识别为函数名称。如果你想执行“exportedata.m”,只需输入:

exportedata

如果你想运行存储在input中的文件名,你可以使用run :

run(input)

通过在 myfunction 中执行 run(input),应该在 myfunction 的本地创建 surface范围,它应该可以工作。

编辑:
我刚刚测试过,解释器仍然感到困惑。所以变量名解析的问题仍然存在。这是一个解决方法:

function output = myfunction(input)
surface = 0; %// <-- Pay attention to this line
run(input);
n = size(surface.vertices);

预定义 surface 允许解释器在整个函数中将其识别为变量。我已经尝试过了,它有效。

关于matlab - 如何在 Matlab 函数中设置变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com