Ошибка MATLAB: входной аргумент не определен - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть небольшая функция MATLAB, которую я пытаюсь запустить, вызвав ее из командной строки следующим образом:

>> [x, y , true_HF, max_F]=main (10)

Однако при запуске я получаю сообщение об ошибке:

??? Input argument "HF" is undefined.

Поиск в Интернете дал кучу результатов для людей, забывших аргумент, что я не думаю, что делаю (я новичок в этом деле).

Для справки, моя "основная" функция:

function [ x, y, true_HF, max_F ] = main(HF)
    global Data
    Data = [];
    close all
    true_HF = fzero ( diff_L, HF );
    [x,y] = find_xy ( true_HF );
    final_graphs()
    max_F = max_force ( y, true_HF );
end

Кроме того, "whos" перед ошибочной строкой (то есть "true_HF = fzero (diff_L, HF);"), показывает, что переменная HF установлена.

Какие-нибудь гении из MATLAB, которые знают, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Вот три идеи, которые нужно попробовать:

Во-первых, я иногда сталкиваюсь с проблемой, когда функция, вызываемая из командной строки, является предыдущей версией.Убедитесь, что вы сохранили файл.Например, если вы изначально написали файл с первой строкой

function [ x, y, true_HF, max_F ] = main(other_variable, HF)

Вам нужно было бы сохранить, чтобы вызвать main (10), в противном случае вы получите неопределенное HF-сообщение

Вторая возможность: если вы повторно сохранили ее, то убедитесь, что редактируемая копия находится в текущем каталоге командного окна.Несколько функций с одинаковым именем, разделенных на разные папки, могут привести к неожиданному поведению.Просто имейте это в виду, если вы работаете, например, с ~ / new_function / main.m, а также с ~ / old_function / main.m.

Наконец, вы можете проверить, является ли вызов fzeroдопустимо, если внести следующие изменения только в целях тестирования:

function [ x, y, true_HF, max_F ] = main(HF)
%% <- "%%" starts a new cell in the program
    HF = 10 % type this in for testing purposes
    % commented out because we are going to evaluate the code inside the current workspace    
    % global Data 
    % Data = [];
    close all
    true_HF = fzero ( diff_L, HF ); % diff_L will have to be in the current workspace variables
    [x,y] = find_xy ( true_HF );
    final_graphs()
    max_F = max_force ( y, true_HF );
%% <- end the cell
end

Теперь, когда курсор находится между двумя знаками «%%», нажмите ctrl-return.Это позволит оценить код в ячейке (код между двумя "%%").

Сообщите нам о вашем прогрессе.

- Эндрю

0 голосов
/ 22 февраля 2011

Возможно, есть другие функции с тем же именем, которые выше в вашем пути :

>> which main -all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...