В эти дни я пытаюсь повторить спектр шока системы одиночной степени свободы, используя Sympy. Проблема может уменьшиться, чтобы найти максимальное значение функции. Ниже приведены два случая, которые я не могу понять, как это сделать.Как найти максимальное значение функции в Sympy?
Первый
tau,t,t_r,omega,p0=symbols('tau,t,t_r,omega,p0',positive=True)
h=expand(sin(omega*(t-tau)))
f=simplify(integrate(p0*tau/t_r*h,(tau,0,t_r))+integrate(p0*h,(tau,t_r,t)))
Конечной целью является получение максимального абсолютного значения f
(Переменная t
). Прямой путь:
df=diff(f,t)
sln=solve(simplify(df),t)
simplify(f.subs(t,sln[1]))
Вот результат, я пробовал много способов, но я не могу упростить дальнейшее продвижение.
Поэтому я попробовал другой путь. Потому что мне нужно максимальное абсолютное значение и место, где максимум abs(f)
происходит в том же месте квадрата f
, мы можем рассчитать квадрат f
.
df=expand_trig(diff(expand(f)**2,t))
sln=solve(df,t)
simplify(f.subs(t,sln[2]))
Похоже, что ответ почти такой же, как раз в другой форме.
Ожидаемый ответ является sinc
функция плюс константа следующим образом:
Таким образом, вопрос заключается в том, чтобы получить окончательное представление.
Второй может быть немного сложнее. Вопрос можно уменьшить, чтобы найти максимальное значение f=sin(pi*t/t_r)-T/2/t_r*sin(2*pi/T*t)
, в котором t_r
и T
являются двумя параметрами. Максимум находится в разном пике при изменении отношения t_r
и T
. И я не нашел способ решить эту проблему в Sympy. Любое предложение? Ответ может быть представлен на следующем рисунке.
Спасибо! Как насчет второго, Симпи не дает общего решения для треугольных уравнений. Как получить максимальное значение «sin (pi * t/t_r) -T/2/t_r * sin (2 * pi/T * t)» для разных отношений «t_r» и «T»? – Kattern