Sinus Reihenentwicklung

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Ginojack
Beiträge: 1
Registriert: Do Okt 31, 2013 11:14 pm

Sinus Reihenentwicklung

Beitrag von Ginojack » Do Okt 31, 2013 11:15 pm

Hi Leute,

ich beschäftige mich in der freizeit mit etwas programmieren und hab mir ein literaturbuch ausgeliehen welches als aufgabe die reihenentwicklung einer sinusfunktion in c erfordert. nun bin ich noch gar nicht so gut mit der sprache vertraut und würde mich über ratschläge freuen wie man denn an die sache rangehen soll

sin(x)= x-(x³/3!)+(x^5/5!)+...

- Übernahme des eingabewertes in grad
- umrechnung des eingabewertes ins bogenmaß
- schrittweise berechnen des ergebniswertes
- vorzeichenwechsel bei jedem schritt
- festlegung eines abbruckkriteriums
- ausgabe des rechnerergebnisses und der anzahl der durchgeführten iterationen

a) formulieren sie ihren algorithmus als c-quelle
b) erweitern sie nun ihr programm so, dass ein vergleich mit der in der standardbibliothek <math.h> verfügbaren realisierung von sin(x) möglich ist. realisieren sie dafür z.b. folgende ausgaben: Mein sin(90°)= 1.0000000; anzahl der schritte: 39

Liebe Grüße Miriam

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sinus Reihenentwicklung

Beitrag von cloidnerux » Fr Nov 01, 2013 9:34 am

Hi Leute,
Hallo und Willkommen im Forum :D
nun bin ich noch gar nicht so gut mit der sprache vertraut und würde mich über ratschläge freuen wie man denn an die sache rangehen soll
Die Methode "Teile und Herrsche" hat sich oft als Erfolgreich gezeigt. Teile dein Problem in kleinere auf, die du dann gezielt lösen kannst.
- Übernahme des eingabewertes in grad
Du willst eine Funktion, die eine gradzahl entgegen nimmt:

Code: Alles auswählen

double sin(double grad)
{
[...]
}
umrechnung des eingabewertes ins bogenmaß
Du hast nun also einen Gradwert in der Variable "grad".
Der Zusammenhang zwischen Grad und Bogenmaß ist der Folgende:

Code: Alles auswählen

360° = 2*Pi
bzw

Code: Alles auswählen

180° = Pi
Was du nun also machen musst, ist deine Gradzahl als Bruchteil von 180° zu berechnen und mit Pi zu multiplizieren, da die Winkel linear zueinender sind.
festlegung eines abbruckkriteriums
Das logischste Abbruchkriterium ist das erreichen einer gewissen Signifikanz. Wenn der gerade Berechnete Therm kleiner ist als eine Gewisse schwelle, z.B 10^-5, dann ist die Änderung am Gesamtergebnis so gering, dass weitere Iterationen nichts mehr bringen werden.
schrittweise berechnen des ergebniswertes
Das schreit nach einer Schleife. Da du hier eine Abbruchbedingung hast, empfiehlt sich eine do-while schleife:

Code: Alles auswählen

do
{
//Berechnen
}while(therm > SIGNIFIKANZ);
Wobei SIGNIFIKANZ eine Konstante mit deinem Abbruchwert ist, z.B 10^-5;
vorzeichenwechsel bei jedem schritt
Das kann man realisieren, indem man in einer Variable eine 1 speichert und in jedem Durchlauf mit -1 multipliziert und eben auch mit deinem berechneten Therm.

Dann zu deiner Reihenentwicklung

Code: Alles auswählen

sin(x)= x-(x³/3!)+(x^5/5!)+...
Es gibt in der math.h eine Funktion pow, für Potenzen. Es gibt aber keine Fakultät. Die kannst du aber gut in der Schleife mitberechnen, da sich ja bei jedem Durchlauf nur zwei zusätzliche Multiplikationen passieren.

Ich hoffe ich konnte dir weiterhelfen. Sollte irgendetwas nicht verständlich sein, bitte Meckern und Fragen :D

Mit freundlichen Grüßen

cloidnerux.
Redundanz macht wiederholen unnötig.
quod erat expectandum

sebix
Beiträge: 82
Registriert: Mo Nov 19, 2012 8:27 pm

Re: Sinus Reihenentwicklung

Beitrag von sebix » Fr Nov 01, 2013 12:16 pm

http://www.coding-board.de/showthread.p ... -mit-Sinus
Um inhaltsgleiche Posts zu verhindern...

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sinus Reihenentwicklung

Beitrag von cloidnerux » Fr Nov 01, 2013 1:32 pm

http://www.coding-board.de/showthread.p ... -mit-Sinus
Um inhaltsgleiche Posts zu verhindern..
Wir sollten einen Rang für Leute wie dich einführen, Post-Wächter oder so :D
Aber finde ich gut, dass jemand das nicht nur bemerkt sondern auch mitteilt, dass da in mehreren Foren gleichzeitig dieselbe Frage gestellt wird.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sinus Reihenentwicklung

Beitrag von Xin » Sa Nov 02, 2013 8:23 am

Andererseits finde ich es auch nicht schlimm, dass man sich auf der Suche nach einer Antwort auf mehrere Foren verteilt. Kein Forum kann zum Beispiel garantieren, dass es auf alle Fragen eine sinnvolle Antwort liefern kann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sebix
Beiträge: 82
Registriert: Mo Nov 19, 2012 8:27 pm

Re: Sinus Reihenentwicklung

Beitrag von sebix » Sa Nov 02, 2013 10:28 am

Ich ja auch nicht. Aber potentielle Antworter könnten sich einen Post sparen, wenn sie sehen, dass nebenan der gleiche Ansatz schon gepostet wurde.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sinus Reihenentwicklung

Beitrag von Xin » Sa Nov 02, 2013 10:55 am

sebix hat geschrieben:Ich ja auch nicht. Aber potentielle Antworter könnten sich einen Post sparen, wenn sie sehen, dass nebenan der gleiche Ansatz schon gepostet wurde.
Ich muss mal ein Daumen Hoch Smiley einfügen ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: Sinus Reihenentwicklung

Beitrag von darksider3 » So Nov 03, 2013 10:08 am

Auf die gefahr hin, das dies einen Fetten Spoiler darstellt, aber dennoch für die Nachleser interessant sein dürfte, welche nicht so viel von Mathe verstehen...

http://www4.cs.fau.de/Lehre/SS06/V_SPIC ... /D2-A4.pdf
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Antworten