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
 
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, 12: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
 


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 19:37 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