KonuAnlatım.com

Matplotlib ile Grafik Çizimi

Kuantum Hesaplama · Bölüm 4Kuantum HesaplamaDers

Sayıları hesaplamakla anlamak arasındaki fark, kuantum hesaplamada çok büyüktür: ölçüm histogramları, olasılık eğrileri ve genlik dağılımları ancak grafikle sezgiselleşir. Bu derste Python'un standart çizim kütüphanesi Matplotlib'i sıfırdan öğrenecek, öğrendiklerini tek kübitin olasılıklarına ve Grover algoritmasının başarı eğrisine uygulayacağız. Serinin tamamı için Kuantum Hesaplama dersleri sayfasına göz atabilirsin.

Matplotlib Nedir, Kuantum Hesaplamada Ne İşe Yarar?

Matplotlib, 2003'ten beri Python ekosisteminin standart çizim kütüphanesidir: NumPy dizisinden aldığı veriyi çizgi, çubuk, histogram ve üç boyutlu grafiklere dönüştürür. Kuantum tarafında üç işte neredeyse her gün karşına çıkar:

  • Ölçüm histogramları: 1000 shotluk bir koşuda hangi bit dizisi kaç kez çıktı?
  • Algoritma eğrileri: Grover'da başarı olasılığı tur sayısıyla nasıl değişiyor?
  • Genlik–olasılık çubukları: durumun 2ⁿ bileşeni tek bakışta görünsün.

Grafik aynı zamanda hata dedektörüdür: normalize edilmemiş bir durumu çizdiğinde çubukların 1'i aştığını hemen yakalarsın. Veri tarafını NumPy ile Bilimsel Hesaplama dersinde kurmuştuk; Matplotlib bu dizileri doğrudan tüketir.

figure ve axes: İlk Grafik

Matplotlib'de iki nesneyi ayırt etmek her şeyin başıdır: figure tuvalin kendisi, axes tuvalin içine çizilen tek bir grafiktir. fig, ax = plt.subplots() çağrısı ikisini birden üretir; sonra ax.plot, ax.bar, ax.hist gibi metotlarla çizersin. İnternette sık göreceğin plt.plot(...) kısayolu aynı işi yapar, ama axes nesnesiyle çalışmak birden çok grafiği tek tuvale yerleştirirken işini kolaylaştırır. Aşağıdaki örnekte (|0⟩ + |1⟩)/√2 durumunun olasılıklarını çiziyoruz:

import numpy as np
import matplotlib.pyplot as plt

durum = np.array([1, 1]) / np.sqrt(2) # (|0⟩ + |1⟩)/√2
olasiliklar = np.abs(durum) ** 2 # [0.5, 0.5]

fig, ax = plt.subplots()
ax.bar(['|0⟩', '|1⟩'], olasiliklar)
ax.set_ylabel('Ölçüm olasılığı')
ax.set_ylim(0, 1)
fig.savefig('kubit-olasiliklari.png', dpi=150)
plt.show()

Buradaki üç satır dersin özüdür: durum satırı süperpozisyonu kurar; np.abs(durum) ** 2 her genliğin karesini alıp olasılıkları verir; toplam kural gereği 1'dir ve np.sum(olasiliklar) ile kendin yoklayabilirsin. ax.set_ylabel ve ax.set_ylim grafiği okunur kılar; fig.savefig dosyaya yazar, plt.show ekrana açar. Tek kübit için iki çubuğun ikisi de tam 0,5'te durur — süperpozisyonun klasik karşılığı budur.

Ölçüm Sonuçları: bar ile hist

Gerçek ya da simüle edilmiş bir kuantum işlemciden gelen çıktı, ölçüm başına bir bit dizisidir; binlerce denemede (shot) her sonucun kaç kez çıktığını sayarsın. Frekansları çizmenin iki yolu vardır: sayılmış kategoriler için ax.bar (yükseklikleri sen verirsin), ham gözlem dizisi için ax.hist (sayma işini matplotlib yapar):

sonuclar = np.random.choice([0, 1], size=1000, p=olasiliklar)

fig, ax = plt.subplots()
ax.hist(sonuclar, bins=[-0.5, 0.5, 1.5], rwidth=0.85)
ax.set_xticks([0, 1])
ax.set_xlabel('Ölçüm sonucu')
ax.set_ylabel('Frekans (1000 deneme)')

1000 denemede 0'ı tam 500 kez değil, yaklaşık 500 kez görürsün; sapma olasılığın doğasıdır ve bu gözlem Olasılık ve İstatistik Temelleri dersindeki büyük sayılar fikriyle örtüşür. Ölçek büyüyünce desen de büyür: 3 kübit için 2³ = 8 olası sonuç, yani histogramda 8 çubuk.

Bir Eğri Çizmek: Grover Başarı Olasılığı

Matplotlib'in en güçlü yanı fonksiyon eğrileridir; bu sayede bir algoritmanın davranışını koşmadan önce tahmin edebilirsin. Tek çözümlü Grover aramasında N aday varken sin θ = 1/√N tanımlanır ve r turdan sonra başarı olasılığı P(r) = sin²((2r + 1)·θ) olur. Bu eğriyi çizmek, Kuantum Hesaplama 101 dersindeki (π/4)·√N tur kuralını gözünle görmek demektir:

