Integral Ober und Untersumme < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:42 Sa 22.04.2017 | Autor: | Kian |
Aufgabe | Hi,
ich möchte für folgendes Integral ein Rechner schreiben.
Integral [mm] x^2 [/mm] + 3x + 2 dx von -2 bis 3
Dabei möchte ich 2 Methoden anwenden.
Einmal die Obersumme und einmal die Untersumme. |
Habe für beides ein Code geschrieben.
Durch die Seite https://www.geogebra.org/m/qrgbJExb kann ich das exakte Ergebnis für die Obersumme und Untersumme sehen.
Mein Code liefert für die Untersumme: 30.150007
und für die Obersumme: 30.530006
Exakte Lösung für die Obersumme: 30.2 und Untersumme: 28.15.
Mein Code:
#include <stdio.h>
#include <math.h>
float N = 0.1; //Intervall
float a = -2; //Untergrenze
float b = 3; //Obergrenze
float A = 0; //Flaecheninhalt
void eingabeUeberpruefen(){
if( a>b && fmod(fabs(b)-fabs(a),N)){
printf("Bitte Intervall N, Untergrenze a und Obergrenze b [mm] überprüfen!\n");
[/mm]
printf("Regeln: a<b und (|b|-|a|) modulo [mm] N==0\n\n");
[/mm]
}
}
float getY(float x){
return pow(x,2)+3*x+2;
}
float getSteigung(float x1, float y1, float x2, float y2){
return (y1-y2)/(x1-x2);
}
void uIntegral(){
A=0;
for(float i=a; i<b; i=i+N){
if(getSteigung(i, getY(i), i+N, getY(i+N)) > 0){
//Steigung positiv
A = A + getY(i) * N;
} else {
//Steigung negativ
A = A + getY(i+N) * N;
}
}
}
void oIntegral(){
A=0;
//Integral von b bis a für 1/3 * [mm] x^3
[/mm]
for(float i=a; i<b; i=i+N){
if(getSteigung(i, getY(i), i+N, getY(i+N)) > 0){
//Steigung positiv
A = A + fabs(getY(i) * N);
} else {
//Steigung negativ
A = A + fabs(getY(i+N) * N);
}
}
}
int main(int argc, char *argv[]) {
eingabeUeberpruefen();
uIntegral();
printf("Untersumme: [mm] %f\n", [/mm] A);
oIntegral();
printf("Obersumme: [mm] %f\n" [/mm] ,A);
}
Weiss jemand wo der Fehler liegt und so eine grosse Abweichung bekomme?
Lg
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:43 Sa 22.04.2017 | Autor: | leduart |
Hallo
ich weiss nicht was in C fabs ist vermute das ist der Betrag? warum kommt der in der Obersumme vor? ohne das fabs sind OS und US gleich , was ich beides nicht verstehe.
jast du dein Programm mal an nur positiven Funktionswerten, also hier für a>=-1 ausprobiert ebenso nur negativ also für -2 bis -1.
ausserdem sollte man immer mit dem einfachsten Beispiel anfangen, also z.B f(x)=x oder f(x)=|x+1| -2 wobei negative Steigungen und negative Funktionswerte vorkommen.
Gruß leduart
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 08:03 So 23.04.2017 | Autor: | chrisno |
Deine Berechnungen der Ober- und Untersumme sind falsch.
Das gilt für die Bereiche, in denen negative Funktionswerte vorkommen.
|
|
|
|