📐 math - Bilimsel Matematik Modülü
Üniversite + Araştırma + Mühendislik seviyesi matematiksel hesaplamalar
📚 Overview
math modülü, BERK'un bilimsel hesaplama yeteneklerinin temelidir. Julia Math, NumPy, SciPy and GNU Scientific Library (GSL) standartlarından esinlenerek tasarlanmıştır.
İlham Kaynakları
- Julia: Math + FastMath + SpecialFunctions
- Python: NumPy / SciPy scientific computing
- Rust: nalgebra, ndarray, statrs, argmin
- C: GNU Scientific Library (GSL)
- Standartlar: BLAS/LAPACK/LINPACK
Özellikler
- ✓ Trigonometrik functionlar (radyan + derece)
- ✓ Hiperbolik functionlar
- ✓ Üstel and logaritmik functionlar
- ✓ Özel functionlar (Gamma, Beta, Bessel)
- ✓ Polinom değerlendirme (Horner yöntemi)
- ✓ Kök bulma (Newton-Raphson, Bisection)
- ✓ Sayısal entegrasyon (Simpson, Gauss)
- ✓ İnterpolasyon (Linear, Cubic spline)
- ✓ Karmaşık int desteği
- ✓ LLVM fast-math optimizasyonları
🚀 Quick Start
Temel useım
import math
function main() do
// Temel işlemler
let x = math.sqrt(16.0) // Karekök
let y = math.pow(2.0, 8.0) // Üs alma
let z = math.abs(-42.0) // Mutlak değer
yazdır("√16 = " + x.yazıya()) // √16 = 4
yazdır("2^8 = " + y.yazıya()) // 2^8 = 256
yazdır("|-42| = " + z.yazıya()) // |-42| = 42
// Trigonometri (radyan)
let sin_pi_2 = math.sin(math.PI / 2.0)
yazdır("sin(π/2) = " + sin_pi_2.yazıya()) // sin(π/2) = 1.0
// Logaritma
let ln_e = math.log(math.E)
yazdır("ln(e) = " + ln_e.yazıya()) // ln(e) = 1.0
end
🔢 Matematiksel Sabitler
| const | Değer | Açıklama |
|---|---|---|
math.PI |
3.14159265358979... | π (pi) |
math.E |
2.71828182845904... | Euler sayısı (e) |
math.PHI |
1.61803398874989... | Altın oran (φ) |
math.TAU |
6.28318530717958... | τ = 2π |
math.SQRT2 |
1.41421356237309... | √2 |
math.SQRT3 |
1.73205080756887... | √3 |
math.EULER_GAMMA |
0.57721566490153... | Euler-Mascheroni sabiti |
Fiziksel Sabitler (SI Birimi)
| const | Değer | Açıklama |
|---|---|---|
math.LIGHT_SPEED |
299792458 | Işık hızı (c) m/s |
math.PLANCK |
6.62607015×10⁻³⁴ | Planck sabiti (h) J·s |
math.BOLTZMANN |
1.380649×10⁻²³ | Boltzmann sabiti (k) J/K |
math.AVOGADRO |
6.02214076×10²³ | Avogadro sayısı (Nₐ) mol⁻¹ |
math.GAS_CONSTANT |
8.314462618 | Gaz sabiti (R) J/(mol·K) |
math.GRAVITATIONAL |
6.67430×10⁻¹¹ | Çekim sabiti (G) m³/(kg·s²) |
🎯 function Kategorileri
1. Temel Aritmetik
Mutlak değer hesaplar. LLVM fabs intrinsic useır.
İşaret functionu: -1 (negatif), 0 (sıfır), +1 (pozitif)
Maksimum and minimum değer. NaN handling ile güvenli.
Değeri [min_val, max_val] aralığına sınırlar.
Example: Temel Aritmetik
import math
function main() do
// Mutlak değer
yazdır(math.abs(-15.7)) // 15.7
yazdır(math.abs_int(-42)) // 42
// İşaret
yazdır(math.sign(-5.5)) // -1.0
yazdır(math.sign(0.0)) // 0.0
yazdır(math.sign(3.14)) // 1.0
// Max/Min
yazdır(math.max(10.5, 20.3)) // 20.3
yazdır(math.min(-5, 5)) // -5
// Clamp (sınırlama)
yazdır(math.clamp(15, 0, 10)) // 10 (üst sınır)
yazdır(math.clamp(-5, 0, 10)) // 0 (alt sınır)
yazdır(math.clamp(5, 0, 10)) // 5 (aralık in)
end
2. Üs and Kök functionları
Üs alma. pow_int binary exponentiation ile O(log n) hızında.
Karekök, küpkök and n-inci kök. Newton-Raphson veya LLVM intrinsic.
Kare and küp alma. Optimizasyon for özel functionlar.
Hipotenüs: √(a² + b²). Overflow-safe implementasyon.
Example: Üs and Kök
import math
function main() do
// Üs alma
yazdır(math.pow(2.0, 10.0)) // 1024.0
yazdır(math.pow_int(2, 20)) // 1048576 (hızlı)
// Kökler
yazdır(math.sqrt(144.0)) // 12.0
yazdır(math.cbrt(27.0)) // 3.0
yazdır(math.nth_root(256.0, 4)) // 4.0 (4. kök)
// Kare and küp
yazdır(math.kare(5.0)) // 25.0
yazdır(math.küp(3.0)) // 27.0
// Pisagor teoremi
let a = 3.0
let b = 4.0
let c = math.hypot(a, b)
yazdır("Hipotenüs: " + c.yazıya()) // 5.0
// 3D mesafe
let dist = math.hypot3(1.0, 2.0, 2.0)
yazdır("3D mesafe: " + dist.yazıya()) // 3.0
end
3. Trigonometrik functionlar
Sinüs, kosinüs, tanjant. Girdi radyan cinsindendir.
Derece cinsinden trigonometrik functionlar.
Ters trigonometrik functionlar. atan2 tüm kadranları destekler.
Example: Trigonometri
import math
function main() do
// Radyan cinsinden
yazdır(math.sin(0.0)) // 0.0
yazdır(math.cos(0.0)) // 1.0
yazdır(math.tan(math.PI / 4.0)) // 1.0
// Derece cinsinden (daha sezgisel)
yazdır(math.sind(0.0)) // 0.0
yazdır(math.sind(30.0)) // 0.5
yazdır(math.sind(90.0)) // 1.0
yazdır(math.cosd(60.0)) // 0.5
yazdır(math.tand(45.0)) // 1.0
// Ters functionlar
let açı = math.asin(0.5)
yazdır("arcsin(0.5) = " + açı.yazıya()) // π/6 radyan
// atan2 ile açı hesaplama (x,y koordinatından)
let açı2 = math.atan2(1.0, 1.0)
yazdır("atan2(1,1) = " + açı2.yazıya()) // π/4 (45°)
end
4. Logaritma and Üstel functionlar
Üstel functionlar: e^x, 2^x, 10^x. LLVM intrinsic ile optimize.
Logaritma: ln(x), log₂(x), log₁₀(x).
Küçük değerler for hassas: e^x-1, ln(1+x).
Example: Logaritma and Üstel
import math
function main() do
// Üstel functionlar
yazdır(math.exp(1.0)) // e¹ = 2.71828...
yazdır(math.exp2(10.0)) // 2¹⁰ = 1024
yazdır(math.exp10(3.0)) // 10³ = 1000
// Logaritma
yazdır(math.log(math.E)) // ln(e) = 1.0
yazdır(math.log2(1024.0)) // log₂(1024) = 10.0
yazdır(math.log10(1000.0)) // log₁₀(1000) = 3.0
// Küçük değerlerde hassasiyet
let küçük = 1e-10
yazdır(math.log1p(küçük)) // ln(1 + 10⁻¹⁰)
yazdır(math.expm1(küçük)) // e^(10⁻¹⁰) - 1
// pH hesaplama örneği
let H_konsantrasyon = 1e-7 // mol/L
let pH = -math.log10(H_konsantrasyon)
yazdır("pH = " + pH.yazıya()) // pH = 7.0 (nötr)
end
🎓 Gelişmiş Exampleler and Tutoriallar
Tutorial 1: Nümerik Türev Hesaplama
Bir functionun sayısal türevini hesaplayın (merkezi fark yöntemi).
import math
// f'(x) ≈ [f(x+h) - f(x-h)] / (2h)
function sayısal_türev(f: function(ondalık)->ondalık, x: ondalık, h: ondalık) -> ondalık do
let fx_plus_h = f(x + h)
let fx_minus_h = f(x - h)
return (fx_plus_h - fx_minus_h) / (2.0 * h)
end
// Test functionu: f(x) = x²
function f(x: ondalık) -> ondalık do
return x * x
end
function main() do
// f'(x) = 2x for x=3 noktasında türev
let x = 3.0
let h = 1e-5 // Küçük adım
let türev = sayısal_türev(f, x, h)
yazdır("f'(3) sayısal = " + türev.yazıya()) // ~6.0
yazdır("f'(3) analitik = " + (2.0 * x).yazıya()) // 6.0
// Error analizi
let Error = math.abs(türev - 2.0 * x)
yazdır("Error: " + Error.yazıya()) // ~10⁻¹⁰
end
Tutorial 2: Newton-Raphson Kök Bulma
Bir denklemin kökünü bulun: f(x) = x² - 2 = 0 (yani √2)
import math
// Newton-Raphson: x_{n+1} = x_n - f(x_n) / f'(x_n)
function newton_raphson(
f: function(ondalık)->ondalık,
df: function(ondalık)->ondalık,
x0: ondalık,
tolerans: ondalık,
max_iter: tamsayı
) -> ondalık do
let x = x0
for i = 0; i < max_iter; i += 1 do
let fx = f(x)
let dfx = df(x)
if math.abs(fx) < tolerans do
yazdır("Yakınsadı: " + i.yazıya() + " iterasyon")
return x
end
x = x - fx / dfx
end
yazdır("Maksimum iterasyon aşıldı!")
return x
end
// f(x) = x² - 2
function f(x: ondalık) -> ondalık do
return x * x - 2.0
end
// f'(x) = 2x
function df(x: ondalık) -> ondalık do
return 2.0 * x
end
function main() do
let kök = newton_raphson(f, df, 1.0, 1e-10, 100)
yazdır("Bulunan kök: " + kök.yazıya())
yazdır("√2 (referans): " + math.SQRT2.yazıya())
yazdır("Error: " + math.abs(kök - math.SQRT2).yazıya())
end
Tutorial 3: Monte Carlo Pi Hesaplama
Rastgele sayılar usearak π değerini tahmin edin.
import math, random
function monte_carlo_pi(n: tamsayı) -> ondalık do
let içeride = 0
for i = 0; i < n; i += 1 do
// [-1, 1] aralığında rastgele nokta
let x = random.uniform(-1.0, 1.0)
let y = random.uniform(-1.0, 1.0)
// Birim çember in mi?
if x*x + y*y <= 1.0 do
içeride += 1
end
end
// π ≈ 4 * (içerideki noktalar / toplam noktalar)
return 4.0 * içeride.ondalık() / n.ondalık()
end
function main() do
// Farklı Examplelem boyutları
let boyutlar = [100, 1000, 10000, 100000, 1000000]
yazdır("Gerçek π = " + math.PI.yazıya())
yazdır("\nMonte Carlo Tahminleri:")
yazdır("------------------------")
for boyut in boyutlar do
let tahmin = monte_carlo_pi(boyut)
let Error = math.abs(tahmin - math.PI)
let Error_yüzde = (Error / math.PI) * 100.0
yazdır("n=" + boyut.yazıya() + ": π≈" + tahmin.yazıya() +
" (Error: %" + Error_yüzde.yazıya() + ")")
end
end
Tutorial 4: Fourier Serisi Yaklaşımı
Kare dalga functionunu Fourier serisi ile yaklaşık hesaplayın.
import math
// Kare dalga Fourier serisi: f(x) = (4/π) Σ [sin((2k-1)x) / (2k-1)]
function fourier_kare_dalga(x: ondalık, terimler: tamsayı) -> ondalık do
let toplam = 0.0
for k = 1; k <= terimler; k += 1 do
let n = 2 * k - 1
let terim = math.sin(n.ondalık() * x) / n.ondalık()
toplam += terim
end
return (4.0 / math.PI) * toplam
end
function main() do
yazdır("Fourier Kare Dalga Yaklaşımı")
yazdır("================================\n")
// x = π/4 noktasında (yükselen kenar)
let x = math.PI / 4.0
for n_terim = 1; n_terim <= 50; n_terim *= 5 do
let Result = fourier_kare_dalga(x, n_terim)
yazdır(n_terim.yazıya() + " terim: f(π/4) = " + Result.yazıya())
end
// Görselleştirme (basit ASCII)
yazdır("\nGrafik (0 ile 2π arası, 10 terim):")
yazdır("-----------------------------------")
for i = 0; i < 40; i += 1 do
let x_nokta = (i.ondalık() / 40.0) * 2.0 * math.PI
let y = fourier_kare_dalga(x_nokta, 10)
// Y değerini karaktere dönüştür (basitleştirilmiş)
let seviye = ((y + 1.0) / 2.0 * 20.0).tamsayı()
let çizgi = ""
for j = 0; j < seviye; j += 1 do
çizgi += " "
end
çizgi += "*"
yazdır(çizgi)
end
end
⚡ Performans and Optimizasyon
LLVM Intrinsics
Çoğu function LLVM intrinsic'leri useır:
@llvm.fabs.*- Mutlak değer@llvm.sqrt.*- Karekök@llvm.sin.*,@llvm.cos.*- Trigonometri@llvm.exp.*,@llvm.log.*- Üstel/Log@llvm.pow.*- Üs alma
Bu intrinsic'ler donanım talimatlarına (SSE, AVX) derlenir.
Fast-Math Bayrakları
Agresif optimizasyon for:
# Derleme sırasında fast-math etkinleştir
berk-lang compile program.berk --fast-math --release
Fast-math etkinleştirir:
- NaN/Inf kontrollerini atlama
- Associativity yeniden düzenleme
- Reciprocal approximation
- SIMD vectorization
📖 Tam API Referansı
Tüm 111 functionun detaylı listesi for:
← Ana Sayfa | All Modules | English →
BERK v1.0.0 | math modülü | 111 function | 882 lines
end güncelleme: Aralık 2025