Использование постоянной переменной в MATLAB - PullRequest
0 голосов
/ 22 апреля 2020

Я пытался заставить эту постоянную переменную работать, и я не уверен, что не так. Идея состоит в том, что я ввожу значение, то есть «годовой баланс (2000)». Если стоимость составляет менее 5000 фунтов стерлингов, процент будет равен 5%, а если он больше или равен 5000 фунтов стерлингов, то процент составит 10%. Я хочу иметь возможность запускать функцию вручную столько раз, сколько захочу, пока не получу значение выше, скажем, £ 5100, поэтому я и не использовал al oop.

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

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Я не думаю, что вы хотите использовать постоянную переменную здесь. Но вы хотите вывести свой результат. Я думаю, вы хотите эту функцию:

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

Если вы хотите увидеть, сколько лет вам нужно ждать, чтобы получить определенную сумму вы можете использовать al oop следующим образом:

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);
1 голос
/ 22 апреля 2020

Возможно, вы могли бы попытаться определить выходную переменную и объявить переменную (не функцию) как постоянную:

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 нигде в функции не появляется. Вы также должны это проверить.

...