Неопределенный аргумент при объявлении функции в Octave

#function #octave

#функция #октава

Вопрос:

Я получаю неопределенную переменную / аргумент при попытке определить свою собственную функцию генератора случайных чисел.

Код:

 function result = myrand(n, t, p, d)
    a = 200 * t   p
    big_rand = a * n
    result = big_rand / 10**d
    return;
endfunction

mrand = myrand(5379, 0, 91, 4)
  

ошибка:

 >> myrand
error: 't' undefined near line 2 column 15
error: called from
myrand at line 2 column 7
  

Комментарии:

1. Ваш код работает для меня в Octave. Вы выполняете его в командной строке? если это часть скрипта (например, foo.m), убедитесь, что первая строка не начинается с объявления функции. Обычный способ — добавить 1; в начале

2. Помимо ошибки, это не совсем random , даже pseudo-random , поскольку ваше «случайное» число просто (200*t*n p*n)/(10*d) , которое представляет собой простую однозначную функцию из четырех переменных.

3. Вы сохранили это как myrand.m и затем вызвали mrand = myrand(5379, 0, 91, 4) , или вы выполнили как объявление функции, так и вызов функции в командной строке? (В этом случае MATLAB выдаст вам сообщение об ошибке «объявления функций не разрешены в этой среде», не уверен в Octave)

4. @Adriaan да, octave допускает встроенные определения функций, matlab — нет. (хотя, по-видимому, это звучит так, как будто 2016b будет)

Ответ №1:

Вы не можете запустить скрипт с ключевым словом function . https://www.gnu.org/software/octave/doc/v4.0.1/Script-Files.html

Это работает:

 disp("Running...")
function result = myrand(n, t, p, d)
     a = 200 * t   p
     big_rand = a * n
     result = big_rand / 10**d
     return;
endfunction

mrand = myrand(5379, 0, 91, 4) 
  

Вы должны получить:

 warning: function 'myrand' defined within script file 'myrand.m'   
Running ...  
a =  91  
big_rand =  489489  
result =  48.949  
mrand =  48.949  
  

Комментарии:

1. Спасибо, но у вас есть какие-либо идеи о том, почему это так работает !??