Интерполяция в Simulink[Matlab]

У меня есть три матрицы, которые содержат значения времени и соответствующую функцию. Мне нужны значения функции, суммированные с течением времени. Вот мой набор данных (столбцы данных отмечены красным): Как видите, столбцы имеют разное время и функцию. значения, поэтому мне нужно сначала интерполировать их. Я попробовал эту модель, но это не дало результата: введите здесь описание изображения

Буду признателен за любую помощь в решении моей проблемы


person Community    schedule 26.03.2011    source источник


Ответы (3)


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

  • Блок Таблица поиска позволит вам интерполировать значения ваших функций в разные моменты времени. Это заменит блок Interp, показанный в вашей модели выше. Здесь есть несколько различных вариантов в зависимости от того, как вы хотите инициализировать данные таблицы в модели:

    1. Если у вас есть набор данных, который останется неизменным на протяжении всей симуляции, вы можете просто жестко закодировать эти данные в свойстве Таблица данных блока. В этом случае вы можете использовать блок Lookup Table, более общая таблица поиска (n-D) блок или Интерполяция с использованием Блок предварительного поиска (в сочетании с блок предварительного поиска).

    2. Если вы хотите загрузить данные таблицы из рабочей области во время моделирования, вы можете использовать Динамический блок Lookup Table или Interpolation Using Prelookup block со свойством Source, настроенным на использование входного порта. В этом случае вам придется загружать данные с помощью из рабочей области. блок (как вы делали выше), а затем убедитесь, что вы правильно отформатировали данные таблицы для использования блока интерполяции.

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

person gnovice    schedule 29.03.2011

Вероятно, вы захотите заменить блоки «из рабочей области» на «постоянные» блоки.

Константные блоки позволяют вам установить любое значение, которое может быть оценено в командной строке. Сюда входят ванильные числа (1, 6, 100, 1e6), массивы (1:3, 1:2:11, нули (23,1), единицы (10,4)*6) и переменные рабочей области (simin1, simin2). ).

С другой стороны, блоки «Из рабочей области» считывают из переменной один элемент за одно выполнение.

Похоже, вы хотите, чтобы все точки передавались в функцию interp при каждом выполнении. (Еще одна формулировка: вход «Pts» в блок interp является константой, порт «in» (время) — единственный вход, который изменяется при каждом выполнении.)

person Miebster    schedule 26.03.2011
comment
Спасибо за ответ. Итак, у меня есть только первый элемент переменной simin1 во время работы модели? - person ; 27.03.2011
comment
Если вы используете блоки рабочей области from, у вас будет первый элемент для первого выполнения, второй элемент для второго выполнения и так далее. Это то, что делает блок from workspace. Из вашего использования мне кажется, что вы хотите, чтобы вся таблица вводилась в блок interp. Вы не можете использовать из рабочей области, если вам нужна вся таблица при каждом выполнении. Вместо этого вы должны использовать постоянный блок. Если у вас возникли проблемы с пониманием, попробуйте подключить блок отображения как к постоянному блоку, так и к блоку рабочей области. Я думаю, тогда вы увидите проблему. - person Miebster; 28.03.2011
comment
Когда я запускаю модель, я всегда получаю одно странное число на дисплее, которое показывает simin1, этого числа даже нет в моем наборе данных. - person ; 28.03.2011

Я бы использовал блок «Динамическая таблица поиска» в библиотеке Simulink> Таблицы поиска вместо блока взаимодействия и разделил xdat (столбец времени t) и ydat (значения) каждый в отдельной переменной/константе.

person Mahmoud Kassem    schedule 29.03.2011