![]() |
Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich studiere im 3. Semester an einer Fachhochschule und habe nun auch Maschinenbauinformatik habe mich davor aber nie mit delphi befasst und nun haben wir wieder ein Praktikum und ich habe keine ahnung wie ich dort vorgehen muss. Ich hoffe ihr könnt mir helfen! Gruß Daniel |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Hattest du in Mathe schon Taylorreihen? Und was genau hast du schon gemacht und was verstehst du nicht?
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Ja, hatte in Mathe schon Taylorreihen.
Ich habe noch nichts gemacht weil ich nicht weiß wie ich Anfangen muss. (wie gesagt ist für mich neuland alles) |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
@Daniel1988
Die Taylorreihe mußt ja nicht selber herleiten, die Folge ergibt sich aus dem Arbeitsblatt. Zunächst brauchst Du eine Potenzfunktion (suche unter power), einer Funktion für Falkultät und die Umrechnung von Bogenmaß in Gradmaß (RadToDeg). Ist hier alles unter Suchen oder in der Delphi-Reference zu finden [Edit ]Außerdem müßte Dein Titel besser Entwicklung der Sinus-Funktion mittels einer Taylor-Reihe heißen, denn die Taylor-Reihe hast Du ja schon [/Edit] Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Zitat:
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Hallo habe jetzt einwenig mal probiert und habe es wenigstens schonmal geschaft eine sinusfunktion zu zeichnen. Nur zeichne ich jetzt alles aufeinmal und zweitens habe ich das nicht mit der Taylorreihe gemacht. Hoffe ihr könnte mir helfen wie ich nun weiter vorgehen muss. Habe mal mein Quellcode hier reingestellt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, h, x, y, xoffset, yoffset, ix, iy, endwert :integer; kopfstand : boolean; deltay, ydiffz,ymin, ymax, omega, sy, t :double; begin kopfstand:=true; omega:=2; h:=image1.height; ymin:=-1.1; ymax:=1.1; ydiffz:=ymax-ymin; deltay:=ydiffz/h; xoffset:=10; yoffset:=h div 2; with image1.canvas do begin moveto (xoffset,10); lineto (xoffset, h-10); moveto (image1.width-10, yoffset); pen.color:=clblue; end; Endwert:=trunc(2*pi/0.01/omega); for i:=0 to endwert do begin t:=i*0.01; sy:=sin(omega*t); x:=i; y:=trunc(sy/deltay); ix:=trunc(x+xoffset); with image1.Canvas do begin if kopfstand then begin y:=h-y; iy:=trunc(y-yoffset); end else iy:=trunc(y+yoffset); if i=0 then moveto(ix,iy) else lineto(ix,iy); end; end; end; |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Zeile 24:
Endwert auf pi/0.02/omega ändern (Soll ja nur bis 90 Grad sein) zeile 24: Statt for-to do die Button-Clicks zählen (hatte ich gerade eben ![]() Dann fügst Du im Design noch ein Memofeld ein und gibts für jeden Button-Click den Sinuswert aus. Die Taylorreihe für Sinus zeige ich dir dann im Delphi-Code Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Wenn das der Prof. Kettner sieht...
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Es ist doch nichts schlimmes. Er informiert sich doch schließlich und zeigt Engagement. Nur mal so, ich kenne Prof. Kettner auch und beschäftige mich zur zeit auch mit dieser Aufgabe ;-)
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Herzlich willkommen in der DP. :dp:
Gruß Wolfgang PS: Die anderen Praktikumsaufgaben interessieren mich auch! :) |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
danke für die freundliche Aufnahme :-)
(i-wann werde ich wahrscheinlich auch informative Beiräge leisten können :coder: ) Bei Gelegenheit kann ich die anderen Aufgaben hier auch mal Posten.. Ich habe eine weitere Frage, mir ergeht es auch wie daniel88. Den Teil den er bereits geleistet hatte stand bereits im Skript, welches ich auch übernommen hatte. 1.) Ich habe den Teil mit dem "power" in der Delphi Hilfe zwar gefunden, jedoch ist es sehr knapp beschrieben, so dass ich es nicht verstanden habe. 2.) Wie kann ich das was wir bereits erstellt haben in eine sin Funktion umwandeln, bei der die Werte einzelt in die Tabelle und in das ImageFeld eingetragen wird? Bei dem jetztigen zeigt es direkt die Sinus Kurve auf.. Würde mich sogar auf eine kleine hilfestellung freuen. Vielen Dank schonmal.. Gruß fh_beng |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
power(2,3) meint 2 hoch 3 und ergibt 8.
Zur Taylorreihe schaut Euch 'mal diesen Link an ![]() [Edit] Man muß ja nicht alles neu erfinden :) [/Edit] Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
na, muss mich auch mal outen hier als einer von kettners schülern :cheers:
und ich muss sagen, ich habs nun hinbekommen, der link zur Taylorreihe ist echt super, danke dafür! :dancer2: Da hats bei mir nähmlich am meisten gehakt. gruß hedi112 |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Na, dann auch herzlich willkommen im Club :dp:
Dann seid Ihr ja schon drei. Wäre nett, wenn ihr mir die anderen Aufgaben auch noch zukommen laßt. Wieviel Zeit ist eigentlich für diese Aufgabe vorgesehen? Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
als vorbereitung nen struktogramm schreiben zu hause, zeit unbekannt...
im praktikum: 90minuten zeit zum reinen schreiben des quelltextes... ich habs jetzt hinbekommen, aber ich finde einfach in 90minuten ist das nicht zu schaffen... lade heute abend die anderen aufgaben nochmal hoch! findet ihr die aufgabe angemmessen für die bearbeitungszeit? |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
90 Minuten sind ganz schön eng.
Das muß man schon eine Menge Routine hinter sich haben! Danke für das Hochladen. :) [OT] Wo studiert Ihr eigentlich ? [/OT] Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
in bielefeld
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Zitat:
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
@Wolfgang
ich sitze schon seit stunden daran und komme einfach nicht weiter.. :roll: Da ich mit dem Stoff noch nicht super "angefreundet" bin habe ich ein Verständnisproblem. Daher wollte ich dich noch mal um Hilfe bitten. Kann ich die Potenzfunktion und die Umwandlung "radtodeg" unter "Button1Click" durchführen oder muss ich das anders machen? So habe ich etwas versucht zu gestalten..
Delphi-Quellcode:
Welche Reihenfolge sollte ich am besten angehen. Ich hatte an sowas gedacht:
function RadToDeg(const Radians: Extended): Extended;
var rad,grad:real; begin grad:=rad*(80/pi); end; -> Variablen deklarieren -> Imagefeld mit einer Mittellinie -> Rad in Grad umwandeln -> Potenzfunktion für sinus erstellen -> Zählen der ButtonClicks -> Ausgeben in einem Imagefeld -> Ausgeben in einem memofeld -> .....?? |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Delphi-Quellcode:
die Funktionen, die Du benötigst, hast Du ja schon alle aus dem Link und darfst sie auch benutzten.
grad:=rad*(180/pi)
Vorsichtshalber würde ich in Kommentaren die Quelle angeben, dann ist alles legal. Im Button1.Click deklarierst nur Deine eigenen Variablen und rufst die Funktionen einfach auf. Ich hoffe damit kommst Du erstmal weiter, sonst arbeiten wir an Deinem Quelltext. PS: Warum tut Ihr drei Euch nicht einfach zusammen?
Delphi-Quellcode:
[Edit] my_root kann weg, wird ja nicht benötigt [/Edit]
implementation
{$R *.dfm} //====================My_Math_Functions============== //Quelle : [url]http://www.gohelmut.de/informatik/[/url] //delphi11_1/mymathfunctions.php function my_fakultaet(n:integer):real; Var i:Integer; s:real; Begin s:=1; for i:=1 to n do s:=s*i; result:=s; End; function my_pow(x:real;n:integer):real; Var s:real;i:integer; Begin s:=1; if n>0 then for i:=1 to n do s:=s*x; result:=s; End; function my_exp(x:real):real; Var s,ds,fak:real; i:integer; Begin s:=1; fak:=1; for i:=1 to steps do begin fak:=fak*i; ds:=my_pow(x,i)/fak; s:=s+ds; end; my_exp:=s; End; function my_rpow(x,y:real):real; Begin my_rpow:=my_exp(my_ln(x)*y); End; function my_root(x:real;n:integer):real; Begin my_root:=my_exp(my_ln(x)/n); End; function my_sin_rad(x:real):real; Var i,j:integer; s,ds:real; Begin s:=x; for i:=1 to steps do begin j:=2*i+1; ds:=power(-1,i)*power(x,j)/my_fakultaet(j); s:=s+ds; end; my_sin_rad:=s; End; function my_sin_grad(x:real):real; Begin my_sin_grad:=my_sin_rad(x*my_pi/180); End; procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.Button1Click(Sender: TObject); begin // Dein Code end; end. |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Alles klar, ich habe die Funktionen nun benutzt. Da stieß wieder an einem kleinem Problem. Die benutzung von "power" klappt bei mir nicht so wie erwünscht. Ich dachte, dass es Delphi automatisch erkennt und zugewiesen bekommt?!
Bei mir kommt egal was ich versucht habe, diese Fehlermeldung: [Fehler] Unit1.pas(32): Undefinierter Bezeichner: 'power' ps.: Womöglich kennen wir uns nicht, daher das Problem mit zusammen setzen ;-) |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Füge einmal die Unit math in der uses-Klausel hinzu.
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
@Detlef schrieb:
Zitat:
Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Die kommen in der Form aber auch nicht ohne math aus.
Zitat:
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
klar gehts
![]() Taylorreihenentwicklung ist jedoch *ein* Standardverfahren, eine Funktion nach einem Polynom zu entwickeln, nur so um dem Threadtitel noch etwas Praxisrelevanz einzuhauchen |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Es hat ja auch niemand etwas Gegenteiliges behauptet.
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
@Vorredner:
Ihr habt beide recht. Die Zeilen mit
Delphi-Quellcode:
hatte ich übersehen. Das geht natürlich auch mit einer eigenen Power-Funktion.
ds:=power(-1,i)*power(x,j)/my_fakultaet(j);
[Edit] In der Originalquelle wurde Math.Power dazu benutzt, verschiedene Delphi-Funktionen mit Funktionen zu vergleichen, die mit Taylorreihen gecodet wurden. Ansonsten läüft das ganze natürlich auch ohne die Unit Math. [/Edit] |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
vielen vielen Dank, das Problem mit der "power" Funktion habe ich nun beheben können. (das hätte auch unser Prof. auch wirklich sagen können;-) )
Bis jetzt habe ich nur das hier erstellen können...
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Image1: TImage; Button2: TButton; memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } function my_fakultaet(n:integer):real; function my_pow(x:real;n:integer):real; function my_exp(x:real):real; function my_ln (x:real):real; function my_rpow(x,y:real):real; function my_root(x:real;n:integer):real; function my_pi:real; function my_sin_rad(x:real):real; function my_sin_grad(x:real):real; public { Public-Deklarationen } end; var Form1: TForm1; steps:integer=10; implementation {$R *.dfm} function Tform1.my_fakultaet(n:integer):real; Var i:Integer; s:real; Begin s:=1; for i:=1 to n do s:=s*i; result:=s; End; function Tform1.my_pow(x:real;n:integer):real; Var i:integer; s,ds:real; Begin s:=1; if n>0 then for i:=1 to n do s:=s*x; result:=s; End; function Tform1.my_exp(x:real):real; Var i:integer; s,ds,fak:real; Begin s:=1; fak:=1; for i:=1 to steps do begin fak:=fak*i; ds:=my_pow(x,i)/fak; s:=s+ds; end; my_exp:=s; End; function Tform1.my_ln (x:real):real; Var i,n:integer; s,ds:real; Begin s:=0; for i:=1 to steps do begin n:=2*i-1; ds:=(x-1)/(x+1); ds:=my_pow(ds,n)*1/n; s:=s+ds; end; my_ln:=s*2; End; function Tform1.my_rpow(x,y:real):real; Var i:integer; s,ds:real; Begin my_rpow:=my_exp(my_ln(x)*y); End; function Tform1.my_root(x:real;n:integer):real; Var i:integer; Begin my_root:=my_exp(my_ln(x)/n); End; function Tform1.my_pi :real; Var i:integer; s,ds:real; Begin s:=1; for i:=1 to steps do begin ds:=power(-1,i)/((2*i+1)* power(3,i)); s:=s+ds; end; my_pi:=6/sqrt(3)*s; End; function Tform1.my_sin_rad(x:real):real; Var i,j:integer; s,ds:real; Begin s:=x; for i:=1 to steps do begin j:=2*i+1; ds:=power(-1,i)*power(x,j)/my_fakultaet(j); s:=s+ds; end; my_sin_rad:=s; End; function Tform1.my_sin_grad(x:real):real; Var i:integer; Begin my_sin_grad:=my_sin_rad(x*my_pi/180); End; procedure TForm1.Button1Click(Sender: TObject); Var grad,rad,s,ds:real; x,xm,y, i, h, xoffset, yoffset, ix, iy, endwert :integer; kopfstand :boolean; deltay, ydiffz, ymin, ymax, omega, sy, t :double; begin grad:=rad*(180/pi); image1.picture:=nil; x:=0; y:=image1.Height div 2; xm:=image1.width; image1.Canvas.moveto(x,y); image1.canvas.lineto(xm,y); begin kopfstand:=true; omega:=2; h:=image1.Height; ymin:=-1.1; ymax:=1.1; ydiffz:=ymax-ymin; deltay:=ydiffz/h; xoffset:=10; yoffset:=h div 2; with image1.Canvas do begin moveto(x,0); lineto(x,h); moveto(x,y); lineto(image1.width,y); pen.color:=clblack; end; Endwert:=trunc(2*pi/0.02/omega); for i:=0 to endwert do begin t:=i*0.02; sy:=sin(omega*t); x:=i; y:=trunc(sy/deltay); ix:=trunc(x+xoffset); with image1.canvas do begin if kopfstand then begin y:=h-y; iy:=trunc(y-yoffset) end else iy:=trunc(y+yoffset); if i=0 then moveto(ix,iy) else lineto(ix,iy); end; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin image1.Picture:=nil; end; end. |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
also ich hab mit einem von den studenten gesprochen, die im praktikum mit helfen. der hat mir gegenüber gesagt, das wir die funktiopn power benutzen dürfen.
ich hab mal eine generelle frage: ist die sin(x) funktion in delphi auch eine funktion aus der unit math oder funktioniert die auch so? hat jetzt zwar nichts direkt mit dem thema zu tun, interresiert mich aber einfach! |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
sin(x) und cos(x) sind fest verdrahtete Funktionen der CPU bzw. FPU,
die ist auch so verfügbar, z.B. im Windows-Taschenrechner. Aber Ihr sollt ja den Sinus aus der Taylorreihe nehmen [Edit ]Wenn Ihr power benutzen dürft, dann braucht ihr doch nur noch die eigene Fakultät und den eigenen sin_rad. Siehe Post #21. Um auf die Genauigkeit der FPU zu kommen, braucht my_sin 28 steps. Hoffe, das hilft Euch weiter [/Edit] Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
joa, das hilft, dann weiß ich bescheid. danke für die schnelle antwort
so auf prozessorbezug fehlt mir noch etwas die übung, aber bin dabei ordentlich dabei tutorials abzuarbeiten... wie man die eigene fakultät berechnet steht ja weiter oben im link! also es läuft bei mir jetzt und ich muss sagen, dass es schonmal interressant war das zu machen. |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Das mit dem Prozessorbezug kannst Du erstmal weit hinten anstellen.
Vielleicht lernt Ihr später Programmierung in Assembler. Das mit den Tutorials ist löblich :) Vielleicht zeigt Ihr mir ja 'mal Eure Ergebnisse und die anderen Arbeitsblätter. Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Liste der Anhänge anzeigen (Anzahl: 1)
hier mal mein ergebnis. denke das ist ganz ok. mal sehen was der professor morgen dazu sagt...
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Was dein Prof. sagt, interessiert mich auch.
Schön wäre noch, wenn man vorab die Anzahl der Steps der Tayorreiche wählen könnte. Aber das Ganze sieht doch schon ganz brauchbar aus, :) Gruß Wolfgang |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
respekt, ich bin nicht mal ansatzweise soweit gekommen :thumb:
|
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
naja, vorwählen wäre möglich, aber in der aufgabenstellung steht ja, das mit jeden klick der taste sinus berechnen ein taylorglied mehr genommen werden soll.
deswegen habe ich das so gemacht, aber voreinstellen wäre mit einem einfachen editfeld ja auch kein problem... |
Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Sollte ja keine Kritik sein, nur ein Vorschlag. :mrgreen:
@beide: Tauscht Euch doch einfach aus, EMail, Telefon, Skype ...und und und Schönen Gruß an Euren Prof. Ist 'ne schöne Aufgabe Gruß Wolfgang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz