Matlabsorusuuyg2


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ığı:

  1. Başlangıç değerleri atanır: Sn serinin toplamını ifade eder. Terim ilk terim olarak atanır (bu, x^1 / 1! terimidir).
  2. 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.
  3. 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.
  4. 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:

  1. Yaklaşık (relative) hata:
    $$\text{ea} = \left|\frac{a_{\text{yeni}} - a_{\text{eski}}}{a_{\text{yeni}}}\right|\times 100% $$

  2. 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:

\sin(x) \;=\; \sum_{n=0}^{\infty} \frac{(-1)^n\, x^{2n+1}}{(2n+1)!}

Bu seri şu terimlerin toplamı olarak yazılır:

\sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \dots

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

  1. 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 (veya a0): Bir önceki iterasyondaki toplam. Başlangıçta 0 atanabilir.
    • sumNew (veya al): Yeni toplam. Her adımda sumOld + term ile güncellenir.
    • ea: Mevcut yaklaşık hata. Hata değerini güncelleyerek while döngüsünde koşul ifadesi olarak kullanırız.
  2. 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).
  3. 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.

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

  1. 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)!}
  2. 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 100

    Eğer bu değer, belirlenen eşik değerinden (es) küçükse döngü durur.

  3. 3 Anlamlı Basamağa Karşılık Gelen Tolerans Değeri
    Genelde 3 anlamlı basamak için, pratikte es = 0.0005 (5e-4) gibi bir değer kullanmak yeterli bir doğruluk sağlar. İsterseniz es 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ğeri es’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:

  1. Hesaplanan seri yaklaşımını,
  2. MATLAB’ın kendi sin(x) fonksiyonuyla (doğru değerle) karşılaştırmayı,
  3. Kaç iterasyon yapıldığını,
  4. 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