gpt4 book ai didi

MATLAB:关于输出参数的脚本与函数

转载 作者:行者123 更新时间:2023-12-02 04:43:37 25 4
gpt4 key购买 nike

我有一个脚本可能会由于运行时间长而中止并稍后继续。让我们假设它看起来有点像这样:

data = []; % can't preallocate as I don't know the number of entries yet here...
while(1)
% ...
data = [data; someNewEntry];
end

它的好处是,当作为脚本运行时,每当我中止它时,我在工作区中都有变量 data

但我想将它转换成一个函数,因为该脚本有大量的变量,并且用它弄乱了我的工作区。假设我现在像这样转换它:

function data = myFnc()
data = []; % can't preallocate as I don't know the number of entries yet here...
while(1)
% ...
data = [data; someNewEntry];
end

现在的问题是:当我中止该函数时,我将丢失 data 中的所有条目,这些条目目前已创建。如何解决这个问题并在中止函数时返回当前向量 data?我想出的唯一可能的解决方案是在 for 循环中使用类似这样的方法:

if(nargout == 1)
assignin('caller','data', data);
end

但不知何故,我不太喜欢这种方法。但是好吧,我觉得还好。但有一件事仍然让我烦恼:当我使用它时,我总是将数据分配给 workspace-var data 因为我不知道如何获取调用者的输出变量的名称(即bla = myFnc() -> 它将是 bla,因此 assignin('caller','bla', data);)。我知道有 matlab 函数 inputnames() 但我找不到输出变量的等效函数。非常感谢!

最佳答案

我可以想到 2 个推荐的解决方案:

<强>1。在不丢失工作区的情况下中断函数

正如我所描述的here ,如果您始终打开,这应该不是问题

`dbstop if error`

<强>2。经常保存你的变量

使用您的 assignin 解决方案,您已经很接近了,因为它将变量“保存”到基础工作区。然而,这仍然不是一个非常安全的存储变量的空间。因此,我建议用以下方法保存它们:

save data data

如果第二个选项对性能的影响太大,您可以每 1000 次迭代左右执行一次。

关于MATLAB:关于输出参数的脚本与函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20281822/

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