




Fortran ( 3. Dereceden Denklemin Köklerini Bulan Algoritma ) Yardım
-
arkadaslar konu başlıgı gayet acık yardımlarınızı beklemekteym :))
-
hocam matlab yada microsoft matematik 4.0 var onlara baksana belki yardımcı olur
düzeltme:algoritma yazmıssın pardon -
skm bu dersi 1.sınıfta kamıştım :|
-
üstadım ben geçtm de sevglm mat okuyo fen edb de onlara harbıden bzden ( makıne muh ) agır gosterıyolarmııs
-
ilerde bir işede yaramaz çalışdığına değmez kopyayla geçsin ;)
edit:
2.dereceden buldum ama 3. dereceden yok be dostum anlasam yapardım ama ben kopya çektim
kız anlıyosa az çok bunu editlesin 3.dereceye göre mantık aynıdır zaten
Kod: ! ---------------------------------------------------
! Solve Ax^2 + Bx + C = 0 given B*B-4*A*C >= 0
! Now, we are able to detect complex roots and
! repeated roots.
! ---------------------------------------------------
PROGRAM QuadraticEquation
IMPLICIT NONE
REAL :: a, b, c
REAL :: d
REAL :: root1, root2
! read in the coefficients a, b and c
READ(*,*) a, b, c
WRITE(*,*) 'a = ', a
WRITE(*,*) 'b = ', b
WRITE(*,*) 'c = ', c
WRITE(*,*)
! compute the discriminant d
d = b*b - 4.0*a*c
IF (d > 0.0) THEN ! distinct roots?
d = SQRT(d)
root1 = (-b + d)/(2.0*a) ! first root
root2 = (-b - d)/(2.0*a) ! second root
WRITE(*,*) 'Roots are ', root1, ' and ', root2
ELSE
IF (d == 0.0) THEN ! repeated roots?
WRITE(*,*) 'The repeated root is ', -b/(2.0*a)
ELSE ! complex roots
WRITE(*,*) 'There is no real roots!'
WRITE(*,*) 'Discriminant = ', d
END IF
END IF
END PROGRAM QuadraticEquation -
ikinci dereceden kökleri bulan verdiğin kodlarla 3. dereceden'in hiçbir alakası yok.
3. dereceden denklemler zaten formülle çözülebilse, bu kadar uğraştırıcı olmazdı :)
3. dereceden nasıl çözdürürsün? bir sınır verirsin programa
for i 1den 100'e kadar
i'yi yerine koysun, denklem misal x^3+x^2+x^1=0 mı? i'yi koydugunda, sıfıra çok yakın bişey çıkıyorsa kabul edersin çözümü
if sonuç<0.00001 gibi misal. hata payını kendin düşünceksin
-
dediğim gibi müdür ben hiç anlamıyorum bu dilden anlasam geçerdim..
x^1 xe eşit zaten ve 3.derecede +d diye bir sayı olmalı. formül ile çözüm yaptırabilirsin 3.dereceden 2.dereceye dönüşümler var ancak yazarken o mantığı otutturmak sıkıntı işte -
Demek istediğin problem denklemin x^3+2 x^2-x-2 olsun. Deneme yanılmayla 3 kökü bulunabilcek bir denklem var sayalım ilk kökünü buldun (x-1) bu noktada yapman gereken ilk denklemini x-1 e böldürmek olucak. Ondan sonra yapacağın arkadaşın verdiği diskriminant yöntemi. Yani
3 bilinmeyenli denklemi al
i değerini -100 + 100 aralığında integer ile sonuç 0 çıkıyor mu bak. Arkadaşın dediğinin aksine tam 0 çıkıyor mu diye bak tam bölüm arıyoruz çünkü integer alırsan float lardaki gibi 0,000001 hata payı uğraşmazsın zaten.
Eğer 0 çıktıysa -> i değerini root 1 e eşitle yada yazdır direk 1 kök olarak sen bilirsin.
Asıl problem buradan sonra iki bilinmeyenli denklemi elde etmede,
O da (ax^3 +bx^2 +cx +d )yi (x+n )e bölebilmek ve benim aklıma şuan hiçbirşey gelmedi bununla ilgili o yüzden edit için şurayı aldım
-----------
----------
buradan elde ettiğim ux^2+üx+ç yi de arkadaşın verdiği programla köklerine ayırıyorsun. Böylece daha düzenli bir (x-3)(x-0,423212)(2x+ 32,222) gibi yazdırabiliyorsun.
-------------------------------------------------------------------------------------------------------------
Lakin i yi - long intten + long inte artık sınır rakamı bilmiyorum . Yaparsın i++ yapıp arttırarak deneyip 0 a yakın olanları yazdırırsın daha abzürd çıkar ama çıkar ennayetinde..
-
anubisx bunu yazdı:
-----------------------------Demek istediğin problem denklemin x^3+2 x^2-x-2 olsun. Deneme yanılmayla 3 kökü bulunabilcek bir denklem var sayalım ilk kökünü buldun (x-1) bu noktada yapman gereken ilk denklemini x-1 e böldürmek olucak. Ondan sonra yapacağın arkadaşın verdiği diskriminant yöntemi. Yani
3 bilinmeyenli denklemi al
i değerini -100 + 100 aralığında integer ile sonuç 0 çıkıyor mu bak. Arkadaşın dediğinin aksine tam 0 çıkıyor mu diye bak tam bölüm arıyoruz çünkü integer alırsan float lardaki gibi 0,000001 hata payı uğraşmazsın zaten.
Eğer 0 çıktıysa -> i değerini root 1 e eşitle yada yazdır direk 1 kök olarak sen bilirsin.
Asıl problem buradan sonra iki bilinmeyenli denklemi elde etmede,
O da (ax^3 +bx^2 +cx +d )yi (x+n )e bölebilmek ve benim aklıma şuan hiçbirşey gelmedi bununla ilgili o yüzden edit için şurayı aldım
-----------
----------
buradan elde ettiğim ux^2+üx+ç yi de arkadaşın verdiği programla köklerine ayırıyorsun. Böylece daha düzenli bir (x-3)(x-0,423212)(2x+ 32,222) gibi yazdırabiliyorsun.
-------------------------------------------------------------------------------------------------------------
Lakin i yi - long intten + long inte artık sınır rakamı bilmiyorum . Yaparsın i++ yapıp arttırarak deneyip 0 a yakın olanları yazdırırsın daha abzürd çıkar ama çıkar ennayetinde..
-----------------------------iyide olaya illede öss manrığı ile bakmamak lazım
kökler tam sayı olacak diye bir kaide yok
wikipedia da böyle bişi var ama :D
bunları yazma uğraşma diyede böyle bişiler buldum ama :D
x1 = -b/(3*a) - (2^(1/3)*(-b^2 + 3*a*c))/(3*a*(-2*b^3 + 9*a*b*c - 27*a^2*d + Sqrt[4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2])^(1/3)) + (-2*b^3 + 9*a*b*c - 27*a^2*d + Sqrt[4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2])^(1/3)/(3*2^(1/3)*a)
x2 = -b/(3*a) + ((1 + i*Sqrt[3])*(-b^2 + 3*a*c))/(3*2^(2/3)*a*(-2*b^3 + 9*a*b*c - 27*a^2*d + Sqrt[4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2])^(1/3)) - (1 - i*Sqrt[3])*(-2*b^3 + 9*a*b*c - 27*a^2*d + Sqrt[4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2])^(1/3)/(6*2^(1/3)*a)
x3 = -b/(3*a) + ((1 - i*Sqrt[3])*(-b^2 + 3*a*c))/(3*2^(2/3)*a*(-2*b^3 + 9*a*b*c - 27*a^2*d + Sqrt[4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2])^(1/3)) - (1 + i*Sqrt[3])*(-2*b^3 + 9*a*b*c - 27*a^2*d + Sqrt[4*(-b^2 + 3*a*c)^3 + (-2*b^3 + 9*a*b*c - 27*a^2*d)^2])^(1/3)/(6*2^(1/3)*a) -
Wert öyle diosunda abi demek istediğim şuydu benim,
Bu adam zaten kökleri bulmak istese benim altta dediğim yöntemden sıfıra hata payından düşük olan kökleri alır ama elde edeceği işte sonunda şöyle birşey olur
(x+0,222325) (2x- 5,223115) (9x+8954,5555555)
Bende diyorum ki integerları denerse
(x-1)(x+8,33333222)(2x-444,888888) gibi daha düzenli en azından varsa daha düzenli çıkaracak bir algoritma olur.
Tabi en alttaki yazdığın korkunç şey çalışıyorsa problem yok onu kullansın :)
-
bu çalışma performansını serbes piyasada yapsanız varya kafadan 1500 tl +sigorta+yemek+yol bilmem ne kazanırsınız :D bu ne lan. ne işe yarıyo bunlar. mantık bunun neresinde