N = 1024
theta = np.arcsin(1 / np.sqrt(N))
r = np.arange(0, 60)
P = np.sin((2*r + 1) * theta) ** 2

fig, ax = plt.subplots()
ax.plot(r, P)
ax.set_xlabel('Grover turu r')
ax.set_ylabel('Başarı olasılığı')

N = 1024 için θ ≈ 0,0313 rad çıkar; eğri (π/4)·√1024 ≈ 25 tur civarında tepe yapar — 20 bitlik uzaydaki 804 turluk kuralın küçük kardeşi. Tepeden sonra eğrinin düştüğünü de görürsün: fazla tur, hedefin üzerinden geçmektir. Küçük bir ayrıntıya dikkat: np.sin dizilere vektörel uygulanır; math.sin ise tek sayı ister, dizi kabul etmez. Fonksiyon–grafik ilişkisinin temelini Fonksiyonlar ve Temel Matematik dersinde bulabilirsin.

Sık Yapılan Hatalar ve Yanılgılar

Aşağıdaki listeyi her çizimden önce bir kontrol listesi gibi kullan:

  • plt.show() işleri: betik dosyasında show çağırmazsan pencere hiç açılmaz; sona bir kez koymak yeter. Jupyter'de gerekmez, hücre grafiği kendiliğinden basar — ayrıntı Jupyter ile Çalışma Ortamı dersinde. savefig'ı da show'dan önce yaz; yoksa kaydedilen dosya boş çıkabilir.
  • Listeyle çalışıp diziyi atlamak: math.sin(liste) hata verir; np.sin diziyi vektörel işler. Çizimden önce verini NumPy dizisine çevir.
  • Etsiz grafik: eksen etiketi ve başlıksız çizim, bir hafta sonra sana bile yabancı gelir; ax.set_xlabel ve ax.set_title alışkanlık olsun.
  • bar ile hist'i karıştırmak: ax.bar'da sayıları sen verirsin, ax.hist'te sayan matplotlib'dir; sürekli veriye bar, kategorik veriye hist zorlamak yanıltır.
  • “Grafik durumu birebir gösterir” yanılgısı: çubuk grafik genlikleri temsil eder ama durumun geometrisini göstermez; Bloch küresi gibi temsiller için mplot3d ya da Qiskit'in görselleştirme araçları gerekir.

Grafik, düşünceni dışarı taşımanın en hızlı yoludur; ürettiğin her çizimi ve onu üreten kodu saklamak da alışkanlık olmalı — bu düzeni Kuantum Projelerinde Git ve GitHub dersinde kuracaksın. Genlikleri dizi olarak görebilmek, bir sonraki ünitede durum vektörü diline geçişin ilk adımıdır; yapı taşlarını Vektörler ve Matrisler derslerinde kuracağız. Kurulumda ya da temel söz diziminde takıldıysan Kuantum Hesaplama için Python Temelleri dersine dönmek en doğrusudur.

Sık Sorulan Sorular

Matplotlib grafiklerini hangi formatta kaydetmeliyim?

fig.savefig('grafik.png', dpi=200) rapor ve sunum için yeterlidir; tez ve yayınlarda SVG, PDF gibi vektörel formatları tercih et, büyütünce bozulmazlar. Format uzantıdan otomatik anlaşılır; kaydetmeyi plt.show'dan önce yapmak güvenli alışkanlıktır.

plt.show() ne işe yarar, her ortamda gerekli mi?

show, o ana kadar biriken çizim komutlarını ekranda bir pencere olarak açar; betik dosyalarında sonda bir kez çağrılır. Jupyter not defterinde hücre sonunda grafik kendiliğinden gösterildiği için show gerekmez.

Matplotlib ile Seaborn arasındaki fark nedir?

Seaborn, Matplotlib'in üstüne oturan yüksek seviyeli bir istatistiksel grafik kütüphanesidir; hazır stil ve istatistiksel grafikler sunar. Kuantum ölçüm histogramları gibi basit çubuk ve eğri işlerinde doğrudan Matplotlib daha ince kontrol sağlar; ikisi birlikte de kullanılabilir.

Bloch küresini Matplotlib ile çizebilir miyim?

Evet; mplot3d eklentisiyle üç boyutlu yüzey ve vektör çizilebilir, ama küreyi sıfırdan kurmak zahmetlidir. Pratik bir başlangıç, tek kübitin ⟨X⟩, ⟨Y⟩, ⟨Z⟩ beklenti değerlerini çubuk grafikle göstermektir; hazır Bloch küresi çizimi için Qiskit'in görselleştirme araçları kullanılır.

Kaynaklar ve İleri Okuma

Matplotlib resmî dokümantasyonu — kurulum, API referansı ve resmî öğreticilerin ana adresi.

Pyplot tutorial — hızlı çizim arayüzünün geliştiricilerince yazılmış adım adım girişi.

Matplotlib — Wikipedia — kütüphanenin tarihçesi ve bilimsel Python ekosistemindeki yeri.

Bloch sphere — Wikipedia — tek kübitin geometrik temsili; grafikle düşünmenin kuantuma özel hâli.

Dersler

Tümü →