Mojito Mesaj tarihi: Mart 18, 2009 Paylaş Mesaj tarihi: Mart 18, 2009 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 fazla paylaşım seçeneği…
ShadowFury Mesaj tarihi: Mart 18, 2009 Paylaş Mesaj tarihi: Mart 18, 2009 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ş Daha fazla paylaşım seçeneği…
Sly-One Mesaj tarihi: Mart 18, 2009 Paylaş Mesaj tarihi: Mart 18, 2009 solve komutu yok muydu matlabde Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
allezz Mesaj tarihi: Mart 26, 2009 Paylaş Mesaj tarihi: Mart 26, 2009 Sly-One said: solve komutu yok muydu matlabde fsolve komutu idi sanırım. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
allezz Mesaj tarihi: Mart 26, 2009 Paylaş Mesaj tarihi: Mart 26, 2009 direk köklerini söylemem gerekirse, >> a = [ 14.5 10 0 -8.997 ] a = 14.5000 10.0000 0 -8.9970 >> roots(a) ans = -0.6820 + 0.6744i -0.6820 - 0.6744i 0.6744 >> Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
allezz Mesaj tarihi: Mart 26, 2009 Paylaş Mesaj tarihi: Mart 26, 2009 shadowfury'nin anlattığı aslında roots.m fonksiyonun temel çalışma biçimi.Aynı biçimde çalışmıyor olabilir ama mantık aynı. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar