2017-05-02 8 views
0

Ich versuche, einige Faltungsintegrale zu lösen, aber ohne Glück.Sympy löst Faltungsintegral nicht

import matplotlib.pyplot as plt 
import numpy as np 
import sympy as sp 

t1 = 0.01 
t1_sym = sp.Symbol('t_1') 
F0 = 30e3 
F0_sym = sp.Symbol('F_0') 
m = 4000 
m_sym = sp.Symbol('m') 
k = 5000e3 
k_sym = sp.Symbol('k') 
omega0_sym = sp.sqrt(k_sym/m_sym) 
t = sp.Symbol('t') 
tau = sp.Symbol(r'\tau') 

F1_sym= 2*F0_sym*tau/t1_sym 


x1_sym = sp.integrate((F1_sym*sp.sin(omega0_sym*(t-tau))/(omega0_sym*m_sym)) ,(tau,0,t)) 

Ich wäre wirklich dankbar für irgendwelche Erkenntnisse.

Antwort

1

Im Allgemeinen ist es eine gute Praxis, alle verfügbaren Informationen über die Parameter und Variablen in einem Integral bereitzustellen, anstatt sie einfach als symbols zu deklarieren. Aus den numerischen Werten, die Sie verwenden, ist klar, dass alle Variablen und Parameter real und positiv sind. Sie können diese Informationen bereitstellen, wenn Sie sie definieren. Mit diesen Informationen bietet sympy einen Ausdruck für das Integral (ich überlasse es Ihnen zu überprüfen, ob es richtig ist oder nicht)

t1_sym = sp.Symbol('t_1', positive = True) 
F0_sym = sp.Symbol('F_0', positive = True) 
m_sym = sp.Symbol('m', positive = True) 
k_sym = sp.Symbol('k', positive = True) 
omega0_sym = sp.sqrt(k_sym/m_sym) 
t = sp.Symbol('t', positive = True) 
tau = sp.Symbol(r'\tau', positive = True) 

F1_sym= 2*F0_sym*tau/t1_sym 
x1_sym = sp.integrate((F1_sym*sp.sin(omega0_sym*(t-tau))/(omega0_sym*m_sym)) ,(tau,0,t)) 
print(x1_sym) 

2*F_0*t/(k*t_1) - 2*F_0*sqrt(m)*sin(sqrt(k)*t/sqrt(m))/(k**(3/2)*t_1)

+1

Recht, ist der entscheidende Punkt, dass die Annahmen stellen sicher, dass 'omega0_sym' real ist. – FTP

+0

Man bedankt sich, Sie sind Lebensretter: D – AndrazStrnisnik