Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Matlab da denklem cozumu...


Mojito

Öne çıkan mesajlar

Selam arkadaslar matlab la ilgili pek bı bılgım yok derste azıcık yapıyorduk ama ıstedıgım denklemı evde cozemıyorum soyle bır denklem var;

10.X (ussu 2) + 14,5.X (ussu 3) - 8,997=0

Bunu nasıl matlabde cozerbılırız arkadaslar yardım edersenız cok sevınırım
Link to comment
Sosyal ağlarda paylaş

Daha kolay yolu varmıdır bilmiyorum ama ben bisection ı biliyorum bi tek. Ama çözmek için 2 tane function file oluşturman gerekiyo bu yöntemle(1 tanesi problem, diğeri bisection)

1)Fonksiyonumuzu basit bir m file da kaydediyoruz. bisection.m dosyamda fonksiyonu "func" olarak yazdığım için bu m file ın ismi func.m olucak.

func.m

function y=func(x)
y=10*x^2+14.5*x^3-8.997;
end



Bu fonksiyonu bisection adlı fonksiyonumuzda kullanıcaz, kaydediyoruz.

2)Bisection file ımızı oluşturuyoruz. Gerçi bunun hazırı da var çok fazla miktarda, sağda solda bulabilirsin ama çok komplike geliyo onlar bana. Basit bi tane vardı önceden yaptığım, onu kullandım.

bisection.m

function kok=bisection(a,b,tol)
while abs(b-a)>tol
kok=(a+b)/2;
if func(b)*func(kok)>0
b=kok;
else
a=kok;
end
end
end


Bisection ın mantığı, 2 tane değer girip(a ve b) ortadaki kökü bulmak. tol de tolerans, yaptığımız işlemin ne kadar hassas olduğunu belirler, küçük olmasında fayda var(0.001 genelde yeter de artar bile). sürekli (a+b)/2 yi kök olarak kabul edip gerçek köke yaklaşmaya çalışıyo işte.
bisection yöntemi b-a nın mutlak değeri toleranstan küçük hale gelene kadar denemeye devam eder, küçük hale geldiğinde döngüyü bozup cevabı verir.

Neyse, bu da bitti. Şimdi a ve b değerlerimize karar vermemiz lazım. Bu soru için önemli değil, kafanı karıştırmak istemiyosan a ve b yi -100,100 bile verebilirsin çünkü tek kökü var(x eksenini tek noktada kesiyo)
yani cevap için x=bisection(-100,100,0.001) yazabilirsin.


ancak birden fazla kökü olan denklemler için, ya da "ben bunun tek kökü olduğunu nerden bilicem ya?" diyosan plot(x,y) komutuyla grafik çizip 0 ı kestiği yerleri belirlemen lazım.

x=linspace(-1,1,100);
y=10*x.^2+14.5*x.^3-8.997;
plot(x,y)
grid

x i -1 ve 1 arasında aldım çünkü fonksiyon x eksenini bu aralıkta kesiyo. ilk başta denerken daha büyük aralıklar alman daha iyi olur, sonradan daha net görmek için daraltırsın.

Plota bakıyoruz, 0 ı 0.6 ve 0.8 arasında kesmiş, a ve b değerlerimiz bunlar o zaman. matlabı uğraştırmamak adına yakın değerler vermek en doğrusu tabii:P
x=bisection(0.6,0.8,0.001)
x=0.6742


Aynı şekilde başka problemler çözmek istiyosan func.m dosyanı değiştirip yerine yeni fonksiyonu yazman yeterli.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...