• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obliczanie pierwiastka-Metoda Stefensona

Object Storage Arubacloud
0 głosów
323 wizyt
pytanie zadane 3 grudnia 2016 w C i C++ przez orlicki12 Początkujący (450 p.)

Witam
Jako że jestem początkujący w c++ mam napisac program który będzie liczył pierwiastek równania tzw Metodą Stefensona. W internecie nie ma dużo na ten temat jednak udało mi się coś znaleźć i napisałem program ale nie działa.

Dokładna treść zadania:
Obliczyć pierwiastek równania nieliniowego cos(x)+1/(x+2)=0 Metodą Stefensona.

#include <conio.h>
#include <iostream>
#include <cmath>

using namespace std;

double licz (double arg){
    return (-1/pow((2+arg),2.))-sin(arg);
}
double licz2 (double arg, double arg2){
    return arg-arg2;
}
double licz3 (double arg, double arg2, double arg3){
    return arg-(arg2/(arg3-arg2));
}
int main (){
double x=0.;
double const blad=0.00001;
do{
    licz (x);
    licz2 (x,licz(x));
    licz3 (x,licz(x),licz2(x,licz(x)));
    x++;
}while (fabs((licz3 (x,licz(x),licz2(x,licz(x)))-x)/(licz3 (x,licz(x),licz2(x,licz(x)))))>blad);
cout<<licz3;
return 0;
}

Program nie wychodzi w ogóle z pętli do.

Z góry dziękuje za pomoc 
Pozdrawiam 

komentarz 3 grudnia 2016 przez niezalogowany
"Nie działa" tzn co właściwie się dzieje? Wyskakuje ci jakiś komunikat błędu, czy zwracane wyniki nie są prawidłowe?

2 odpowiedzi

+1 głos
odpowiedź 3 grudnia 2016 przez niezalogowany
edycja 30 sierpnia 2017
 
Najlepsza

Skąd brałeś ten kod? Na AGH jest fajny: http://home.agh.edu.pl/~dziembaj/Old/skrypt%20end/podstrony/steffensen.html

Podajesz liczbę iteracji np 3 i zaczynasz od np 0:

#include <iostream>
#include <math.h>
using namespace std;

double f(double x) { return (cos(x)+1/(x+2)); }

int main() {
    double x, y;
    int k, iterNum;

    cout << "Liczba iteracji = "; cin >> iterNum;
    cout << "Podaj punkt startowy x = "; cin >> x;

    for (k=0; k < iterNum; k++) {
        y = f(x);
        if (y == 0) break;
        x = x - (y*y)/(f(x+y)-y);
        cout << "x = " << x << "\n";
    }

    cout <<"Wyniki:\n" << "x = " << x << ", f(x) = " << f(x) << "\n";

}

Miejsce zerowe to 1,824 (stąd). Do tego ładnie kod pokazuje gdzie to miejsce zostało znalezione

komentarz 4 grudnia 2016 przez orlicki12 Początkujący (450 p.)

Ooo wielkie dzięki dużo ładniejszy ten kod i co najważniejsze działa. Tylko mam jeszcze jedno pytanie bo niestety musiałem go przerobić tak aby działał w C i funkcja printf wyświetla mi f(x) jako 0 może widzisz jaki błąd popełniłem?

#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;

double f(double x) { return (cos(x)+1/(x+2)); }

int main() {
    double x=0., y;
    int k, iterNum=4;
    for (k=0; k<iterNum; k++) {
        y = f(x);
        if (y == 0) break;
        x=x-(y*y)/(f(x+y)-y);
        printf("x=%f \n",x);
    }
   printf("Wyniki: x=%f  f(x)=%f \n",x ,f(x));
}

 

komentarz 4 grudnia 2016 przez niezalogowany

Właściwie to jest prawie zero. Korzystając z notacji naukowej możesz wyświetlić ile tam jest:

printf("Wyniki: x=%f  f(x)=%e \n",x ,f(x));

 

komentarz 4 grudnia 2016 przez orlicki12 Początkujący (450 p.)
Aaa no tak. Ostatecznie jeszcze przekształciłem ten kod na pętle do while ale i tak należy się naj jak najbardziej :D
komentarz 4 grudnia 2016 przez orlicki12 Początkujący (450 p.)
A jeszcze mam pytanie czy może na stronie AGH jest jakiś kod do metody siecznych (Eurera) bo jak wchodzę na twój link i daje powrót to wywala mi 404 :D
komentarz 4 grudnia 2016 przez niezalogowany
AGH udostępnia dużo notatek, wykładów itp spróbuj z google.
0 głosów
odpowiedź 3 grudnia 2016 przez orlicki12 Początkujący (450 p.)
nic się nie dzieje miga kursor tylko.

Podobne pytania

0 głosów
1 odpowiedź 574 wizyt
0 głosów
2 odpowiedzi 715 wizyt
0 głosów
2 odpowiedzi 635 wizyt
pytanie zadane 15 lutego 2017 w Matematyka, fizyka, logika przez Bakr Mądrala (6,850 p.)

92,565 zapytań

141,417 odpowiedzi

319,601 komentarzy

61,950 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...