Если я правильно понимаю, похоже, что вы хотите иметь Lookup Table block с индексами и табличными значениями, которые могут динамически обновляться в ходе моделирования. Я считаю, вы можете сделать это, используя From File block, Demux block и Lookup Table Dynamic block. Скажем, у вас есть файл, содержащий .mat массив следующего вида:
[ time_1 time_2 time_3 ...; %# Time stamps
index1_1 index1_2 index1_3 ...; %# Index 1 for all time stamps
index2_1 index2_2 index2_3 ...; %# Index 2 for all time stamps
...
indexN_1 indexN_2 indexN_3 ...; %# Index N for all time stamps
value1_1 value1_2 value1_3 ...; %# Table value 1 for all time stamps
value2_1 value2_2 value2_3 ...; %# Table value 2 for all time stamps
...
valueN_1 valueN_2 valueN_3 ...] %# Table value N for all time stamps
Для каждого столбца, есть штамп времени, N
элементов для индексов таблицы поиска, и N
элементов для табличных значений. После загрузки с использованием From File block выход с длиной 2*N
можно разделить на два выхода, каждый из которых имеет длину N
(то есть индексы и значения таблицы), используя Demux block. Эти два массива затем могут использоваться для входов xdat
и ydat
для Lookup Table Dynamic block, создавая таким образом таблицу поиска, значения индекса и таблицы которой могут обновляться из файла по мере запуска имитации.
Ответ на комментарий от AKE ...
Отметки времени присутствуют в приведенном выше массиве, потому что я был под впечатлением, что вы хотели изменить данные поиска в таблице в зависимости от времени моделирования (например, используйте один набор индексов и значений таблиц от 0 до 10 секунд, затем другой набор в течение 10-20 секунд). Если вы хотите это сделать, то потребует некоторой спецификации того времени, когда данные будут изменены.
Однако, если вы хотите, чтобы загрузить один набор табличных данных из файла в начале моделирования, то ваш файл .mat должен только один столбец с отметкой времени 0.Ваш образец данных в A
могут быть легко изменены соответствующим образом:
A = load(yourDataFile); %# Load your data
A = [0; A(:)]; %# Convert it to a column vector and add a time stamp
save(yourMatFile,'A'); %# Save A to a .mat file for the From File block
Что касается вашей заботы о Demux block, вы на самом деле не нужно указать N
. Вам нужно только указать, что у него будет 2 выхода, и таким образом он разделит вход пополам. Например, если вход представляет собой 10-элементный вектор, и у вас есть два выхода, указанные для блока, в качестве вывода вы получите два 5-элементных вектора.
Спасибо gnovice. Да, это направление, но я думаю, что здесь есть две проблемы. Первая проблема заключается в том, что из блока File, по-видимому, требуется, чтобы данные * .mat были в форме * временных рядов *, в таблицах данных, которые я использую, нет понятия времени, поэтому это будет искусственное дополнение, которое потребует дополнительного «склейка скрипта». Вторая проблема, которую я считаю, состоит в том, что блок Demux должен знать статическое значение N и не может его обнаружить (правильно?). Цель состоит в том, чтобы иметь N динамический - обнаруженный во время выполнения моделирования. –
@AKE: Я обновил свой ответ, чтобы обсудить ваши вышеупомянутые проблемы. – gnovice
приятно и просто! обе проблемы адресованы - это хорошо работает. На самом деле, я думаю, что временный индекс должен также решить проблему динамического обновления по времени. (Я имел в виду другой подход, так что пропустил ваш смысл до тех пор, пока вы не разработали выше.) Спасибо;) –