Структурная переменная в качестве ввода в функцию MATLAB с использованием VARARGIN - PullRequest
0 голосов
/ 17 сентября 2018

Я написал основную функцию в Matlab, которая вызывает другие функции, каждая из которых создает графики на новом рисунке. Хотя каждая функция создает разные графики (разные цвета, количество дочерних участков и т. Д.), Все они имеют некоторые общие черты (шрифт, размер шрифта, ширина линии и т. Д.).

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

var.font = 'Arial Unicode MS';
var.fontsize = 13;
var.interpreter = 'none' ;

и так далее для других полей. Когда я вызываю функцию таким образом (предоставляя структуру в качестве входных данных):

function plot1( var , ... )
    fig = gcf
    fig.Position(3) = var.Position3
    fig.Position(4) = var.Position4
end

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

function plot1( varargin )
    fig = gcf;
    temp = varargin(1);
    fig.Position(3) = temp.Position3;
    fig.Position(4) = temp.Position4;
end

Появится следующее сообщение об ошибке «Ссылка на содержимое структуры из объекта неструктурного массива».

1 Ответ

0 голосов
/ 17 сентября 2018

Вы неправильно индексируете массив ячеек (это легко сделать).

  • Круглые скобки ( ) дают вывод ячеек при индексации массива ячеек, т. Е. Ваша temp представляет собой ячейку 1x1 со структурой внутри нее.
  • Вам нужны фигурные скобки { }, чтобы извлечь содержимое массива ячеек.

Исправление : используйте фигурные скобки:

temp = varargin{1};

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

Вот несколько документов по индексированию массивов ячеек, где разница описана более подробно:

https://uk.mathworks.com/help/matlab/matlab_prog/access-data-in-a-cell-array.html

...