Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Автоматика, матрицы и векторы.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

14.2. Математические классы на объектном Паскале

14.2.1. Класс комплексных чисел

//T_COMPLEX.PAS

unit T_Complex;

interface

uses math,dialogs;

type

TComplex = record

re,im:extended;

end;

Function CExp(c:TComplex):TComplex ;far; {Число е комплексной степени.}

Function CCPow(a1,a2:TComplex):TComplex;far;{а1^а2}

function Complex(r,i:real):TComplex;far; {Создание компл. Числа}

function Arg(c:TComplex):real;far; {Аргумент числа}

function CNorm(c:TComplex):real;far; {Модуль числа}

function CSumma(c1,c2:TComplex): TComplex;far;//Сумма

function CRazn(c1,c2:TComplex): TComplex;far;//Разность

function CMult(c1,c2:TComplex): TComplex;far;//Произведение

function CPow(c1:TComplex;s:real): TComplex;far;//Возведение в степень

function CEquiv(c1,c2:TComplex): boolean;far;//Сравнение

function CDiv(c1,c2:TComplex):TComplex;far; //Деление чисел

function CMultOnDig(c:TComplex;d:real): TComplex;far;//Умножение на действит. число

procedure MessageBox(s:string);far; //Сообщение

implementation

function CMultOnDig(c:TComplex;d:real):TComplex;

begin

result.re:=c.re*d;

result.im:=c.im*d;

end;

{Экспонента комплексного аргумента}

function CExp(c:TComplex):Tcomplex;

var res:TComplex;

begin

res.re:=Exp(c.re)*cos(c.im);

res.im:=Exp(c.re)*sin(c.im);

result:=res;

end;

{а1 возводится в степень а2}

function CCpow(a1,a2:TComplex):TComplex;

var f,t1,r1,u2,v2,r:real;

cx:TComplex;

begin

r1:=cnorm(a1);

u2:=a2.re;

v2:=a2.im;

t1:=arg(a1);

r:=power(r1,u2)*exp(-v2*t1);

f:=v2+ln(r1)+u2*t1;

cx.re:=r*cos(f);

cx.im:=r*sin(f);

result:=cx;

end;

{Ф-ция имитирующая действие конструктора - создаёт комплексное число с реальной частью r и вещественной i}

function Complex(r,i:real):TComplex;

var f:TComplex;

begin

f.re:=r;

f.im:=i;

result:=f;

end;

procedure MessageBox(s:string);

begin

MessageDlg(s,mtInformation,[mbOk],1);{Метод из модуля Dialogs}

end;

function Arg(c:TComplex):real; { Аргумент комплексного числа}

begin

result:=ArcTan2(c.im,c.re);{Лучше чем просто ArcTan из модуля System }

end;

function CNorm(c:TComplex):real; {Модуль комплексного числа}

begin

result:=sqrt(c.re*c.re+c.im*c.im);

end;

function CSumma(c1,c2:TComplex):TComplex;

// Находим сумму комплексных чисел

begin

result.re:=c1.re+c2.re;

result.im:=c1.im+c2.im;

end;

function CRazn(c1,c2:TComplex):TComplex;

// Находим разность комплексных чисел

begin

result.re:=c1.re-c2.re;

result.im:=c1.im-c2.im;

end;

function CMult(c1,c2:TComplex):TComplex;

// Находим произведение комплексных чисел

begin

result.re:=c1.re*c2.re-c1.im*c2.im;

result.im:=c1.re*c2.im+c2.re*c1.im;

end;

{Формула Муавра}

function CPow(c1:TComplex;s:real):TComplex;

// Возведение комплексного числа с1 в степень s

begin

result.re:=power(Cnorm(c1),s)*cos(arg(c1)*s);

result.im:=power(Cnorm(c1),s)*sin(arg(c1)*s);

end;

function CEquiv(c1,c2:TComplex):boolean;

// Сравнение комплексных чисел

begin

if (round(c1.re*1e+6)=round(c2.re*1e+6)) and (round(c1.im*1e+6)=round(c2.im*1e+6))

then result:=true else result:=false;

end;

function CDiv(c1,c2:TComplex):TComplex;

// Деление комплексных чисел

begin

if (c2.re=0) and (c2.im=0) then

begin MessageBox('Деление на ноль;(Модуль T_Complex)');

result:=complex(0,0);exit;

end;

result.re:=(c1.re*c2.re+c1.im*c2.im)/(c2.re*c2.re+ c2.im*c2.im);

result.im:=(c1.im*c2.re-c1.re*c2.im)/ (c2.re*c2.re+c2.im*c2.im);

exit;

end;

// End file !!!!!

end.