mikrocontroller.net

Forum: PC-Programmierung sin x mit c berechnen


Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir müssen in der Schule den sin(x) mit Hilfe von C berechnen, wobei
der Sinus über ein Taylor-Polynom (Reihe) definiert wird.
Man soll am Schluß nur den x-Wert eingeben und das Programm soll dann
den errechneten Sinus-Wert ausgeben.

Hat irgend jemand eine Ahnung wie das geht, ich als C-Neuling bis jetzt
noch nicht.

Gruß Martin

Autor: bruzzler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also mathematische funktionen sin in C in der math.h definiert
Info z.B. hier http://www.fh-fulda.de/~klingebiel/c-stdlib/math.htm

oder bei google einfach math.h oder cmath eingeben

Autor: Werner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, er meint eher sowas...

Autor: martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@werner ja auf das läufts raus, allerdings nicht mit der e-Funktion und
komplex sondern so wie hier http://de.wikipedia.org/wiki/Sinus
Weis jetzt nur nicht was genau der Unterschied zum Taylor-Polynom ist

Autor: waquner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde folgendes vorschlagen:

float sin(x, genauigkeit) {
  float temp;

  temp = x;
  for(int n=0;n<genauigkeit;n++) {
    temp += pow(-1,n) * (pow(x,2*n+1)/fak(2*n + 1));
  }
  return temp;
}


double fak(x) {
  double temp;
  for(int i=1;i<=x;i++) temp*=i;
  return temp;
}


nicht getestes...sollt aber hinhaun...

Autor: martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab leider die Aufgabenstellung etwas fehlintepretiert, bei mir muss
man den Wert in Grad eingeben, welcher dann ins Bogenmaß umgewandelt
wird. Unter Genauigkeit hatte ich eigentlich die Anzahl der
Rechenschritte verstanden, wenn man bei mir z.B. 30 eingibt wird 30 mal
das x^n ausgerechnet und dann abgebrochen.

Die Aufgabenstellung lautet aber: "es soll der sinus einer zahl
berechnet werden, wie das geht steht in jeder Formelsammlung!! Also
keine Standart c++ funktion benutzen, sondern ein Programm das mit
Hilfe von Funktionsaufrufen die Fakultät. die Hochzahl und den Sinus
berechnet. Diese 3 Sachen sind auszuprogrammieren!!!! Näheres gibts
Montags bzw. Donnerstags während des Praktikums!! Sinnvolles
Abruchkriterium für die Genauigkeit der Berechnung 0.000001! Das ganze
soll dann auch noch mit der in C++ Standartfunktion verglichen
werden!"

Vielleicht kann mir jemand weiterhelfen, hab mein Program mal
angehängt.

Gruß Martin

Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ist glaub ich was ähnliches, musst du nur noch entprechend erweitern

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@tobi, sieht mal nicht schlecht aus, muss man bei dir den x-Wert in
Radiant oder in Grad eingeben?

weißt du wie das mit der Genauigkeitsabfrage am Anfang gehen könnte,
also z.B. Genauigkeit von 0,001 ?

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die genauigkeit könnte man evtl dadruch machen, dass man die differenz
von 2 aufeinanderfolgenden ergebnissen berechnet und diese mit einer
vorgegebenen genauigkeit vergleicht.
allerdings solltest du nicht mehr als die benutzten 20 durchläufe
machen, da die fakultät sonst zu gross wird und falsche ergebnisse
kommen (deswegen hab ich schon __int64 benutzt)

das ergebnis ist in rad

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

du wirst doch hier nicht deine Hausaufgaben vom Forum machen lassen.
Wenn das mal dein Tutor erfährt :-)

Die Genauigkeit ergibt sich aus dem Term den du immer wieder
dazuaddierst/subtrahierst. Also das x^n/n!. Wenn dieser Wert kleiner
als die geforderte Ganauigkeit ist hast du die benötigte Genauigkeit
erreicht.


Matthias

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

nur mal so zur Info. In der Praxis wird der sin(x) durch ein Polynom
(z.B. ax^2+bx+c)approximiert. Dazu reicht es aus, ein Polynom mit
hinreichender Genauigkeit im Bereeich von [0..pi/2] zu finden. Der Rest
wird durch Spiegelung und Verschiebung berechnet. Das Polynom wird nach
dem Horner-Schema(nur Multiplikationen, keine Potenzen) berechnet.
Hoffentlich wars das Hornerschema?! Ist schon so lange her ;-)

Grüße
Oliver

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"du wirst doch hier nicht deine Hausaufgaben vom Forum machen lassen.
Wenn das mal dein Tutor erfährt :-)"

ich hab auch nur meine hausaufgaben gepostet ;)

"Das Polynom wird nach dem Horner-Schema(nur Multiplikationen, keine
Potenzen) berechnet.Hoffentlich wars das Hornerschema?!"

jep, war es. hast du irgendwo einen guten link, der dieses verfahren
mit den polynomen genauer erklärt?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>jep, war es. hast du irgendwo einen guten link, der dieses verfahren
mit den polynomen genauer erklärt?
Nein.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das Rechnen doch noch nicht ganz verlernt :-)

Irgendwie so z.B.:

ax^3+bx^2+cx+d = ((ax+b)x+c)x+d

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

simple Interpolation mittels Polynom. Du legst drei Punkte auf die
Sinuskurve von 0 bis pi/2 und interpolierst die mit einem Polynom
zweiten Grades.

Matthias

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Irgendwie so z.B.:

ax^3+bx^2+cx+d = ((ax+b)x+c)x+d"


Ja so gehts; einfach die Potenzen sukkesiv ausklammern. Ist nicht nur
schneller, sondern bringt auch wesentlich geringere Rundungsfehler.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.