reihenentwicklung durch schleifen
-
kann ir vielleicht jemand starthilfe für die folgende aufgabe geben-wäre super nett!
gegeben ist folgende reihenentwicklung:
(1/(sqrt(1+x)) = 1 - (1/2)x + ((1*3)/(2*4))x^2 - ((1*3*5)/(2*4*6))x^3 + ...
mit x > -1
folgende aufgaben sind zu erfüllen:
1.)
a)berechnung der reihe mit einer Genauigkeit von 10**-8 (=Näherungswert).
Hierzu reicht es, wenn die aufsummierung der einzelnen Reihenglieder abgebrochen wird, wenn das letzte Reihenglied unterhalb der Genauigkeitsgrenze liegt.
b)berechnen sie den funktionswert durch ausnutzung der entsprechenden systemfunktion.
c)berechnen sie die differenz zwischen dem näherungswert und dem funktionswert.
d)geben sie die berechneten werte (argument x; genäherter reihenwert; exakter funktionswert; differenz) aus.2.)erwitern sie ihr programm in einer zweiten variante dahin, dass es die Aufgabe 1 für den wertebereich
x1 <=x <= x2 mit dem fortschrittswert dx
durchführt und die ergebnisse in tabellenform ausgibt. die werte x1 , x2 und dx sind nun als variablen einzulesen. die formatierte ergebnistabelle ist auf eine textdatei umzuleneken. die berechnungen sind in einer schleife,deren form beliebig ist, durchzuführen.
kann mir vielleicht jemand bei der aufgabe helfen-ich weiß einfach nich was ich machen soll!!!
-
Kannst Du wenigstens die Aufgabe 1b) für einen gegebenen Wert x programmieren?
-
ja soweit hab ichs glaub einigermaßen hinbekommen-hoff ich mal

-
Ok, und wo kommst Du jetzt nicht weiter?
-
.. Hm; ich denke mal mit der Schleife ist das schwierig. Anbei ein Vorschlag dafür:
double reihe( double x ) { const double EPS = 1.E-8; int ii = 1; double fak = 1.0; double xx = 1.0; double erg = 0.0; for( double dx = fak; dx > EPS || dx < -EPS; ) { erg += dx; xx *= x; (fak *= -ii) /= (ii+1); ii += 2; dx = fak * xx; } return erg; }ich mach' für heute Schluß
Gruß
Werner
-
ich weiß irgendwie nich wie man das jetzt im aufgabenteil 2 als formatierte tabelle ausgibt-also irgendie versteh ich grad nur noch bahnhof

-
ok vielen dank! gute nacht

-
kann mir vielleicht noch jemand beim aufgabenteil 2 helfen-erstellen der tabelle!bitte,bitte-wäre lieb!
-
shadow 84 schrieb:
kann mir vielleicht noch jemand beim aufgabenteil 2 helfen-erstellen der tabelle!bitte,bitte-wäre lieb!
Lies mal in Deiner Hilfe über die Manipulatoren std::fixed, std::setprecision, std::setw usw.
Weiter mal angenommen, Du hast eine Funktion 'reihe' (s.Posting oben) und eine Funktion 'func', die die Funktion berechnet. Dann schreibe eine Funktion, die für einen (!) x-Wert eine formatierte Zeile mit den gewünschten Informationen ausgibt:
// für 'x' die Berechnung machen und nach 'out' ausgeben void print_zeile( double x, std::ostream& out ) { using std::cout; using std::endl; double r = reihe( x ); double f = func( x ); out << std::fixed << std::setprecision( 6 ); out << std::setw( 10 ) << x << ": " << std::setw( 10 ) << r << "; " << std::setw( 10 ) << f << " delta: " << std::setw( 12 ) << std::scientific << std::setprecision( 4 ) << r - f << endl; }Für den x-Wert 0.9 sollte dann ...
0.900000: 0.725476; 0.725476 delta: -5.1314e-009... bei Dir am Bildschirm erscheinen. Mit den Konstanten im obigen Code kannst Du je nach Geschmack noch etwas herumspielen.
Jetzt packt man das noch in eine Schleife
int main() { using std::cout; using std::endl; double x1 = -0.9; // von >-1 double x2 = +0.9; // bis <1 double dx = 0.1; // Step for( double x = x1; x < x2; x += dx ) print_zeile( x, cout ); return 0; }.. und die Tabelle ist fertig.
Gruß
Werner
-
oh vielen vielen dank-ich bastel da jetzt schon seit 3 stunden dran rum und komm nich auf die lösung -ich hoffe es klappt jetzt-ganz,ganz dickes merci