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

pochodne C++

Object Storage Arubacloud
0 głosów
240 wizyt
pytanie zadane 22 czerwca 2022 w C i C++ przez der4 Nowicjusz (120 p.)

Witam

Doradzi ktoś dlaczego wynik wychodzi mi zły...indecision

#include <iostream>
#include <math.h>
#include <cmath>
// Pochodne!
using namespace std;
double f(double x)
{
   return sin(x);
}

int main()
{

  double x=0, h=0.01;
  cout<<"podaj X:";
  cin>>x;
  double RSC = (f(x+h)-f(x-h))/(2*h);
  cout<<"Metoda RSC"<<endl;
  cout << "f'(" << x << ") = " << RSC<< endl;
  double RSP = (f(x+h)-f(x))/(h);
  cout<<"Metoda RSP"<<endl;
  cout << "f'(" << x << ") = " << RSP << endl;
  double RST = (f(x)-f(x-h))/(h);
  cout<<"Metoda RST"<<endl;
  cout << "f'(" << x << ") = " << RST << endl;
//return 0;
}

 

1
komentarz 22 czerwca 2022 przez Oscar Nałogowiec (29,290 p.)
A konkretnie co jest błędne? Pamiętaj, że kąty są w radianach.

Trochę dziwnie inkludujesz oba podobne nagłówki - math.h to nagłówek dla C, cmath dla C++ (namespace itp), ale funkcje mają takie same.
komentarz 22 czerwca 2022 przez der4 Nowicjusz (120 p.)
f^' (1)=((1+0.01)-(1-0.01))/0.02 = 1 
sin(x)= 0.017452 

 

wydaj mi się że taki wynik powinien być.

1
komentarz 22 czerwca 2022 przez adrian17 Ekspert (344,860 p.)
Uh, ta ostatnia wiadomość wiele sensu nie ma? Ogólnie nie wiem co chciałeś w tej pierwszej linii napisać.

Na moje oko to wyniki z odpalenia Twojego kodu wyglądają poprawnie.
2
komentarz 22 czerwca 2022 przez Kartoszka Obywatel (1,260 p.)

Program liczy okej, pamiętaj że używasz przybliżeń różnicowych - przybliżenia są obarczone błędem.

Wyniki po wklejeniu kodu u mnie:

Metoda RSC: sin'(1) = 0.540293
Metoda RSP: sin'(1) = 0.536086
Metoda RST: sin'(1) = 0.544501
Pochodna dokładna sin'(1) = 0.540302


Nie wiem tez jak ci wyszedł "sin(x) = 0.017452", co podstawiłeś za x?

f^' (1)=((1+0.01)-(1-0.01))/0.02 = 1 oraz to, też nie jest zrozumiałe "f^'"? Pochodna z f? zapis sugeruje że pochodna z f w jedynce równa się temu co jest znaku równości, ale jest to wzór na różnicę centralną, tyle że z pominiętym f przed nawiasami z (1+0.01) i (1-0.01).

1 odpowiedź

+1 głos
odpowiedź 22 czerwca 2022 przez Kartoszka Obywatel (1,260 p.)
edycja 22 czerwca 2022 przez Kartoszka

Napisałem szybki programik

#include <iostream>
#include <math.h>
#include <fstream>

using namespace std;

double f(double x){
   return sin(x);
}
 
double f_d(double x){
    return cos(x);
}

double central(double x, double h){
    return (f(x+h) - f(x-h)) / h * 0.5;
}

int main(){

    double a = 0.0;
    double b = 2.0 * M_PI;
    double h = 0.01;

    ofstream file;
    file.open("result.txt");

    for (double x = a; x <= b; x += h)
        file << x << ", " << f_d(x) << ", " << central(x, h) << "\n";
    
    file.close();
    return 0;
}

wraz z gnuplotem

set term png
set output "result.png"
set xlabel "x"
set ylabel "sin'(x) = cos(x)"
set autoscale
plot "result.txt" using 1:2 w l lw 6 title "cos(x)", \
    "result.txt" using 1:3 pt 7 ps 0.4 title "central"

Co nam daje wykres różnicy centralnej oraz dokładnego rozwiązania:

Wykresy pokrywają się, ale oczywiście jest błąd, którego gołym okiem nie widać.

1
komentarz 22 czerwca 2022 przez Kartoszka Obywatel (1,260 p.)

Dopisałem jeszcze kawałek, aby pokazać błąd bezwzględny przybliżenia, co dało wykres (błąd na osi X wciąż nie jest równy zeru, ma rząd 10^(-8)):

Podobne pytania

+1 głos
1 odpowiedź 3,472 wizyt
0 głosów
3 odpowiedzi 319 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez merlin84265 Nowicjusz (160 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...