У меня есть следующая нелинейная ОДУ: У меня есть следующее решение ODE45:
fun = @(t,X)odefun(X,K,C,M,F(t),resSize);
[t_ode,X_answer] = ode45(fun,tspan,X_0);
Входными матрицами являются жесткость K(X)
, демпфирование C
, масса M
и сила F
. resSize
— общее количество масс в системе.
Я хотел бы найти собственные значения системы, используя матрицу Якоби, передаточную функцию или любой другой жизнеспособный метод.
Я пробовал использовать:
[vector,lambda,condition_number] = polyeig(K(X_answer),C,M);
Это сложно, поскольку моя матрица K
является дескриптором функции X
. Другими словами, K=@(X)
. X
представляет собой вектор смещения каждой массы в системе (x_1(t)
,x_2(t)
,...x_resSize(t)
), где resSize
— общее количество масс. Моя матрица X_answer
представляет собой двойную матрицу с размерами t_ode
на resSize
, где каждая строка представляет собой вектор смещения каждой массы в двойной форме. Есть ли способ заменить X_answer
в моем дескрипторе функции для K, чтобы я мог использовать polyeig()? Если нет, то как мне найти передаточную функцию моей системы или матрицу Якобиана, чтобы найти ее собственные значения?
Не зная точной формы вашего уравнения, на основе вашего описания я предполагаю, что у вас есть что-то вроде:
[M]{x''}+[C]{x'} + [K(x)]{x} = F(t)
Поскольку эта система уравнений является нелинейной, собственные значения можно оценить на основе разложения вокруг каждого x, оцененного на основе выходных данных функции ode45. Поскольку ode45 объединяет систему уравнений первого порядка, вы, вероятно, ввели замену переменных, чтобы записать вышеуказанную систему как систему первого порядка. В форме пространства состояний это
{y'} = [A]{y} + b(t), где {y} = {x; Икс'}
Итак, выходные данные функции оды содержат смещения {x} и скорости {x'}.
Если вы хотите оценить собственные значения для каждого x на выходе, вы можете сделать
for ii=1:length(t_ode)
[X,e] = polyeig(K(X_answer(ii,1:end/2),C,M)
end
Да. Общее решение — это Xh(t) + Xp(t), где Xh — решение соответствующего однородного уравнения, а Xp — частное уравнение. Однородное решение для линейных дифференциальных уравнений находится путем решения соответствующей проблемы собственных значений.
Я пытаюсь получить передаточную функцию для этой системы. Вы были правы, предположив, что я сделал замену переменных. Что такое b(t)
в СС 1-го порядка, который вы написали?
b(t) — вектор возбуждения соответствующей размерности. обычно {b(t)} = [zeros(n_gdl,1) ; M\f(t)]
Применяется ли
polyeig()
только к однородным EOM? Другими словами, нахожу ли я собственные значения моего ОДУ, предполагая, чтоF(t)=0
при использованииpolyeig()
? @Талес