[POMOC] metoda Newtona (stycznych)!

 
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> C/C++
Autor Wiadomość
designer
~user




Dołączył: 12 Mar 2010
Posty: 1


PostWysłany: 12-03-10 23:10 Zacytuj zaznaczone Odpowiedz z cytatem

Witam ! mam taki problem z wyżej wymienionym tematem... Dopiero uczę się programować to nie wiem czy dobrze napisałem kod, czy w ogóle o to chodziło ? Bo mam zrobić coś takiego żeby w jakimś tam przedziale np <1,3> szukać pierwiastka. Proszę o pomoc. Z góry dzięki!!!

c:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define wspolczynnik 1
#define przedzial 2
#define licz 3
#define wyjscie 4

  double f(double x){ // funkcja x^2 - x -3
         return x*x - x - 3;
         }
         
  double fp(double x){ // pochodna funkcji x^2 - x - 3
         return 2*x - 1;
         }
         
int main(int argc, char *argv[])
{
  int opcja=0,h;
 
  double a=-3, b=3,p0=3, p1,k;
  const double EPS = 0.000001;
 
 
while (opcja != 4){
  printf("++++++++++METODA NEWTONA (STYCZNYCH)++++++++++\n");
  printf("++       I.Funkcja startowa: x^2 - x -3     \n");
  printf("++       II.Pochodna funkcji: 2*x - 1       \n");
  printf("++       III.Przedzial: <%lg,%lg>              \n", a,b);
  printf("++       IV.Wspolczynnik wynosi = %lg         \n", p0);
  printf("++       V.Przyblizenie epsilon = %lg         \n", EPS);
  printf("++                                          \n");
  printf("++                                          \n");
  printf("++++++++++++++++++++++++++++++++++++++++++++++\n\n");   
     
  printf("Wybierz opcje, ktora chcesz wykonac!\n");
  printf("   1: Podaj wspolczynnik\n");
  printf("   2: Podaj przedzial, w ktorym ma byc liczony pierwiastek\n");
  printf("   3: Licz pierwiastek\n");
  printf("   4: Wyjscie\n\n");
 
  scanf("%d", &opcja);
  switch (opcja){
         
         case wspolczynnik: {
              printf("Podaj wspolczynnik x: ");
              scanf("%lg", &p0);
              printf("\n\n\n\n");
              };break;
             
         case przedzial: {
              printf("Podaj poczatek przedzialu 'a' i koniec przedzialu 'b'\n");
              scanf("%lg%lg", &a, &b);
              system("cls");
              };break;
             
         case licz: {
               do{
                 p1 = p0 - (f(p0)/fp(p0))
                 p0 = p1;
                 k++;
                 printf("Przyblizenie wynosi = %.6lf\n\n", p1);
                 }while (p1 < EPS);
                 if (p1>a && p1<b){
                          p0 = p1;
                  printf("Przyblizenie p1 = %.6lf nalezy do przedzialu <%lg,%lg>!\n\n", p1,a,b);
                          }else{
               printf("Przyblizenie p1 = %.6lf nie nalezy do przedzialu <%lg,%lg>!\n\n", p1,a,b);
                                }                   
              };break;
             
         case wyjscie: {
              exit(0);
              };break;
             
  }
 
}
  system("PAUSE");     
  return 0;
}


Aha i jeszcze szukałem na tym forum metody Newtona i znalazłem tylko metodę bisekcji, a chodzi o METODE NEWTONA (STYCZNYCH) ! To tak jak by co Smile
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
kortyg
~user




Dołączył: 12 Lut 2010
Posty: 9

Pomógł: 2

PostWysłany: 19-03-10 13:28 Zacytuj zaznaczone Odpowiedz z cytatem

Wpisz w Google metoda newtona siecznych.
Cytat:

p1 = p0 - (f(p0)/fp(p0));

w mianowniku powinna być pochodna fcji fp
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy tematOdpowiedz do tematu    Forum programistyczne Programmers Zone Strona Główna -> C/C++ Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

Mapa
Powered by phpBB © 2001, 2005 phpBB Group

 Polecane strony