- •Автоматика
- •1. Управление и регулирование: основные понятия и определения
- •2. О классификации систем управления
- •3. Физические основы измерительных преобразователей автоматических систем
- •3.1. Физика преобразователей температуры
- •3.2. Физика измерения усилий
- •3.3. Методы измерения параметров движения
- •3.4. Физические основы измерения состава и концентрации вещества
- •4. Основные задачи исследования автоматических систем
- •5. Операционное исчисление и его применение к исследованию динамики стационарных линейных систем
- •5.1. Общие сведения
- •5.2. Решение линейных уравнений с постоянными коэффициентами
- •6. Передаточные функции линейных динамических систем
- •7. Частотные характеристики линейных динамических систем
- •8. Введение в теорию устойчивости линейных стационарных систем авторегулирования
- •9. О качественном анализе динамических систем
- •10. О проблеме оптимального управления
- •11. Динамическое программирование как математический метод решения задач оптимального управления
- •12. Лабораторный практикум по компьютерному моделированию линейных стационарных динамических систем операторным методом
- •12.1. Введение
- •12.2. Лабораторная работа №1
- •12.3. Лабораторная работа №2
- •12.4. Лабораторная работа №3
- •12.5. Лабораторная работа №4
- •12.6. Лабораторная работа №5
- •12.7. Лабораторная работа №6
- •12.8. Лабораторная работа №7
- •13. Программная реализация операторного метода анализа динамики линейных систем
- •13.1.1. Класс линейных дифуравнений с постоянными коэффициентами
- •13.1.2. Форма основной программы
- •13.1.3. Модуль основной программы
- •13.1.4. Форма ввода данных
- •13.1.5. Заголовочный файл модуля ввода данных
- •13.1.6. Модуль ввода данных
- •13.1.7. Заголовочный файл инициализационного модуля
- •13.1.8. Инициализационный модуль
- •13.1.9. Файл проекта
- •13.2. Исходные тексты программы на языке Object Pascal, выполненной в среде Delphi 4
- •13.2.1. Форма изменения размеров пера
- •13.2.2. Модуль изменения размеров пера
- •13.2.3. Форма ввода данных
- •13.2.4. Модуль ввода данных
- •13.2.5. Форма основной программы
- •13.2.6. Модуль основной программы
- •13.2.7. Форма сведений о программе
- •13.2.8. Модуль сведений о программе
- •13.2.9. Файл конфигурации
- •13.2.10. Файл проекта
- •14. Приложения
- •14.1.1. Базовый класс параметризованных векторов
- •14.1.2. Параметризованный класс матриц
- •14.1.3. Параметризованный класс полиномов
- •14.1.4. Класс полиномиальных уравнений
- •14.2. Математические классы на объектном Паскале
- •14.2.1. Класс комплексных чисел
- •14.2.2. Класс действительных векторов
- •14.2.3. Класс комплексных векторов
- •14.2.4. Класс действительных матриц
- •14.2.5. Класс комплексных матриц
- •14.2.6. Класс полиномов
- •Литература
- •Автоматика
- •324050, Кривой Рог-50, пр. Металлургов, 28.
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.
