В MATLAB, могу ли я иметь скрипт и определение функции в том же файле?

Предположим, что у меня есть функция f() и я хочу использовать ее в my_file.m , который является скриптом.

  1. Возможно ли, чтобы функция определена в my_file.m ?
  2. Если нет, предположим, что я определил его в fm . Как мне это назвать в my_file.m ?

Я прочитал онлайн-документацию, но было неясно, как это лучший способ.

7 Solutions collect form web for “В MATLAB, могу ли я иметь скрипт и определение функции в том же файле?”

Начиная с версии R2016b, вы можете иметь локальные функции в скриптах , например:

 data = 1:10; % A vector of data squaredData = f(data); % Invoke the local function function y = f(x) y = x.^2; end 

До выпуска R2016b единственным типом функции, которая могла быть определена внутри сценария MATLAB, была анонимная функция . Например:

 data = 1:10; % A vector of data f = @(x) x.^2; % An anonymous function squaredData = f(data); % Invoke the anonymous function 

Обратите внимание, что анонимные функции лучше подходят для простых операций, так как они должны быть определены в одном выражении. Для более сложных функций вам придется определять их в своих файлах, размещать их где-то на пути MATLAB, чтобы сделать их доступными для вашего скрипта, а затем вызвать их из вашего скрипта, как и любую другую функцию.

Способ, которым я обойду это ограничение, состоит в том, чтобы превратить мои скрипты в функции, которые не принимают аргументов (если мне нужны переменные из глобального пространства имен, я либо явно передаю их в функции, либо использую «evalin», чтобы захватить их.)

Затем вы можете определить все дополнительные функции, которые вам нужны в «скрипте». Это взломать, но я обнаружил, что он достаточно мощный в тех случаях, когда мне нужны несколько нетривиальных функций.

EDIT: Вот упрощенный пример. Все это может находиться в одном файле.

 function [] = myScriptAsAFunction() img = randn(200); img = smooth(img); figure(1); imagesc(img); axis image; colorbar; end function simg = smooth(img) simg = img / 5; end 

Вы можете сделать что-то вроде этого (если ваш файл называется my_file.m ):

 function my_file %script here end function out = f(in) %function here end 

Если вы нажмете кнопку запуска, функция my_file будет выполнена по умолчанию.

1) Вы не можете вставить функцию внутри скрипта.

2) Убедитесь, что fm находится на вашем пути или в текущем каталоге, и вы можете называть его, как любую другую функцию.

Начиная с R2016b , вы можете определить локальные функции внутри скрипта.

 x = 1; y = add1(x); function z = add1(x) z = x + 1; end 

Я реализовал решение Джона , и я нашел его полезным. Но есть несколько предостережений (в Octave, Matlab, возможно, ведет себя аналогично):

  1. Если код внутри вашей основной функции содержит clear all до использования вспомогательной функции, это не сработает. В файле test3.m комментирование / раскомментирование clear all файлов делает работу / не работает.

     function [] = test3() %clear all a = myfunc( 1 ); a endfunction; %--------------------------------- % Auxiliary functions function retval = myfunc( a ) retval = 2 * a; endfunction; 

    From Похоже, что при запуске скрипта выполняется первый проход, где выполняются внешние функции кода (в этом случае такой код отсутствует), а функции, определенные (в данном случае test3 и myfunc ), добавляются в рабочую область. Второй проход будет выполнять основную функцию, которая не найдет myfunc если clear all будет открыто.

  2. Как указано chessofnerd, из коробки переменные в вашей основной функции не идут в рабочую область.

Вы можете иметь много функций в файле образца. Но только первый может действовать как основная функция, когда вы запускаете файл. Другие могут использоваться только в этом файле. Для некоторой ситуации вы хотите определить большую функцию. Вы можете разделить его на более мелкие функции и определить ниже.

Однако самый простой способ найти ответ – попробовать ~

  • Разница между виртуальной функцией и чистой виртуальной функцией
  • Использование нескольких .cpp-файлов в c ++-программе?
  • Разрешение перегрузки C ++
  • Как сделать случайный цвет фона с помощью Swift
  • Передача строки с пробелами в качестве аргумента функции в bash
  • Вложенная функция в C
  • Разница между и * звездочкой
  • Как создать пользовательскую функцию EL для вызова статического метода?
  • Есть ли способ использовать два оператора «...» в функции из R?
  • C sizeof пройденного массива
  • Как программно создать функцию R?
  • Давайте будем гением компьютера.