在MATLAB上使用持久性变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MATLAB上使用持久性变量相关的知识,希望对你有一定的参考价值。

我一直在尝试让这个持久变量工作,我不知道哪里出了问题。我的想法是,我输入一个值,即'annualbalance(2000)',如果该值小于5000英镑,利息将为5%,如果大于或等于5000英镑,则利息将为5%。如果该值小于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
答案

我认为你不想在这里使用一个持久性变量。但你确实想输出你的结果。我猜想你是想用这个函数。

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
', moneys, years);
另一答案

也许你可以尝试定义一个输出变量 并把这个变量(而不是函数)定义为持久化变量。

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 在函数中没有出现。你也应该检查一下。

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

MATLAB 中持久变量的性能损失

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

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

MATLAB - 持久变量

Matlab中持久变量的初始化

matlab persistent啥意思