Использование Matlab для импорта другого файла .m
Я новичок в Matlab. Я определил функцию внутри файла .m, я хочу использовать эту функцию в этом файле .m в другом файле .m, и я хочу запустить содержимое этого последнего .m файла из окна команд.
Как мне это сделать?
РЕДАКТИРОВАТЬ - для пояснения у меня есть одна функция a
внутри a.m
и script внутри b.m
, которая использует функцию a
внутри a.m
. Я хотел бы запустить этот script внутри b.m
из окна команд, но не знаю, как это сделать. (как примечание, я могу полностью преобразовать script в b.m
в функцию, если это необходимо)
EDIT - сейчас мне просто нужно знать, как импортировать/загружать файл Matlab, и это все!
Ответы
Ответ 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;
который является простым вызовом функции.