BattOS

Sympy Paketine Giriş ve Limit Hesabı - Python ile Matematik 1

Merhaba, bu yazı yapmayı planladığım Python ile Matematik yazı dizisinin birincisi. Bu yazı dizisinde sympy, numpy, scipy, matplotlib gibi paketler kullanacağız. Bu paketler ile Limit, Türev, İntegral gibi işlemler yapacağız. Önce basit fonksiyonlarla başlayıp sonrasında bu işlemleri çok değişkenli fonksiyonlarda da yapacağız. En son da optimizasyon problemleri ile seriyi bitirmeyi düşünüyorum.

Bu birinci yazıda Sympy paketini tanımayı ve basit limit hesapları yapmayı amaçlayacağız.

Paketi import etmekle başlayalım:

import sympy as smp

Sympy’de en önemli şey sembol kavramıdır. ‘x’, ‘y’ gibi sembolleri sympy.symbols() ile tanımlıyoruz.

x, y = smp.symbols("x y")

Artık bu x ve y ile numerik işlemler değil de sembolik işlemler yapabiliriz ve denklemler oluşturabiliriz.

x**2

$\displaystyle x^{2}$

Daha sonra bu sembollerle tanımlamalar yapabiliriz:

f = x**2 + y
f

$\displaystyle x^{2} + y$

Daha sonra hesaplama yaparken aslında sembollerin yerine sayıları koyuyor, yer değiştiriyoruz (substitute). Örneğin x yerine 5, y yerine 2 koyalım ve hsaplayalım:

f.subs(x, 5).subs(y, 2)

$\displaystyle 27$

Özel tanımlı fonksiyonlar kullanmak istersek bunlar sympy paketi içerisinde tanımlıdır. Bunlardan bazıları:

Denklem Sistemleri

Sympy ile denklem sistemlerini de çözebiliriz. Şimdilik sadece lineer ve linner olmayan denklem sistemlerine bakalım. Diferansiyel denklem sistemleriyle ileride ilgileneceğiz.

Sympy ile bir denklem sistemini çözmek istiyorsak sympy.solve() fonksiyonunu kullanabiliriz. Bu fonksiyonun ilk girdisi eşitlikler listesi (denklemler sıfıra eşitlenmiş biçimiyle yazılır) ve ikinci girdi olarak çözümü istenilen değişkenler listesi. Hemen bir örnekle görelim.

Örnek 1.1:

$5x + 4y = 14$
$2x + 3y = 7$

smp.solve([5*x + 4*y - 14, 2*x + 3*y - 7], [x,y])
{x: 2, y: 1}

Verilen çıktıdan alnıyoruz ki çözüm kümesi 1 elemanlı yani tek çözümü var ve bu çözüm de $x=2, y=1$.

Bir tane de lineer olmayan denklem sistemi çözelim.

Örnek 1.2:

$x^2 + y = 2$
$4x + y = 0$

smp.solve([x**2 + y - 2, 4*x + y], [x,y])
[(2 - sqrt(6), -8 + 4*sqrt(6)), (2 + sqrt(6), -4*sqrt(6) - 8)]

Görüyoruz ki çözüm kümesi iki elemanlı ve bunlar $x=2-\sqrt{6}, y=-8+\sqrt{6}$ ve $x=2+\sqrt(6), y=-4\sqrt{6} - 8$.

Limit

Şimdi biraz basit limitlerle uğraşalım. Limitleri çözmek için sympy.limit() fonksiyonunu kullanacağız. Bu fonksiyonun girdileri: ifade, değişken, değişkenin yaklaştığı değer şeklinde.

Örnek 1.3:

$\lim_{x \to \frac{\pi}{6}} \frac{\sqrt{1-sin2x}}{cos2x}$

Önce bir bu ifadeyi sympy ile nasıl yazarız bakalım:

smp.sqrt(1 - smp.sin(2*x)) / smp.cos(2*x)

$\displaystyle \frac{\sqrt{1 - \sin{\left(2 x \right)}}}{\cos{\left(2 x \right)}}$

Ve çözüm:

smp.limit(smp.sqrt(1 - smp.sin(2*x)) / smp.cos(2*x), x, smp.pi/6)

$\displaystyle 2 \sqrt{1 - \frac{\sqrt{3}}{2}}$

İşte bu kadar basit.

Şimdi sağdan ve soldan limit nasıl alınır ona bakalım. Bunun için sympy.limit() fonksiyonuna ekstra opsiyonel bir named arg veriyoruz, adı dir (direction). dir='+' ve dir='-' ile sağdan ve soldan limit alabiliriz. Hemen bir örnek yapalım.

Örnek 1.4:

$\lim_{x \to -5^+} \frac{\mid x^2 + 2x - 15 \mid}{x + 5}$

Sympy ile çözülmesi:

smp.limit(smp.Abs(x**2 + 2*x - 15)/ (x+5), x, -5, dir='+')

$\displaystyle 8$

Son olarak bir de sonsuza giden limitlere bakalım. Pek bir ekstrası yok, sayı yerine sonsuz koyacağız. Bunu Sympy paketinde sympy.oo (iki tane o) ile yapabiliriz.

Örnek 1.5:

$\lim_{x \to \infty} \frac{cos(x)-1}{x}$

smp.limit( (smp.cos(x) - 1) / x , x, smp.oo)

$\displaystyle 0$


Bu seferlik bu kadar olsun. Sonraki yazıda türevlerin ve integrallerin nasıl hesaplandığından bahsedeceğim.

İleri okuma için Sympy dökümantasyonuna bakabilirsiniz.

Sorular ve öneriler için eposta göndermenizi bekliyor olacağım.


Kerem Ü.
kerem.ullen@pm.me