Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Komplexe Zahlen: Potenzen

  Alt 1. Feb 2008, 02:39
Das ganze lässt sich ein wenig aufdröseln. Der Ansatz lautet im Reellen wie im Komplexen: a^b = exp(b*ln(a))

Du brauchst also nur noch die komplexen Varianten der Exponentialfunktion und des natürlichen Logarithmus, und kannst dann sehr elegant 2 komplexe Argumente miteinander Potenzieren.

Exp(C):
Delphi-Quellcode:
function expC(const C : TComplex) : TComplex;
var
  sn, cs : extended;
  t : double;
begin
  sincos(C.i, sn, cs);
  t := exp(C.r);
  result.r := t * cs;
  result.i := t * sn;
end;
Ln(C):
Delphi-Quellcode:
function lnC(const C : TComplex) : TComplex;
begin
  result.r := ln(sqrt(sqr(C.r)+sqr(C.i)));
  result.i := argC(C).r;
end;
Wobei du hier noch argC() brauchst:
Delphi-Quellcode:
function argC(const C : TComplex): double;
var
  temp : double;
begin
  result := 0;
  temp := 0;
  if (C.r = 0) and (C.i = 0) then Exit;

  if C.i <> 0 then
  begin
    result := pi / 2 * Sign(C.i);
    Exit;
  end
  else
  begin
    if C.r > 0 then
    begin
      result := 0;
      Exit;
    end
    else
    begin
      result := pi;
      Exit;
    end;
  end;

  if C.r <> 0 then
    temp := ArcTan(Abs(C.i / C.r));

  if C.r > 0 then
  begin
    if C.i > 0 then
    begin
      result := temp;
      Exit;
    end
    else
    begin
      result := -temp;
      Exit;
    end;
  end
  else
  begin
    if C.i > 0 then
    begin
      result := pi - temp;
      Exit;
    end
    else
    begin
      result := temp - pi;
      Exit;
    end;
  end;
end;
Schaut erstmal wild aus, funktioniert aber auch.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat