www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - n-te Partialsumme von Sinus
n-te Partialsumme von Sinus < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

n-te Partialsumme von Sinus: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 00:13 Do 16.05.2013
Autor: Marschal

Aufgabe
Hi!
Ich soll eine Funktion mysin schreiben, die die n-te Partialsumme der Potenzreihe von Sinus für ein Wert x berechnet.
Dazu sollen Funktionen geschrieben werden, die das Vorzeichen eines Summanden ausgeben können und ein Programm für die Fakultät.



Was mache ich falsch, dass das Programm so abstruse Werte ausspuckt?

Ich habe im Anhang mein Quellcode sowohl als Bild, als auch als .txt-Datei

Vielen Dank im Voraus!

[a]Quellcode als Bild

Die .txt-Datei ist in der Mitteilung!!! Sorry war durcheinander gekommen!


Dateianhänge:
Anhang Nr. 1 (Typ: png) [nicht öffentlich]
Anhang Nr. 2 (Typ: jpg) [nicht öffentlich]
        
Bezug
n-te Partialsumme von Sinus: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 00:24 Do 16.05.2013
Autor: Marschal

[a]Datei-Anhang

Dateianhänge:
Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
Bezug
        
Bezug
n-te Partialsumme von Sinus: Antwort
Status: (Antwort) fertig Status 
Datum: 10:00 Do 16.05.2013
Autor: chrisno

Du kannst Quellecode mit  [code] [/code]  direkt einfügen.
Warum berechnest Du bei jedem Summanden [mm] $x^3$ [/mm] ?

Bezug
                
Bezug
n-te Partialsumme von Sinus: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:22 Do 16.05.2013
Autor: Marschal

Hi chrisno!

Also die Partialsumme ist ja $  [mm] \sin [/mm] (x) [mm] \approx \sum_{i=0}^n (-1)^i\frac{x^{2i+1}}{(2i+1)!} [/mm] $

und bei jedem neuen Summanden wird doch aus dem alten $ x $ ein $ [mm] x^3$ [/mm] , oder liege ich da falsch?

Bezug
                        
Bezug
n-te Partialsumme von Sinus: Antwort
Status: (Antwort) fertig Status 
Datum: 10:30 Do 16.05.2013
Autor: Valerie20



> Also die Partialsumme ist ja [mm]\sin (x) \approx \sum_{i=0}^n (-1)^i\frac{x^{2i+1}}{(2i+1)!}[/mm]

>

[ok]

> und bei jedem neuen Summanden wird doch aus dem alten [mm]x[/mm] ein
> [mm]x^3[/mm] , oder liege ich da falsch?

Ja.
Für i=0 hast du $x$.
Für i=1 hast du [mm] $x^3$. [/mm]
Für i=2 hast du [mm] $x^5$. [/mm]
.
.
.
.
.

Valerie

Bezug
                                
Bezug
n-te Partialsumme von Sinus: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:34 Do 16.05.2013
Autor: Marschal

Ok danke Valerie!

1: double mysin (double x, int n)
2: {
3:     int i;
4:     double mysin = 0.;
5:
6:     for(i=0; i <= n; ++i)
7:         mysin += vorzeichen((double) i ) * ( x = x*x*x )/( fakultaet(2*i+1) );
8:     return mysin;
9: }


Aber chrisno deutete an, dass damit etwas nicht stimmt... Nur was?

PS: Die Funktion "vorzeichen" gibt eigentlich eine Integer-Zahl aus. Habe ich das in Zeile 7 so richtig gemacht, dass sie eine double-Zahl ausgibt, wenn ich einfach so mache: vorzeichen((double) i ) ?

Bezug
                                        
Bezug
n-te Partialsumme von Sinus: Antwort
Status: (Antwort) fertig Status 
Datum: 10:48 Do 16.05.2013
Autor: Valerie20


> Ok danke Valerie!

>

>
1: double mysin (double x, int n)
2: > {
3: > int i;
4: > double mysin = 0.;
5: >
6: > for(i=0; i <= n; ++i)
7: > mysin += vorzeichen((double) i ) * ( x = x*x*x )/(
8: > fakultaet(2*i+1) );
9: > return mysin;
10: > }


>

> Aber chrisno deutete an, dass damit etwas nicht stimmt...
> Nur was?

Das hatte ich dir doch geschrieben!?

> PS: Die Funktion "vorzeichen" gibt eigentlich eine
> Integer-Zahl aus. Habe ich das in Zeile 7 so richtig
> gemacht, dass sie eine double-Zahl ausgibt, wenn ich
> einfach so mache: vorzeichen((double) i ) ?

Nein.
Du castest dein "i" zu einem double.

Die Funktion "vorzeichen" bekommt aber ein "int".
Aus welchem Grund möchtest du denn, dass die Funktion vorzeichen ein "double" zurück liefert?
Die Funktion liefert doch entweder eine 1 oder eine -1.

Valerie

Bezug
                                                
Bezug
n-te Partialsumme von Sinus: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:16 Do 16.05.2013
Autor: Marschal

Sorry dann hab ich dich wohl nicht verstanden. Wie bekomme ich das hier:

> Für i=0 hast du $ x $.
> Für i=1 hast du $ [mm] x^3 [/mm] $.
> Für i=2 hast du $ [mm] x^5 [/mm] $.

im Quellcode umgesetzt?


> Die Funktion "vorzeichen" bekommt aber ein "int".
> Aus welchem Grund möchtest du denn, dass die Funktion > vorzeichen ein "double" zurück liefert?
> Die Funktion liefert doch entweder eine 1 oder eine -1.

In meinem Quellcode habe ich ja:
vorzeichen(i) * ( x = x*x*x )/( fakultaet(2*i+1) )

Da wird ja eine integer-Zahl mit dem Quotient zweier double-Zahlen multipliziert, sprich eine integer-Zahl mal eine double-Zahl. Aber geht das überhaupt? Wandelt es den integer-Faktor automatische in einen double-Faktor um?

Bezug
                                                        
Bezug
n-te Partialsumme von Sinus: Antwort
Status: (Antwort) fertig Status 
Datum: 12:30 Do 16.05.2013
Autor: chrisno

x
x*x*x
(x*x*x)*(x*x*x)*(x*x*x)
...?
Vielleicht sollte ich mich heraushalten, denn zum Beispiel kenne ich mich mit den Typecasts nicht aus. Du kannst immer mit einen kurzen Progämmchen ausprobieren, ob das Richtige passiert.
Wenn die Sprache keinen Operator für Potenzen hat, oder es Gründe gibt, den nicht zu benutzen, dann kannst Du Dir auch eine Funktion dafür schreiben.
Ich würde mir eher den folgenden Term aus dem vorangehenden holen. Dann brauchst Du auch die Fakultät nicht. Wahrscheinlich ist das kein guter Stil, ich bin eben mit Fortran aufgewachsen.

Bezug
                                                        
Bezug
n-te Partialsumme von Sinus: Antwort
Status: (Antwort) fertig Status 
Datum: 13:04 Do 16.05.2013
Autor: Valerie20


> Sorry dann hab ich dich wohl nicht verstanden. Wie bekomme
> ich das hier:

>

> > Für i=0 hast du [mm]x [/mm].
> > Für i=1 hast du [mm]x^3 [/mm].
> > Für
> i=2 hast du [mm]x^5 [/mm].

>

> im Quellcode umgesetzt?

>

Das kommt darauf an, was du alles verwenden darfst.
Nachdem du die Bib. math.h eingebunden hast, könntest du zum Beispiel mit der Funktion pow(Zahl,Exponent) arbeiten. Mehr dazu findest du bei Google.

> > Die Funktion "vorzeichen" bekommt aber ein "int".
> > Aus welchem Grund möchtest du denn, dass die Funktion >
> vorzeichen ein "double" zurück liefert?
> > Die Funktion liefert doch entweder eine 1 oder eine -1.

>

> In meinem Quellcode habe ich ja:
> vorzeichen(i) * ( x = x*x*x )/( fakultaet(2*i+1) )

>

> Da wird ja eine integer-Zahl mit dem Quotient zweier
> double-Zahlen multipliziert, sprich eine integer-Zahl mal
> eine double-Zahl. Aber geht das überhaupt? Wandelt es den
> integer-Faktor automatische in einen double-Faktor um?

Ja. Es wird immer vom kleineren zum größeren Wertebereich gecastet.
Wenn du zwei int´s teilst, bekommst du einen int zurück.
teilst du einen double durch ein int, so wird dein Ergenis Automatisch in double zurück gegeben.

Dein Typcast wäre trotzdem falsch.
Wenn hättest du schreiben müssen:
(double) vorzeichen(i).
Brauchst du hier aber nicht.

Es gibt in deinem Programm allerdings noch ein paar Fehler, die ich dir gleich sage:

1. msyn wird in der main falsch aufgerufen. Du musst x und n vertauschen.

2. Bei der Ausgabe der Zahlen sollte es sin(%lf) lauten anstatt sin(%d)

Valerie

Bezug
                                                                
Bezug
n-te Partialsumme von Sinus: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:44 Do 16.05.2013
Autor: Marschal

Vielen vielen Dank euch beiden!

Ich habe das Programm jetzt verbessert. Allerdings funktioniert das Programm nur für kleine $ n $. So [mm] n\le [/mm] 100 würde ich schätzen. Ist das normal?

Bezug
                                                                        
Bezug
n-te Partialsumme von Sinus: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:18 Do 16.05.2013
Autor: chrisno

klein ist eine Frage des Standpunkts. Schau Dir mal die Werte an, wie weit die noch dargestellt werden können. Ab wann steigt die Fakultät (int!) aus?

Bezug
                                                        
Bezug
n-te Partialsumme von Sinus: Antwort
Status: (Antwort) fertig Status 
Datum: 09:09 Fr 17.05.2013
Autor: Event_Horizon

Hallo!

> vorzeichen(i) * ( x = x*x*x )/( fakultaet(2*i+1) )

Das  x=x*x*x ist ziemlich pervers, funktioniert aber tatsäch in C. ich glaube nur, daß es nicht das macht, was du willst. im Prinzip ist das äquivalent zu

x=x*x*x;
vorzeichen(i) * x /  ( fakultaet(2*i+1) );


Denk dran, für i=0 sollte hier sowas rauskommen wie

$1*x /1$

und für i=1

[mm] $-1*x^3 [/mm] /3!$


Dein Pogramm erzeugt aber das daraus:

i=0:  $1*(x*x*x) /1$  also  [mm] $1*x^3 [/mm] /1$
i=1: $1*(x*x*x)*(x*x*x)*(x*x*x) /3!$ also [mm] $1*x^9 [/mm] /3!$

(Das x hier ist das ursprüngliche x, das der Funktion mysin übergeben wurde)


Hinweis:
Unter den Mathefunktionen (#inlclude <math.h>) gibt es

pow(x, n)  -> liefert dir [mm] x^n [/mm]


Und für das Vorzeichen:

Versuche mal Modulo-Rechnung ("Teilen mit Rest"):

n % 2 -> liefert dir 0 oder 1 als Rest der Division durch 2, und damit die Info, ob das n grade oder ungrade ist.



Bezug
        
Bezug
n-te Partialsumme von Sinus: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 00:27 So 19.05.2013
Autor: Marschal

Vielen Dank!

Hat alles geklappt!

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]