2017-02-12 4 views
-1

Я новичок в MatLab и испытываю трудности с использованием результатов моих функций.MatLab - доступ к переменным после выполнения функции с ними

Моя программа загружает файл .mat как объект, а затем для каждой переменной в .mat выполняется анализ. Фактический анализ выполняется функцией, вызываемой в цикле for. Результаты анализа сохраняются функцией в массиве - или они должны быть! В следующем порядке:

function main() 
    object = matfile('data.mat') 
    vars = (fieldnames(object)) 
    resultarray = zeros(length(vars)) 
    for index = 1:length(vars) 
     var = vars(index) 
     x = object.var 
     resultarray = analysis(x, index) 
    end 
end 

function resultarray = analysis(x, index) 
    %does stuff to x 
    resultarray(index) = x 
    disp(resultarray(index)) 
end 

Проблема в том, что ни одна из моих переменных не видна! Рабочая область пуста. Функция disp() печатает назначенное значение, поэтому я знаю, что функция работает, но как мне получить доступ к resultarray после завершения программы? Я попытался объявить его глобальным в начале main(), который, похоже, ничего не делает. Мой массив должен быть возвращен в main() - как мне его сохранить, чтобы я мог фактически использовать вывод моей функции после завершения программы?

Заранее за вашу помощь.

Редактировать - Я знаю, что область main() различна, но если я избавлюсь от нее, мне сказали, что «определения функций в этом контексте не разрешены». Похоже, по какой-то причине у меня не может быть скрипта и некоторых функций, которые сценарий использует в одном файле.

+0

Worskpace имеет различные сферы чем функция 'main'. Вот почему вы не видите никаких переменных. Удалите 'function main()'. – codeaviator

+0

Если я это сделаю, программа не будет выполнена, поскольку, видимо, у вас не может быть скрипта, за которым следует определение функций в файле matlab. Поэтому я предполагаю, что я действительно спрашиваю, как получить переменные из рабочей области функции в постоянную форму. – Nate

+0

Вы передаете их обратно как возвращаемые значения из функции. – beaker

ответ

0

Если вы хотите сохранить main как функцию с этим синтаксисом, то вы должны изменить код следующим образом (возврат resultarray из main):

function resultarray = main() 
    object = matfile('data.mat') 
    vars = (fieldnames(object)) 
    resultarray = zeros(length(vars)) 
    for index = 1:length(vars) 
     var = vars(index) 
     x = object.var 
     resultarray = analysis(x, index) 
    end 
end 

function resultarray = analysis(x, index) 
    %does stuff to x 
    resultarray(index) = x 
    disp(resultarray(index)) 
end 

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

В противном случае вы можете создать скрипт, скажем main.m:

object = matfile('data.mat') 
vars = (fieldnames(object)) 
resultarray = zeros(length(vars)) 
for index = 1:length(vars) 
    var = vars(index) 
    x = object.var 
    resultarray = analysis(x, index) 
end 

и создать отдельный файл с именем analysis.m, который будет содержать следующий код:

function resultarray = analysis(x, index) 
    %does stuff to x 
    resultarray(index) = x 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^