Wpis z mikrobloga

Mirki programiści. Mam program, który metodą bisekcji liczy mi pierwiastki, w zasadzie to pierwiastek, równania:

x^5+x+1 = 0 dla przedziału [-2,0]

Mam też pętlę, która kręci się aż różnica pomiędzy wyliczonym w pętli środkiem a przybliżonym wg wolframa pierwiastkiem jest większa niż 10^(-10) ( ćwiczeniowca ewidentnie poniosło w tym momencie, może nawet nie pomyślał czy to będzie działać) - używam tu fabsa. Problem w tym, że program rozkłada nogi już dla 37 podziałów - 10^(-5).

Da się jakoś zwiększyć zwiększyć tę dokładność prostymi sposobami, bez pisania skomplikowanych klas?

#programowanie #cplusplus
  • 15
@wolodia: program liczy dalej, ale wciąż otrzymuje ten sam wynik - różnicę, która wynosi 1.01004e-05. W kompilatorze online wypisuje mi do 37 przebiegu rożne różnice, potem wciąż jedną i tę samą aż to timeouta ( czyli ponad 3100 przebiegów). U mnie zresztą to samo, pętla wciąż się kręci i różnica, która jest wypisywana jest taka sama, ale nie mogę sprawdzić ile przebiegów zrobi, bo program nadal wypisuje.

Wydaje mi się, że
ok no tak na szybko ajko że algorytmu jak takiego nie drążyłem to zauważ że dla tej wartości 1.01004e-5 żaden z "if-ów" if (funkcja(a) * funkcja(srodek) < 0) , if (funkcja(b) * funkcja(srodek) < 0) nie jest spełniony. toteż sobie tu utyka. fabs tutaj nie jest problemem
@igbt6: ale ta wartość to różnica pomiędzy tym co pętla sobie wyliczyła (środek jakiegoś przedziału) a tym z wolframa. Dochodzi do 10^(-5), czyli mam uznać, że więcej już nie jest w stanie wyrzeźbić?

Oba końce przedziału powinny ładnie przybliżać wolframową wartość, f(jeden koniec) będzie dodatni, a f(drugi koniec) będzie ujemny, aż w końcu zejdą się tak blisko tego środka, że maksymalna dokładność zostanie osiągnięta.
Teoretycznie powinno się ładnie ciągnąć, choć ta
no na to wygląda, drugiego if a z algorytmu wynika że mogłabyś elsem zastąpić, a pewnie żeby wyjść i się nie zapętlić na wieki to można dodać jakąś zmienną oznaczającą liczbe iteracji. Pozdrawiam!
@AvalonYuuna: wtedy funkcja(srodek) albo funkcja(b), badz tez funkcja(a) jest rowna 0, ponieważ, wczesniej mielismy, ze funkcja(a) i funkcja(b) były różnych znaków, co oznacza, że funkcja(srodek) jest równe 0, a wiec trafilismy w rozwiazanie....