Вы уже почти сделали то, что хотите. Использование таблицы поиска 2-D Simulink позволяет автоматически интерполировать данные: Посмотрите на это: я установил неравномерные данные, и это работает нормально! Данные таблицы - это значения функции z
. Так что просто измените x,y
(в моем примере это u1,u2
), и вы получите то, что хотите. Вы можете видеть, что он работает для (x,y) = [2 8]
.
Теперь, разрешите вторую проблему - как взять сумму всех значений z
? Важный момент здесь - какую сумму вы хотите получить! Вы знаете, у Simulink есть много разных решателей с переменным или фиксированным шагом. Итак, решая его с фиксированным шагом, например, dt = 0.2
даст вам все ответы за t= 0, 0.2, 0.4, ...
и так далее. Он будет интерполировать вас на ввод данных и решить z
для каждого, и если вы получите сумму здесь, это будет то, что вы хотите? Если да, то самый простой способ - использовать Integrator
блок. Что-то вроде этого:
Но! Что делать, если вы хотите разрешить это только для значений, вы устанавливаете в своем x,y
в рабочем пространстве ((1 1), (3 8) , (7 10)
пар из вашего комментария) и что получить сумму 3 z
? Это, са хороший другой вопрос, может быть, это сложнее, чем при использовании 2d таблиц поиска :)
я покажу один из многих возможных решений: перейти к Параметры конфигурации/Solver и набор фиксированный шаг с размер шага = 1. И использовать это:
вы можете видеть, что это показывает 101
но оно должно быть в вашем случае 95
(1+24+70
)! Это связано с тем, что simulink решает его и для t = (0, 0)
! Интерполирующие данные для t=0
дают дополнительные 6
. Он легко решает - добавьте в свои z
значения таблицы для x,y = 0
.
Надеюсь, теперь это ясно!
Я не очень хорошо знаком с Simulink, но то, что вы просите, звучит как «griddedInterpolant». Идея состояла бы в том, чтобы получить данные в MATLAB и создать с ней решеткуInterpolant и использовать ее как-то с Simulink –