Selam duyurunun mühendisleri matlabde secant methodu ile kök bulmam gerekiyor ancak kodu yazdığım da NaN diyor nerde hata yapıyorum acaba?


clear all;
clc;
x(1)=-4;
x(2)=8;
tol=0.01;
error=((x(2)-x(1))/x(2));
for i=2:100
x(i+1)=x(i)-(((x(i)^2-4*x(i)-12)*(x(i-1)-x(i)))/(((x(i-1)^2-4*x(i-1)-12))-(x(i)^2-4*x(i)-12)));
error=abs((x(i+1)-x(i))/x(i+1))*100;
if error<tol
break
end
end
root=x(i+1)

 

sıfıra bölme hatası veriyor, bi formülü kontrol eder misin? ha bi de x değerlerini dışarıdan girmeyi denesen?

indescribable

Soru aslında şu f(x)=x^2-4*x-12 fonksiyonunun iki kökü var 6 ve -2. Initial value ile bunları bulmaya çalışıyorum. Hatayı da bulamadım ki ya.

Take it away honey

Çünkü for döngüsüne girer girmez, payda sıfır oluyor.
(((x(i-1)^2-4*x(i-1)-12))-(x(i)^2-4*x(i)-12)) yani bu sıfır oluyor.

o yüzden x(i+1) infinite oluyor. Break yapıp çıkıyor for döngüsünden.

gkn

@gkn peki nasıl bir tanımlama yapabilirim? Döngü dışında mı tanımlamalıyım fonksiyonu?

Take it away honey

initial value'lar doğru mu? Ben farklı bi değerle denedim. Formül çalışıyor.

gkn

Ayrıca o formüllü satır çok kafa karıştırır, aşağıdaki gibi yazabilirsin. Bir de error dediğin hesaplamayı başka bi dokümanda "error=abs((x(i+1)-x(i)));" olarak gördüm o yüzden öyle yazdım.


x(1)=-4;
x(2)=10;
tol=0.01;
f = @(x) x^2-4*x-12;
for i=2:100
x(i+1)=x(i)-f(x(i))*(x(i)-x(i-1))/(f(x(i))-f(x(i-1)));
error=abs((x(i+1)-x(i)));
if error<tol
break
end
end
root=x(i+1)

gkn
1

mobil görünümden çık