[]
Secant method matlab
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)
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 (11.01.16 21:19:41)
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 (11.01.16 21:39:20)
Çü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.
(((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 (11.01.16 21:42:45)
@gkn peki nasıl bir tanımlama yapabilirim? Döngü dışında mı tanımlamalıyım fonksiyonu?
- Take it away honey (11.01.16 21:46:11)
initial value'lar doğru mu? Ben farklı bi değerle denedim. Formül çalışıyor.
- gkn (11.01.16 22:12:16)
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)
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 (11.01.16 22:15:12)
1