Подтвердить что ты не робот

Использование Matlab для импорта другого файла .m

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

Как мне это сделать?

РЕДАКТИРОВАТЬ - для пояснения у меня есть одна функция a внутри a.m и script внутри b.m, которая использует функцию a внутри a.m. Я хотел бы запустить этот script внутри b.m из окна команд, но не знаю, как это сделать. (как примечание, я могу полностью преобразовать script в b.m в функцию, если это необходимо)

EDIT - сейчас мне просто нужно знать, как импортировать/загружать файл Matlab, и это все!

4b9b3361

Ответ 1

В принципе, MATLAB защищает использование одной функции в файле .m. Вы можете вызвать такую ​​функцию из другого файла .m и из командной строки MATLAB.

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

Ответ 2

Если я правильно понимаю вашу ситуацию, у вас есть что-то вроде этого:

Файл (`A.m '):

function results = A(parameters)
   % some code

Файл (`B.m '):

function results = B(parameters)
   % some code

Вы хотите использовать функцию A внутри B, вы можете просто вызвать эту функцию из внутренней функции B:

function results = B(parameters)
   % some code
   otherResults = A(otherParameters)

Если ваша ситуация что-то вроде описания nimrodm, ваш файл A.m выглядит примерно так:

 function results = A(paramters)
    % some code
    function results = C(parameters)
        % code of function C
    end
 end
    function results = D(parameters)
        % code of function D
    end

Нет прямого доступа к C и D извне A. Если вам нужно использовать subfunction D вне A, просто создайте файл D.m, содержащий

function results = D(parameters)
    % code of function D
end

И желательно удалить тот же код из функции A.

Для вложенной функции C, то же самое можно сделать в некоторых (но не во всех) случаях, так как вложенные функции также имеют доступ к переменным функции A. В последних версиях MATLAB (я думаю, R2010b или R2011a) редактор выделяет переменные, которые совместно используются функцией и вложенными функциями в teal. Если вы не используете переменные функции A внутри функции C, просто выполните то же самое, что и для функции D. Если вы это сделаете, передайте эти переменные в качестве параметров и/или возвращайте значения и отредактируйте остальную часть кода, чтобы отразить это. Проверьте свой код и затем выполните то же самое, что и для D.

Скорее всего, у вас не будет случая C, поскольку это расширенная функция в MATLAB.

Однако есть другой случай, если вы не используете функции MATLAB, а скрипты MATLAB в разных файлах. Вы можете вызвать script (как из командной строки, так и из другой функции или script, просто по имени (файл).

содержимое файла E.m:

% code for script E

содержимое файла F.m:

% some code
E;

Используя этот код, вы выполняете все команды в E изнутри script F. Помните, что E и F будут делиться всеми своими переменными, поэтому, если вы начнете свои скрипты с помощью clear all; close all; clc;, вы не сможете передавать любые переменные из F в E (и вы потеряете все результаты от F, вычисленный до вызова E.

В большинстве случаев лучше использовать функции вместо скриптов, так что и способ решения такой ситуации: сделать все в функции с достойными параметрами и вернуть значения.

изменить: После того, как вы изменили свой вопрос, это довольно легко.

Давайте рассмотрим, что у вас есть функция, я буду использовать разные имена, поскольку это более интуитивно понятно. У вас есть функция ackermann внутри файла ackermann.m, которую вы хотите вызвать из script bigScript.m.

Файл ackermann.m содержит функцию

Во всяком случае, я чувствую, что вы являетесь стартовым пользователем MATLAB: если вы не знаете, что делает функция, просто введите help functionname (подменяя имя функции, конечно) в окно команд. Вы заметите, что функция load предназначена для загрузки файлов данных, а не для m файлов (поскольку m файлы в вашем пути используются автоматически).

Ответ 3

Для других, кто ищет этот вопрос, как и я, просто введите:

addpath('[Path name of mat file]');

Это скажет Matlab, как найти функцию. Чтобы проверить, просто введите:

which [function name]

В случае успеха он должен указать имя пути, которое вы только что добавили.

Ответ 4

Самым близким, что я мог найти, чтобы включить или импортировать код внутри другого файла .m было определение функции в первой строке файла, чтобы файл мог быть доступен как "фиктивная функция" там, где она мне нужна. Чтобы было понятнее, предположим, что мне нужно импортировать файл с именем FILE.m, я добавляю строки

function FILE
end

в начало файла. Затем я вызываю файл так:

FILE;

который является простым вызовом функции.