Python Линеаризация с системой Symboli c - PullRequest
1 голос
/ 01 мая 2020

Итак, я пытаюсь линеаризовать мою простую систему Symboli c, которая имеет нелинейное выходное уравнение и уравнение линейного состояния.

Я пытаюсь выяснить, как изменить номинальное значение моего ввода Вы Ака, я хочу установить u0. Я выяснил, как установить номинальное значение вектора состояния, я думаю, ниже.

c_e = Variable('c_e')
c_2 = Variable('c_2')
u   = Variable('u')

x = [c_e, c_2]

sys = SymbolicVectorSystem(state = x, input = [u], dynamics = f(x, u), output = g(x))

context = sys.CreateDefaultContext()
context.get_continuous_state_vector().SetAtIndex(0, 10**-6)
linear_sys = Linearize(sys, context)

В настоящее время я получаю сообщение об ошибке, что мой входной порт не подключен, но я не уверен, что это средства. Что я должен сделать, чтобы исправить эту ошибку и установить мою номинальную точку?

RuntimeError: InputPort::Eval(): required InputPort[0] (u0) of System ::_ (SymbolicVectorSystem<double>) is not connected

1 Ответ

1 голос
/ 01 мая 2020

Сообщение об ошибке указывает вам в правильном направлении. Для линеаризации системы с состоянием и входами необходимо указать не только номинальное состояние (x0), но и номинальный вход (u0). Вам необходимо установить оба в контексте.

Вы установили номинальное состояние, но вам нужна строка типа

context.FixInputPort(0, [0])

для указания номинального ввода.

( Конкретное сообщение об ошибке было связано с методом линеаризации, вызывающим динамические параметры вашей системы, который должен оценить входной порт ... и произошел сбой)

...