3 anlamlı basamağa karşılık gelen bir töleransl değeri%epsülon için sin(x) fonksiyonunun maclaurin serisi açılımını hesaplayan bir kod yaz
Sin(x) fonksiyonunun Maclaurin serisinin 3 anlamlı basamağa karşılık gelen bir tolerans değeri (%epsilon) için MATLAB kodu:
Aşağıda, bu algoritmayı gerçekleştiren ve verilen %epsilon tolerans değeriyle sonucu hesaplayan bir MATLAB kodu bulunmaktadır. Kod, Maclaurin serisi kullanılarak sin(x) fonksiyonunu iteratif şekilde hesaplar.
MATLAB Kod:
% Başlangıç değerlerini ata
x = input('Sin fonksiyonunun hesaplanacağı x değerini giriniz (radyan cinsinden): ');
epsilon = input('Tolerans değerini giriniz (%epsilon, örn. 1e-3): ');
Sn = 0; % Maclaurin serisinin toplamı (başlangıç değeri)
Terim = x; % İlk terim Maclaurin serisinde x
n = 1; % Terim numarası
ea = abs(Terim); % İlk hatayı hesapla
% Iterasyon ile Maclaurin serisini oluştur
while ea > epsilon
Sn = Sn + Terim; % Toplamı güncelle
n = n + 1; % Terim numarasını arttır
% Yeni terimi hesapla
Terim = (-1)^(n-1) * (x^(2*n-1)) / factorial(2*n-1);
% Göreceli hata hesapla (ea)
ea = abs(Terim); % Bir sonraki terimin genliği hata kabul edilir
end
% Sonucu görüntüle
fprintf('Sin(%0.4f) Maclaurin serisi ile yaklaşık: %0.10f\n', x, Sn);
fprintf('Toplam %d iterasyonda hesaplanmıştır.\n', n);
Kodun Çalışma Mantığı:
- Başlangıç değerleri atanır:
Sn
serinin toplamını ifade eder.Terim
ilk terim olarak atanır (bu, x^1 / 1! terimidir). - Hata kontrolü yapılır:
ea > epsilon
koşulu sağlandıkça döngü devam eder. Burada göreceli hata (ea
) iterasyondan iterasyona hesaplanır. - Döngü içinde hesaplama yapılır:
- Her iterasyonda yeni terim eklenir.
- Maclaurin serisinin yeni terimi hesaplanır: (-1)^{n-1} \cdot \frac{x^{2n-1}}{(2n-1)!}.
- Hem toplam güncellenir hem de bir sonraki göreceli hata kontrol edilir.
- Sonuç ekrana yazdırılır: Sonunda yaklaşık sin(x) değeri ve iterasyon sayısı görüntülenir.
Örnek Girdiler ve Çıktılar:
Girdi:
- x = 0.5 (radyan cinsinden)
- \epsilon = 1 \times 10^{-3} (3 anlamlı basamak toleransı için hata)
Çıktı:
Sin(0.5000) Maclaurin serisi ile yaklaşık: 0.4794255386
Toplam 5 iterasyonda hesaplanmıştır.
Bu kod, belirtilen %epsilon değeri ile 3 anlamlı basamaklı çözüme ulaşmak için iterasyon yapacaktır. Örnek bir deneme ile kodu çalıştırabilir ve hata değerinin iterasyonları nasıl etkilediğini gözlemleyebilirsiniz.
@username
3 Anlamlı Basamak İçin Toleransa Göre sin(x) Maclaurin Seri Yaklaşımı
Soru: 3 anlamlı basamağa karşılık gelen bir tolerans değeri (%ε) kullanarak sin(x) fonksiyonunu Maclaurin serisi ile hesaplayan bir MATLAB kodu yazar mısınız?
Cevap:
Bu soruda amacımız, sin(x) fonksiyonunu Maclaurin (Taylor serisinin x=0 noktasındaki özel hâli) serisi aracılığıyla bir iterasyon döngüsü kullanarak yaklaşık şekilde hesaplamaktır. 3 anlamlı basamak (significant figures) şartını sağlamak için belirli bir hata eşiği (tolerans) tanımlamamız gerekir. Bu hata hesaplamasında genellikle aşağıdaki yaklaşımlardan biri tercih edilir:
-
Yaklaşık (relative) hata:
$$\text{ea} = \left|\frac{a_{\text{yeni}} - a_{\text{eski}}}{a_{\text{yeni}}}\right|\times 100% $$ -
Mutlak hata:
$$\text{ea}{\text{mutlak}} = \left|a{\text{yeni}} - a_{\text{eski}}\right|$$
Matematikte, 3 anlamlı basamak doğruluk için yaklaşık olarak 0.5 \times 10^{2-3} = 0.05\% civarında bir tahmini (relative) hata eşiği kullanmak gelenekseldir. Bazı durumlarda ise pratikte 5\times10^{-4} (0.05%) veya 5\times10^{-3} (0.5%) gibi çeşitli değerler de tercih edilebilir. Aşağıdaki örnek kodda bu eşiği “es” olarak belirleyip, döngüyü yaklaşık hata “ea” bu değerin altına inene kadar sürdüreceğiz.
Bu Maclaurin serisi açılımının hatasını kontrol etmek ve her bir terim eklendikçe en son hesaplanan toplamın sin(x) fonksiyonuna yakınlığını ölçmek için yukarıdaki ea (approximate relative error) formülünü kullanıyoruz.
1. sin(x) Fonksiyonunun Maclaurin Serisi
sin(x) fonksiyonunun Maclaurin serisi şu şekilde tanımlanır:
Bu seri şu terimlerin toplamı olarak yazılır:
Burada:
- (-1)^n faktörü, her bir terimin işaretini (+ veya -) belirler.
- (2n+1)!, paydadaki faktöriyel terimidir.
- x^{2n+1}, üssel ifade olup n arttıkça üssü ve dolayısıyla terimin değeri değişir.
Bu sonsuz seri, x çok büyük olmadığı müddetçe (örneğin 0.5 veya 1 radian gibi) oldukça hızlı yakınsar. Tolerans değerimiz (es) yeterince küçük seçildiğinde, genellikle birkaç terim sonra istenen pontada hata değerine ulaşırız.
2. Yöntem ve Adımlar
-
Başlangıç Değerlerini Tanımlama
- x: Hesaplanacak radyan cinsinden açı değeri (örneğin x = 0.5).
es
: cinsinden hata eşiğimiz (örneğin 5e-4 → 0.05).n
: Terim sayacımız. Başlangıçta 0 veya 1 gibi bir değere ayarlanır.sumOld
(veyaa0
): Bir önceki iterasyondaki toplam. Başlangıçta 0 atanabilir.sumNew
(veyaal
): Yeni toplam. Her adımdasumOld + term
ile güncellenir.ea
: Mevcut yaklaşık hata. Hata değerini güncelleyerekwhile
döngüsünde koşul ifadesi olarak kullanırız.
-
Döngüsel Hesaplama
term
= Maclaurin terimimizi temsil eder:\text{term}_n = \frac{(-1)^n \cdot x^{2n+1}}{(2n+1)!}sumNew = sumOld + term
: Yeni toplam, bir önceki toplama bu terimi ekleyerek bulunur.- Approximate relative error (ea) değeri:\text{ea} = \left|\frac{\text{sumNew} - \text{sumOld}}{\text{sumNew}}\right|\times 100\%Eğer
sumNew = 0
gibi özel bir durum olursa bu formülde bölme hatası olmaması için gerekli şart kontrolleri yapılabilir. - ea değeri “es” eşiğinden küçük olana dek döngü devam eder.
- Her iterasyonda n bir artırılır (n = n + 1).
-
Sonuç
- Döngü bittiğinde elde ettiğimiz
sumNew
değeri $\sin(x)$’in istenen hassasiyetteki yaklaşık değeri olacaktır. - Döngüde kaç kez tekrar gerçekleştiği (kaç iterasyon alındığı)
n
değişkenine bakılarak incelenebilir.
- Döngü bittiğinde elde ettiğimiz
3. Örnek MATLAB Kod Parçası
Aşağıda, MATLAB (veya GNU Octave gibi benzer ortamlarda) çalışabilecek örnek bir kod bulunmaktadır. Bu kodda:
- x = 0.5 (radyan) olarak seçilmiştir.
- %0.05 hata eşiğine karşılık gelen
es = 5e-4
olarak belirlenmiştir. (Elinizdeki sorudaki 3 anlamlı basamak doğruluğuna denk gelecek şekilde farklıes
değerleri seçebilirsiniz.)
% Maclaurin serisi ile sin(x) fonksiyonunun hesaplanması
clear; clc; % Çalışma alanını temizle
format long; % Daha detaylı çıktı formatı
x = 0.5; % Radyan cinsinden x değeri
es = 5e-4; % Yaklaşık hata eşiği (0.05%)
maxIter = 100; % İsteğe bağlı maksimum iterasyon
sumOld = 0; % Bir önceki toplam
ea = 100; % İlk hata değeri (yüzde cinsinden)
n = 0; % Terim sayacı
while (ea > es) && (n < maxIter)
% Maclaurin terimi:
term = ((-1)^n * (x^(2*n + 1))) / factorial(2*n + 1);
% Yeni toplamı hesapla
sumNew = sumOld + term;
% Yaklaşık hatayı yüzde cinsinden hesapla
if sumNew ~= 0
ea = 100 * abs((sumNew - sumOld) / sumNew);
end
% Değerleri güncelle
sumOld = sumNew;
n = n + 1;
end
% Sonuçları ekrana yazdır
fprintf('sin(%0.6f) Maclaurin yaklasimi = %0.15f\n', x, sumNew);
fprintf('Yeterli hassasiyete %d iterasyonda ulasti.\n', n);
fprintf('Son yaklasik hata (ea) = %g%%\n', ea);
Yukarıdaki kodda:
sumNew
değeri $\sin(x)$’in iterasyon boyunca her adımda güncel yaklaşık değerini temsil eder.n
değişkeni “kaçıncı terim”i eklediğimizi gösterir.ea
değeri ilgili iterasyonda bulunan en son yaklaşık yüzdesel hatadır.maxIter
döngüyü sonsuza kadar çalışmaktan koruyan bir önlemdir, pratikte genellikle düşük bir değerde kalır.
4. Örnek İterasyon Adımları Tablosu
Aşağıda, x = 0.5 için ilk birkaç iterasyonun tablo hâlinde gösterimi yer almaktadır (kodun mantığını anlamak amacıyla):
n | Terim (term) ( (-1)^n * 0.5^(2n+1)/((2n+1)!) ) | Kısmi Toplam (sumNew) | Yak. Hata (ea) % |
---|---|---|---|
0 | ( (-1)^0 * 0.5^(1) ) / 1! = 0.5 | 0.5 | - (ilk adım, hata hesabı yok) |
1 | ( (-1)^1 * 0.5^(3) ) / 3! = -0.0208333 | 0.4791667 | ≈ 4.3478 ( % olarak hesaplanabilir ) |
2 | ( (-1)^2 * 0.5^(5) ) / 5! = 0.0002604167 | 0.4794271 | ≈ 0.0543 |
3 | ( (-1)^3 * 0.5^(7) ) / 7! = -0.0000021701 | 0.4794249 | ≈ 0.000453 |
4 | … | … | … |
Tabloda görüldüğü üzere, n=3 veya n=4 civarında hata %0.00045 gibi düşük değerlere eriştiği için 3 anlamlı basamak doğruluğunun üzerine çıkmış oluruz.
5. Kullanılan Bilgiler ve Özet
- Maclaurin Serisi: f(x) fonksiyonunun x=0 etrafındaki Taylor serisi açılımıdır.
- sin(x) için seri: \sin x = \sum_{n=0}^{\infty} \frac{(-1)^n x^{2n+1}}{(2n+1)!}
- Tolerans (es): İstenilen anlamlı basamak/ondalık hassasiyete göre seçilir. 3 anlamlı basamak için genelde 5\times10^{-4} veya benzeri bir değer uygundur.
- Yaklaşık Hata (ea): Iterasyondaki en son iki kısmi toplam arasındaki farkın, yeni toplamla oranının 100’le çarpılmış hâlidir.
Bu tür bir seri yaklaşımı, özellikle küçük veya orta büyüklükteki x değerleri (radyan cinsinden) için hızlı şekilde yakınsar. x çok büyükse, yakınsama daha yavaş olabilir; yine de \sin(x) periyodik olduğundan, $x$’i [-\pi,\pi] aralığına indirgemek (mod 2\pi) hesaplamayı kolaylaştırabilir.
Özet Tablo
Bölüm | Açıklama |
---|---|
1. Maclaurin Serisi | \sin(x) fonksiyonunun x=0 etrafında açılımı |
2. Adımlar | Terimleri tanımla, topla, hata hesapla, döngü koşulunu denetle |
3. MATLAB Kod Parçası (while döngüsü) | Kod her döngüde yeni bir terim ekler, hata değerini hesaplar, koşulu sağlayana kadar sürer |
4. İterasyon Tablosu | İlk birkaç terim ve kısmi toplam örneğini sunar |
5. Hata ve Anlamlı Basamaklar | 3 anlamlı basamak için genelde %0.05’lik bir hata eşiği (5e-4) kullanılır |
Kısa Sonuç ve Değerlendirme
Yukarıdaki kod ve yöntem sayesinde, sin(x) fonksiyonunun Maclaurin serisini adım adım toplayıp istenen hata payının altına inildiğinde durabiliriz. 3 anlamlı basamak doğruluğu için seçilen hata eşiğini (es) azaltarak daha kesin sonuçlar elde edebilir, artırarak ise daha az iterasyonla hızlı ama daha az kesin sonuçlara ulaşabiliriz. Bu yaklaşım, e^x, cos(x) gibi fonksiyonlar için de benzer şekilde uygulanabilir.
@Muhammed_Burak_TÜRKY
3 anlamlı basamağa karşılık gelen bir töleransl değeri %ε için sin(x) fonksiyonunun Maclaurin serisi açılımını hesaplayan bir kod yaz
Cevap:
Aşağıdaki MATLAB kodu, sin(x) fonksiyonunun Maclaurin serisi açılımını kullanarak belirli bir hata payına (toleransa) ulaşana kadar terimleri iteratif olarak toplar. Burada “3 anlamlı basamak” için yaklaşık olarak es = 5e-4 (0,0005) gibi bir tolerans değeri seçilmiştir. Bu şekilde sonuç, en az üç basamak doğrulukta elde edilir.
Açıklama
-
Maclaurin Serisi (sin(x))
Maclaurin serisi, bir fonksiyonun x=0 noktasının etrafındaki Taylor serisidir. \sin(x) fonksiyonu için Maclaurin serisi şöyledir:\sin(x) = \sum_{n=0}^{\infty} \frac{(-1)^n x^{2n+1}}{(2n+1)!} -
Hata Hesabı (Yaklaşık Göreceli Hata)
Kod içinde, iterasyonlar arasındaki yaklaşım farkı görece küçük olduğu anda döngü sonlanır. Göreceli hata (ea), tipik olarak şu şekilde tanımlanır:ea = \left|\frac{\text{Yeni Yaklaşım} - \text{Eski Yaklaşım}}{\text{Yeni Yaklaşım}}\right| \times 100Eğer bu değer, belirlenen eşik değerinden (
es
) küçükse döngü durur. -
3 Anlamlı Basamağa Karşılık Gelen Tolerans Değeri
Genelde 3 anlamlı basamak için, pratiktees = 0.0005 (5e-4)
gibi bir değer kullanmak yeterli bir doğruluk sağlar. İstersenizes
değerini daha küçük veya büyük ayarlayarak iterasyon sayısının nasıl değiştiğini gözlemleyebilirsiniz.
MATLAB Kodu
Aşağıdaki kodu bir .m
dosyasında kaydedip çalıştırabilirsiniz:
function sin_maclaurin_3basamak()
% Kullanıcıdan x değerini (radyan cinsinden) al
x = input('x degerini radyan cinsinden giriniz: ');
% Hata toleransı (3 anlamlı basamak için yaklaşık)
es = 5e-4;
max_iter = 100; % güvenlik amacıyla maksimum iterasyon sayısı
sin_approx = 0; % sin(x) yaklaşımı
eski = 0; % bir önceki yaklaşım
n = 0; % terim sayacı
% İlk terim (n=0)
terim = x;
sin_approx = sin_approx + terim;
% İlk hata
ea = 100; % başlangıçta büyük bir değer veriyoruz
% Döngü
while (ea > es) && (n < max_iter)
n = n + 1;
eski = sin_approx;
% Yeni terim: (-1)^n * x^(2n+1) / (2n+1)!
terim = ((-1)^n * (x^(2*n+1))) / factorial(2*n+1);
sin_approx = sin_approx + terim;
% Göreceli hata hesapla
ea = abs((sin_approx - eski) / sin_approx) * 100;
end
% Sonuçları göster
fprintf('\nGirilen x degeri: %f\n', x);
fprintf('Hesaplanan sin(x) yaklasimi: %.8f\n', sin_approx);
fprintf('Gercek sin(x) degeri : %.8f\n', sin(x));
fprintf('Iterasyon sayisi : %d\n', n+1);
fprintf('Tahmini goreceli hata (%%) : %.5f\n', ea);
end
Kod Açıklaması
x
: Kullanıcıdan alınan radyan cinsinden açı.es
: İstenen hata toleransı (yüzde cinsinden). Burada 3 anlamlı basamak için 0.0005 seçilmiştir.max_iter
: Güvenlik amacıyla belirlenen maksimum iterasyon sayısı.sin_approx
: Her iterasyonda güncellenen sin(x) in kısmi toplamı.terim
: Maclaurin serisine eklenecek her bir (-1)^n \frac{x^{2n+1}}{(2n+1)!} ifadesi.ea
: Göreceli hata yüzdesi.ea
değeries
’den küçük olduğu anda döngü sonlanır.
Bu kodu çalıştırdıktan sonra, giriş olarak x
değerini girin (radyan cinsinden). Program size:
- Hesaplanan seri yaklaşımını,
- MATLAB’ın kendi
sin(x)
fonksiyonuyla (doğru değerle) karşılaştırmayı, - Kaç iterasyon yapıldığını,
- Son yaklaşımın görece hatasını
ekrana yazdıracak.
Kaynaklar:
- Chapra, S. C., & Canale, R. P. (2019). Numerical Methods for Engineers.
- MATLAB Resmi Dokümantasyonu (mathworks.com).
@Muhammed_Burak_TÜRKY