Metoda Newtona
Ostatnio zmodyfikowano 2012-11-28 21:30
fokusiara Temat założony przez niniejszego użytkownika  | 
Metoda Newtona » 2012-11-26 15:29:47 Mam do napisania program, który metodą Newtona wyznacza z zadaną dokładnością (sigma=10^-6) miejsce zerowe funkcji f(x)=x-exp(-x) w przedziale <0,1>. Kolejne kroki algorytmu: 1) Sprawdzamy czy funkcja f(x) ma różne znaki na krańcach przedziału <a,b> tj. f(a)*f(b)<0. Jeżeli tak, to przechodzimy do punktu 2. 2) Wybieramy punkt startowy x1=a. 3) Jeżeli wybrany punkt spełnia warunek |f(x1)|<sigma to x1 jest miejscem zerowym funkcji. Jeżeli nie przechodzimy do punktu 4. 4) Obliczamy kolejny punkt startowy wg wzoru: xk+1=xk-f(xk)/f'(xk) i wracamy do punktu 3.
  Warto nadmienić że programowania uczę się od niecałych dwóch miesięcy, od podstaw. I nie wiem czy warto żebym wklejała to co próbowałam zrobić. Pomoże mi ktoś jak pięknie poproszę? :) z góry dzięki !  | 
 | 
DejaVu  | 
» 2012-11-26 16:43:34 Zadanie polega na samodzielnej implementacji podanego algorytmu. Jak już koniecznie szukasz 'pomocy' to proponuję najpierw poszukać w Google:  | 
 | 
crash  | 
» 2012-11-27 17:59:45 Jak nie wlepiasz żadnego kodu to znaczy, że na gotowca liczysz ;] Nie ma tak dobrze. to żaden wstyd wlepić kod, który nie działa  | 
 | 
fsg  | 
» 2012-11-28 20:38:36 Cześć mam ten sam problem. Znaczy kod już napisany co przesyłam, ale nie jestem przekonany czy dobrze to działa, a szczególnie wynik, bo spotkałem się z innymi niż moja odpowiedziami. #include <iostream> #include <cmath> #include <cstdlib>
  using namespace std;
  float funkcjaf( float x ) {     return x - exp( - x ); }
  float pochodnaf( float x ) {     return 1 + exp( - x ); }
  int main() {     float a, b, d, x1;     d = 0.000001;               a = 0;     b = 1;          if( funkcjaf( a ) * funkcjaf( b ) < 0 )     {         x1 = a;                  while( fabs( funkcjaf( x1 ) ) >= d );                  {             x1 = x1 - funkcjaf( x1 ) / pochodnaf( x1 );                      }                  cout << "Miejscem zerowym funkcji f(x) jest: " << x1 << endl << endl;     }          else          cout << "Nie spelniono zalozen." << endl;          system( "pause" );     return 0; }  | 
 | 
ison  | 
» 2012-11-28 20:51:25 2 razy wczytujesz tę samą zmienną ale to akurat masz zakomentowane d = 1 / 100000;  w tym przypadku d będzie równe 0 bo dzielisz całkowite liczby d = 0.00001f; 
 if( funkcjaf( a ) * funkcjaf( b ) < 0 )
       x = a;
 
   |  
 tu jeśli warunek nie będzie spełniony to x będzie zawierało jakieś śmieci bo nic mu nie przypisujesz  | 
 | 
fsg  | 
» 2012-11-28 21:30:44 Dzięki za odpowiedź, ale mam jeszcze jeden problem. Teraz kod wydaje się poprawny, ale nie rozumiem czemu działa tylko do momentu przypisania wartości, zarówno kiedy je narzucę z góry, jak także wtedy gdy wpisuje je do programu. Wydaje mi się, że nie chce mi przejść przez instrukcję warunkową. Przez to program nie kończy działania i okno muszę zamykać ręcznie.
  Znalazłem błąd, to średnik po warunku pętli.  | 
 | 
|  « 1 »  |