İnsan bir problemi düşünür ve olabilirliğini teorik olarak ispatlarsa o problem eninde sonunda insan hayatına kazandırılır.

5 Mayıs 2012 Cumartesi

Newton-Raphson Metodu İle Doğrusal Olmayan Denklem Çözümü


Bu yönten, basit iterasyon yöntemiyle benzerlik göstermektedir. Bu yöntem ile f(x)=0 denkleminin yaklaşık köklerini  bulmak için x(n+1)=f(x(n))/f '(x(n)) ifadesi kullanılmaktadır. Newton-Raphson yöntemiyle hesaplama yapmak için x(0) ve E(epsilon) değerlerinin bilinmesi gerekmektedir.

Aşağıda f= x^3-3*x^2+5*x-exp(-x^2) fonksiyonunun yaklaşık köklerinin  Newton-Raphson yöntemiyle matlab kullanılarak hesaplanması ifade edilmektedir.

Program çıktısı:



function f= fnewton(x)                  //fonksiyon ifade ediliyor.
f= x^3-3*x^2+5*x-exp(-x^2);
function f= fnewton_turev(x)       //fonksiyonun türevi ifade ediliyor.
f= 3*x^2-6*x+5+2*x*exp(-x^2);

maxiter: tekrarlanacak maximum itarasyon sayısı.


fark=0.000001; epsilon=0.00001; maxiter=10; x0=1;
for say=1:maxiter
 % aşağıdaki satırda türevin sıfır olup olmadığı kontrol ediliyor
    y=fnewton_turev(x0);
     if abs(y)<0.0001
        disp('türev sıfıra çok yakın,algoritma durduruluyor')
        break,end
     kok=x0-fnewton(x0)/y;
    hata=abs(kok-x0);
    hatatek=2*hata/(abs(kok)+fark);
    x0=kok;
    w=fnewton(x0);
    if (hata<fark)|(hatatek<fark)|(abs(w)<epsilon)
        break,end
end
if say==maxiter
   disp('maxiter aşıldığı için iterasyon durduruldu')
   break
   end
disp('aranilan kök değeri')
kok
disp('bulunan kök değeri g(x) fonksiyonunu w kadar hata ile sağlıyor')
w
disp('iterasyon sayisi')
say



4 Mayıs 2012 Cuma

Basit İterasyon Yöntemi

Arkadaşlar sizlere denklemlerin yaklaşık çözüm yöntemlerinden; temel ve basit yöntem olan basit iterasyon yönteminden bahsetmek istiyorum:

 f(x)=0 olan denklemin E mutlak hatasıyla yaklaşık çözümlerinin bulunabilmesi için verilen denklemin
 f(x)=x-h(x)=0 şekline dolayısıyla x-h(x)=0 veya x=h(x) şekline dönüştürülür. Burada h(x) sıradan bir fonksiyon olmayacaktır. h(x) fonksiyonunun birinci türevinin mutlak değerine  verilen x(0) değerinin karşılığı 1 den küçük olmalıdır, aksi taktirde f(x) fonksiyonundan x' i ifade eden başka bir fonksiyon ifadesi çekilir.
x(n)=h(x(n))=x(n+1)
Bu yöntemle verilen denklemin yaklaşık çözümünün bulunabilmesi için x(0) ve E değerlerinin verilmesi gerekmektedir.

Basit iterasyon yöntemi teorik olarak bu şekil de ifade edilebilir. Aşağıda basit iterasyon  yöntemiyle C# da yapılan denklem çözümü bulunmaktadır.





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

//Recep Karatas
//10.03.2012
namespace basit_iterasyon_yöntemi
{
    public partial class Form1 : Form
    {
        double denklem, b,a, sonuc,r,p,c;
        double x;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "")
            {
             
                MessageBox.Show("Verileri Girmelisiniz...!");
            }
            else
            {


                int i = 0;
                x = Convert.ToDouble(textBox3.Text);
                b = Convert.ToDouble(textBox2.Text);
                r = Convert.ToDouble(textBox1.Text);
                p = Convert.ToDouble(textBox4.Text);
                c = Convert.ToDouble(textBox5.Text);
            birinci:
                {
                 
                    denklem = r * x * x + p * x + c;
                    sonuc = denklem;


                    a = Math.Abs(sonuc - x);
                    listBox1.Items.Add("X" + i + "=" + x);
                    i = i + 1;
                    listBox2.Items.Add("E =" + a);
                }
                if (b >= a)
                {

                    label4.Text = Convert.ToString("Sonuç=" + "X" + i + "=" + sonuc);
                    listBox1.Items.Add("X" + i + "=" + sonuc);

                }
                else
                {
                    x = sonuc;

                    goto birinci;
                }
             
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
         
     
         
            this.Text = "Basit İterasyon Yöntemi";
         
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            listBox1.Items.Clear();
            listBox2.Items.Clear();
         
        }
                     
                   
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            linkLabel1.LinkVisited = true;
            System.Diagnostics.Process.Start("http://recepkaratas.blogspot.com/");
        }
 
    }
}