AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Entwicklung der Sinus-Funktion in einer Taylor-Reihe
Thema durchsuchen
Ansicht
Themen-Optionen

Entwicklung der Sinus-Funktion in einer Taylor-Reihe

Ein Thema von Daniel1988 · begonnen am 22. Nov 2009 · letzter Beitrag vom 29. Nov 2009
Antwort Antwort
Seite 3 von 4     123 4      
fh_beng

Registriert seit: 28. Nov 2009
7 Beiträge
 
Delphi 7 Professional
 
#21

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 28. Nov 2009, 18:08
@Wolfgang

ich sitze schon seit stunden daran und komme einfach nicht weiter..

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:
  function RadToDeg(const Radians: Extended): Extended;
    var rad,grad:real;

      begin
      grad:=rad*(80/pi);
      end;
Welche Reihenfolge sollte ich am besten angehen. Ich hatte an sowas gedacht:

-> 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
-> .....??
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#22

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 28. Nov 2009, 18:41
grad:=rad*(180/pi) die Funktionen, die Du benötigst, hast Du ja schon alle aus dem Link und darfst sie auch benutzten.

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:
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.
[Edit] my_root kann weg, wird ja nicht benötigt [/Edit]
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
fh_beng

Registriert seit: 28. Nov 2009
7 Beiträge
 
Delphi 7 Professional
 
#23

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 00:42
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#24

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 00:44
Füge einmal die Unit math in der uses-Klausel hinzu.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#25

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 10:37
@Detlef schrieb:
Zitat:
Füge einmal die Unit math in der uses-Klausel hinzu.
...oder benutze die "eigenen" Funktionen aus Post #21.


Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#26

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 10:46
Die kommen in der Form aber auch nicht ohne math aus.
Zitat:
ds:=power(-1,i)*power(x,j)/my_fakultaet(j);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#27

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 11:06
klar gehts ohne unit math, ist doch Sinn und Zweck der Reihenentwicklung, nicht? Nunja, vielleicht ist die Vorgehensweise etwas unklar, aber das Vorgehen ist von Taylorreihenentwicklung nicht so grundverschieden - es wird nur noch eins draufgesetzt und nach dem Abbrechen nochmal gefittet

Taylorreihenentwicklung ist jedoch *ein* Standardverfahren, eine Funktion nach einem Polynom zu entwickeln, nur so um dem Threadtitel noch etwas Praxisrelevanz einzuhauchen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#28

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 11:08
Es hat ja auch niemand etwas Gegenteiliges behauptet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#29

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 11:31
@Vorredner:

Ihr habt beide recht.
Die Zeilen mit
ds:=power(-1,i)*power(x,j)/my_fakultaet(j); hatte ich übersehen. Das geht natürlich auch mit einer eigenen Power-Funktion.

[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]
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
fh_beng

Registriert seit: 28. Nov 2009
7 Beiträge
 
Delphi 7 Professional
 
#30

Re: Entwicklung der Sinus-Funktion in einer Taylor-Reihe

  Alt 29. Nov 2009, 13:16
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz