在 MATLAB 上使用持久变量

Posted

技术标签:

【中文标题】在 MATLAB 上使用持久变量【英文标题】:Using persistent variable on MATLAB 【发布时间】:2020-04-22 16:04:10 【问题描述】:

我一直试图让这个持久变量工作,但我不确定出了什么问题。这个想法是我输入一个值,即“annualbalance(2000)”。 如果价值低于 5000 英镑,则利息为 5%,如果大于或等于 5000 英镑,则利息为 10%。我希望能够手动运行该函数多次,直到我得到一个以上的值,比如说 5100 英镑,因此我没有使用循环。

function annualbalance(x)

persistent annualbalance;
if isempty(annualbalance)
    annualbalance = 0;
elseif annualbalance < 5000
    annualbalance = annualbalance * 1.05
elseif annualbalance >= 5000
     annualbalance = annualbalance * 1.10
end

【问题讨论】:

我很难理解您对持久变量的选择以及您打算如何使用该函数。第一年你打电话给annualbalance(2000),返回2100。你明年做什么?再次拨打annualbalance(2000)?致电annualbalance(2100)?不知道你想要什么。 很抱歉最初不清楚,用新值替换 x 的想法。第一个:年度余额(2000)第二个:年度余额(2100)等 然后接受 Cris Luengo 提供的答案。绝对没有理由插入持久性。 【参考方案1】:

我认为您不想在这里使用持久变量。但是你确实想输出你的结果。我猜你想要这个功能:

function x = annualbalance(x)
if x < 5000
   x = x * 1.05
elseif x >= 5000
   x = x * 1.10
end

你可以像这样重复调用这个函数:

moneys = 1000;   % your start value
moneys = annualbalance(moneys);
moneys = annualbalance(moneys);
moneys = annualbalance(moneys);
moneys = annualbalance(moneys);
moneys = annualbalance(moneys);
moneys = annualbalance(moneys);
moneys           % display the amount you have now after 6 years

如果你想看看你需要等待多少年才能获得一定的金额,你可以使用如下循环:

moneys = 1000;   % your start value
years = 0;       % keeps track of time
while moneys < 5100  % target amount
   moneys = annualbalance(moneys);
   years = years + 1;
end
fprintf('I have %f money after %f years\n', moneys, years);

【讨论】:

谢谢!但是,我已经可以使用循环并手动执行此相同的示例。我只是在努力如何使用持久变量。我故意选择使用持久变量。 @DevinaArts:那你需要说明你想要完成什么,因为如果不是这个答案,我不知道它是什么。【参考方案2】:

也许您可以尝试定义一个输出变量并将该变量(而不是函数)作为持久变量:

function annualbalance(x)

persistent out;
if isempty(out)
    out = 0;
elseif out < 5000
    out = out * 1.05
elseif out >= 5000
     out = out * 1.10
end

然而,这不是一个好的编码方式。变量out 将无法在annualbalance 函数之外访问。也许使用输出变量会更好。此外,您的函数接收 x 作为输入参数,但 x 在函数中没有出现。你也应该检查一下。

【讨论】:

在函数头中将'x'改为'out'

以上是关于在 MATLAB 上使用持久变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MATLAB 方法中清除持久变量

MATLAB - 持久变量

Matlab中持久变量的初始化

MATLAB 中持久变量的性能损失

在 Matlab 中列出/查看/清除持久变量

无法在 Matlab 中更改持久变量的值