#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. Спасибо, но у вас есть какие-либо идеи о том, почему это так работает !??