import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad, solve_ivp
from scipy.optimize import minimize
from scipy.signal import butter, lfilter
# ==========================================
# 1. Numerikus integrálás
# ==========================================
# Határozott integrál kiszámítása: int_0^2 (x^2) dx
def integrand(x):
return x**2
integral_ertek, hiba = quad(integrand, 0, 2)
print(f"1. Integrálás eredménye: {integral_ertek:.4f} (Hiba: {hiba:.2e})")
# ==========================================
# 2. Differenciálegyenlet megoldása
# ==========================================
# Egy elsőrendű diff.egyenlet: dy/dt = -2y, y(0) = 1
def dydt(t, y):
return -2 * y
t_span = (0, 5) # Intervallum
t_eval = np.linspace(0, 5, 100) # Kiértékelési pontok
y0 = [1.0] # Kezdeti feltétel
megoldas = solve_ivp(dydt, t_span, y0, t_eval=t_eval)
print(f"2. Diff. egyenlet megoldva. Utolsó érték t={megoldas.t[-1]}: {megoldas.y[0][-1]:.4f}")
# ==========================================
# 3. Optimalizálás
# ==========================================
# Minimum keresés: f(x) = x^2 - 3x + 2
def celFuggveny(x):
return x**2 - 3*x + 2
x_kezdo = [0.0] # Kezdőbecslés a kereséshez
eredmeny = minimize(celFuggveny, x_kezdo, method='BFGS')
print(f"3. Optimalizálás minimuma: x = {eredmeny.x[0]:.4f}, f(x) = {eredmeny.fun:.4f}")
# ==========================================
# 4. Jelfeldolgozás (Szűrés)
# ==========================================
# Mintajel generálása (1 Hz és 10 Hz keveréke)
fs = 100.0 # Mintavételi frekvencia
t = np.linspace(0, 1, fs, endpoint=False)
jel = np.sin(2 * np.pi * 1 * t) + 0.5 * np.sin(2 * np.pi * 10 * t)
# Aluláteresztő szűrő tervezése (levágási frekvencia: 5 Hz)
nyq = 0.5 * fs
cutoff = 5 / nyq
b, a = butter(4, cutoff, btype='low')
szurt_jel = lfilter(b, a, jel)
print("4. Jelfeldolgozás: Szűrés sikeresen végrehajtva.")
---------------
1. Integrálás eredménye: 2.6667 (Hiba: 2.96e-14)
2. Diff. egyenlet megoldva. Utolsó érték t=5.0: 0.0000
3. Optimalizálás minimuma: x = 1.5000, f(x) = -0.2500
--------------
from sympy import symbols, integrate
x = symbols('x')
# Példa: az f(x) = 2*x^2 + 3*x + 1 integrálása x szerint
f = 2 * x**2 + 3 * x + 1
# Határozatlan integrál
hatarozatlan_integral = integrate(f, x)
print(f"Határozatlan integrál: {hatarozatlan_integral}")
# Határozott integrál [0, 2] intervallumon
hatarozott_integral = integrate(f, (x, 0, 2))
print(f"Határozott integrál: {hatarozott_integral}")
--------------
Határozatlan integrál: 2*x**3/3 + 3*x**2/2 + x
Határozott integrál: 40/3
** Process exited - Return Code: 0 **
---------------
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt
# ==========================================
# Mintajel generálása (1 Hz és 10 Hz keveréke)
# ==========================================
fs = 100.0 # Mintavételi frekvencia
t = np.linspace(0, 1, int(fs), endpoint=False)
jel = np.sin(2 * np.pi * 1 * t) + 0.5 * np.sin(2 * np.pi * 10 * t)
# ==========================================
# Aluláteresztő szűrő tervezése és szűrés
# ==========================================
levagasi_frekvencia = 5.0 # Levágási frekvencia: 5 Hz
rend = 4 # A szűrő rendje
# Szűrő együtthatók tervezése
b, a = butter(rend, levagasi_frekvencia, btype='low', fs=fs)
# Zéró fázistolású szűrés alkalmazása (a fázistorzítás elkerülésére)
szurt_jel = filtfilt(b, a, jel)
# ==========================================
# Eredmények ábrázolása
# ==========================================
plt.figure(figsize=(12, 6))
plt.plot(t, jel, label='Eredeti jel (1 Hz + 10 Hz)', color='gray', alpha=0.5)
plt.plot(t, szurt_jel, label='Szűrt jel (aluláteresztő < 5 Hz)', color='blue', linewidth=2)
plt.title('Digitális Butterworth aluláteresztő szűrő hatása')
plt.xlabel('Idő [másodperc]')
plt.ylabel('Amplitúdó')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
--------------------
import numpy as np
import matplotlib.pyplot as plt
# Mintavételi frekvencia és időtartam
fs = 200 # Hz (elegendő a 10 Hz-es jel visszaadásához)
t = np.linspace(0, 2, 2 * fs, endpoint=False) # 2 másodperc
# 1 Hz és 10 Hz frekvenciájú szinuszjelek generálása és összeadása
f1, f2 = 1, 10
signal = np.sin(2 * np.pi * f1 * t) + np.sin(2 * np.pi * f2 * t)
# A jel ábrázolása
plt.figure(figsize=(10, 5))
plt.plot(t, signal, label='1 Hz és 10 Hz keveréke')
plt.title('Kevert mintajel (1 Hz és 10 Hz)')
plt.xlabel('Idő (másodperc)')
plt.ylabel('Amplitúdó')
plt.grid(True)
plt.legend()
plt.show()
----------
Szűrés
------------
# Eredeti lista
szamok = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 1. módszer: Lista-kifejezés (List comprehension)
# Ez a legelterjedtebb és leginkább olvasható Pythonos módszer.
paros_szamok = [szam for szam in szamok if szam % 2 == 0]
print("Páros számok (lista-kifejezéssel):", paros_szamok)
# 2. módszer: A filter() függvény és egy lambda (névtelen) függvény használata
# A filter egy szűrő objektumot ad vissza, amit listává kell alakítanunk.
paros_szamok_filter = list(filter(lambda x: x % 2 == 0, szamok))
print("Páros számok (filter függvénnyel):", paros_szamok_filter)
---------------
Páros számok (lista-kifejezéssel): [2, 4, 6, 8, 10]
Páros számok (filter függvénnyel): [2, 4, 6, 8, 10]
** Process exited - Return Code: 0 **
Nincsenek megjegyzések:
Megjegyzés küldése