![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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 by Thomas Breitkreuz