مقدمة في استخدام مكتبة SciPy

مقدمة في استخدام مكتبة SciPy

تُعَدّ مكتبة SciPy مجموعة من الخوارزميات والدوال الرياضية المبنية على امتداد NumPy في لغة بايثون. توفّر SciPy واجهات عالية المستوى لتحليل البيانات ومعالجتها، وهي منظمة في حزم فرعية تغطي مجالات مختلفة في الحوسبة العلمية. من الأمثلة على هذه الحزم الفرعية:

  • scipy.optimize (التحسين ومعالجة المعادلات الجبرية)

  • scipy.integrate (التكامل وحل المعادلات التفاضلية)

  • scipy.linalg (الجبر الخطي)

  • scipy.stats (الإحصاء)

  • scipy.signal (معالجة الإشارة الرقمية)

  • scipy.ndimage (معالجة الصور)

قبل البدء في استخدام أي من هذه الحزم، يجب تثبيت مكتبة SciPy. يمكن ذلك عبر تنفيذ الأمر التالي في موجه الأوامر:

pip install scipy

بعد التثبيت، يمكن استيراد الحزم الفرعية على النحو التالي:

import numpy as np
from scipy import optimize, integrate, linalg, stats, signal, ndimage

التحسين (Optimization)

تُستخدم حزمة scipy.optimize في حل مسائل التحسين (التصغير أو التكبير) ومسائل البحث عن جذور المعادلات. من الدوال الشائعة في هذه الحزمة:

  • optimize.minimize: لإيجاد قيمة المتغيّر التي تصغّر دالة معينة.

  • optimize.curve_fit: لتوفيق منحنى (Curve fitting) على مجموعة من البيانات.

  • optimize.fsolve: لحل المعادلات غير الخطية عن طريق إيجاد جذورها.

مثال بسيط لإيجاد الحد الأدنى لدالة تربيعية:

from scipy import optimize

def f(x):
    return (x - 3)**2

result = optimize.minimize(f, 0)
print("Minimum at x =", result.x[0])

في هذا المثال نحاول العثور على قيمة xx التي تقلّل الدالة (x−3)2(x-3)^2. النتيجة المتوقعة هي x=3x = 3.

التكامل (Integration)

تحتوي حزمة scipy.integrate على أدوات لإجراء التكامل العددي ومعالجة المعادلات التفاضلية العادية. على سبيل المثال:

  • integrate.quad: لحساب التكامل المحدد لدالة بمتغير واحد.

  • integrate.odeint أو integrate.solve_ivp: لحل المعادلات التفاضلية العادية.

مثال على التكامل العددي:

from scipy import integrate

f = lambda x: x**2
result, error = integrate.quad(f, 0, 1)
print("Integral from 0 to 1:", result)

في هذا المثال نحسب ∫01x2 dx\int_0^1 x^2 \, dx، وهي تساوي 1/3≈0.33331/3 \approx 0.3333.

حل المعادلات الجبرية

يمكن حل المعادلات الجبرية (غير الخطية) باستخدام scipy.optimize.fsolve أو scipy.optimize.root. هذه الأدوات تقوم بحساب جذور المعادلة أو نظام المعادلات. مثال:

from scipy.optimize import fsolve

def equations(vars):
    x, y = vars
    eq1 = x**2 + y**2 - 4
    eq2 = x - y - 1
    return [eq1, eq2]

solution = fsolve(equations, (1, 1))
print("Solution:", solution)

في هذا المثال نحل المعادلتين: x2+y2=4x^2 + y^2 = 4 و x−y=1x - y = 1. يعطي solution قيم xx و yy التي تحقق المعادلات.

المعادلات التفاضلية

توفر scipy.integrate حلولًا لمعظم المعادلات التفاضلية العادية. على سبيل المثال، الدالة odeint أو solve_ivp تستخدم لحل المعادلات التفاضلية بتمثيل النظام كدالة. مثال:

from scipy.integrate import odeint
import numpy as np

def dy_dt(y, t):
    return -0.5 * y

y0 = 1
t = np.linspace(0, 5, 100)
y = odeint(dy_dt, y0, t)
print("Value at t=5:", y[-1][0])

في هذا المثال، تم حل المعادلة dy/dt=−0.5ydy/dt = -0.5y مع شرط ابتدائي y(0)=1y(0)=1، ويتم الحصول على قيم yy على مدى الفترة الزمنية المحددة.

الإحصاء (Statistics)

تضم حزمة scipy.stats توزيعات احتمالية متعددة ودوال لحساب الإحصاءات الوصفية والاختبارات الإحصائية. مثلاً:

  • stats.describe: لحساب وصف إحصائي لبيانات (مثل المتوسط والتباين).

  • stats.norm: كائن يمثل التوزيع الطبيعي.

  • دوال مثل stats.ttest_ind لاختبارات الفرضيات بين مجموعتين.

مثال لحساب المتوسط والتباين من بيانات:

from scipy import stats

data = [1, 2, 2, 3, 4]
desc = stats.describe(data)
print("Mean:", desc.mean, ", Variance:", desc.variance)

الجبر الخطي (Linear Algebra)

تحتوي scipy.linalg على أدوات متقدمة في الجبر الخطي مثل حل الأنظمة الخطية وحساب المحدد والقيم الذاتية. فمثلاً:

  • linalg.solve: لحل نظام معادلات خطية Ax=bAx = b.

  • linalg.det: لحساب محدد مصفوفة.

  • linalg.eig: لحساب القيم الذاتية والمتجهات الذاتية.

مثال:

import numpy as np
from scipy import linalg

A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = linalg.solve(A, b)
print("Solution x:", x)

eigs, vecs = linalg.eig(A)
print("Eigenvalues:", eigs)

معالجة الإشارة والصورة

تتيح scipy.signal وظائف لمعالجة الإشارة الرقمية مثل الترشيح وتحويل فوريير، بينما توفر scipy.ndimage وظائف لمعالجة الصور (مثل التنعيم والكشف عن الحواف). بعض الأمثلة:

  • signal.convolve: ترشيح إشارة أحادية الأبعاد عبر التفاف.

  • fft: لحساب تحويل فوريير السريع لإشارة.

  • ndimage.gaussian_filter: لتنعيم صورة ثنائية الأبعاد.

مثال على ترشيح إشارة وتحويل فوريير:

from scipy.signal import convolve
from scipy.fft import fft

signal = [1, 2, 3, 4]
kernel = [1, -1]
conv_result = convolve(signal, kernel)
fft_result = fft(signal)

print("Convolution:", conv_result)
print("FFT of signal:", fft_result)

الخاتمة

مكتبة SciPy توفر مجموعة واسعة من الأدوات الحسابية المتقدمة المفيدة في مجالات العلم والهندسة. في هذا الدليل البسيط، استعرضنا أهم أقسامها الرئيسية مع أمثلة برمجية مبسّطة. يمكن للمهتمين متابعة التعلم من خلال قراءة المزيد من الوثائق الرسمية والتطبيق العملي للحصول على خبرة أعمق في استخدام مكتبة SciPy.

حول المحتوى:

تُعَدّ مكتبة SciPy مجموعة من الخوارزميات والدوال الرياضية المبنية على امتداد NumPy في لغة بايثون.