Разработка программного обеспечения для реализации арифметических операций над комплексными числами

СОДЕРЖАНИЕ



	Введение

	1. Постановка задачи

			2. Математические и алгоритмические основы решения задачи

	2.1 Понятие о комплексных числах

	2.2 Действия с комплексными числами

	2.2.1 Сложение комплексных чисел

	2.2.2 Вычитание комплексных чисел

	2.2.3 Произведение комплексных чисел

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

			3. Программная реализация решения задачи

	4. Пример выполнения программы

			Заключение

			Список использованных источников и литературы


ВВЕДЕНИЕ



Решение многих задач физики и техники приводит к квадратным уравнениям с отрицательным дискриминантом. Эти уравнения не имеют решения в области действительных чисел. Но решение многих таких задач имеет вполне определенный физический смысл. Значение величин, получающихся в результате решения указанных уравнений, назвали комплексными числами.

Комплексные числа широко использовал отец русской авиации Н.Е. Жуковский (1847 – 1921) при разработке теории крыла, автором которой он является.

Комплексные числа и функции от комплексного переменного находят применение во многих вопросах науки и техники.

Цель настоящей курсовой работы: разработка программного обеспечения для реализации арифметических операций над комплексными числами.


1. Постановка задачи



Требуется разработать программу, реализующую арифметические операции над комплексными числами, опираясь на следующие правила выполнения операций:

1) Сложение: .

2) Вычитание: .

3) Умножение: .

4) Деление: .

Пример 1.

Выполнить сложение двух комплексных чисел:  и .

	.

Ответ: .

Пример 2.

Выполнить вычитания двух комплексных чисел:  и .

	.

Ответ: .

Пример 3.

Выполнить умножение двух комплексных чисел:  и .

	.

Ответ: .

Пример 4.

Выполнить деление двух комплексных чисел:  и .

	.

Ответ: i.


2. Математические и алгоритмические основы решения задачи



2.1 Понятие о комплексных числах



Для решения алгебраических уравнений недостаточно действительных чисел. Поэтому естественно стремление сделать эти уравнения разрешимыми, что в свою очередь приводит к расширению понятия числа. Например, для того чтобы любое уравнение x+a=b имело корни, положительных чисел недостаточно и поэтому возникает потребность ввести отрицательные числа и нуль.

Древнегреческие математики считали, что a=c и b=а только натуральные числа, но в практических расчетах за два тысячелетия до нашей эры в Древнем Египте и Древнем Вавилоне уже применялись дроби. Следующим важным этапом в развитии понятия о числе было введение отрицательных чисел – это было сделано китайскими математиками за 2 века до нашей эры. Отрицательные числа применял в 3 веке нашей эры древнегреческий математик Диофант, знавший уже правила действий над ними, а в 7 веке нашей эры эти числа подробно изучили индийские ученые, которые сравнивали такие числа с долгом. С помощью отрицательных чисел можно было единым образом описывать изменение величин. Уже в 8 веке нашей эры было установлено, что квадратный корень из положительного числа имеет два значение - положительное и отрицательное, а из отрицательных чисел квадратные корни извлечь нельзя: нет такого числа х, чтобы х2 = -9. В 16 веке в связи с изучением кубических уравнений оказалось необходимым извлекать квадратные корни из отрицательных чисел. В формуле для решения кубических уравнений содержатся кубические и квадратные корни. Эта формула безотказно действует в случае, когда уравнение имеет один действительный корень (например, для уравнения  х3+3х-4=0), а если оно имело 3 действительных корня (например, х3-7х+6=0), то под знаком квадратного корня оказывалось отрицательное число. Получалось, что путь к этим 3 корням уравнения ведет через невозможную операцию извлечения квадратного корня из отрицательного числа.

Чтобы объяснить получившийся парадокс, итальянский алгебраист Дж. Кардано в 1545 предложил ввести числа новой природы. Он показал, что система уравнений х+у=10, ху=40 не имеющая решений в множестве действительных чисел, имеет решение всегда , , нужно только условиться действовать над такими выражениями по правилам обычной алгебры и считать, что . Кардано называл такие величины  «чисто отрицательными» и даже «софистически отрицательными», считая их бесполезными и стремился не применять их. В самом деле, с помощью таких чисел нельзя выразить ни результат измерения какой-нибудь величины, ни изменение этой величины. Но уже в 1572 г. вышла книга итальянского алгебраиста Р. Бомбелли, в котором были установлены первые правила арифметических операций над такими числами, вплоть до извлечения из них кубических корней. Название «мнимые числа» ввел в 1637г. французский математик и философ Р. Декарт, а в 1777г. один из крупнейших математиков VIII века Х. Эйлер предложил использовать первую букву французского числа (мнимой единицы), этот символ вошел во всеобщее употребление благодаря К. Гауссу (1831г).

В течение 17 века продолжалось обсуждение арифметической природы мнимостей, возможности дать им геометрическое истолкование. Постепенно развивалась техника операций над комплексными числами. На рубеже 17-18 веков была построена общая теория корней n-й степени сначала из отрицательных, а впоследствии и из любых комплексных чисел. 

В конце 18 века французский математик Ж. Лагранж смог сказать, что математический анализ уже не затрудняют мнимые величины. С помощью комплексных чисел научились выражать решения линейных дифференциальных уравнений с постоянным коэффициентом. Такие уравнения встречаются, например, в теории колебаний материальной точки в сопротивляющейся среде. 

Я. Бернулли применил комплексные числа для вычисления интегралов. Хотя в течении 18 века с помощью комплексных чисел были решены многие вопросы, в том числе и прикладные задачи, связанные с картографией, гидродинамикой и т. д., однако еще не было строго логического обоснования теории этих чисел. Поэтому французский ученый П. Лаплас считал, что результаты, получаемые с помощью мнимых чисел, - только наведение, приобретающие характер настоящих истин лишь после подтверждения прямыми доказательствами. В конце 18- начале 19 веков было получено геометрическое истолкование комплексных чисел. Датчанин Г. Вессель, француз Ж. Арган и немец К. Гаусс независимо друг от друга предложили изображать комплексное число  точкой М(а,b) на координатной плоскости. Позднее оказалось, что еще удобнее изображать число не самой точкой М, а вектором ОМ, идущим в эту точку из начала координат. При таком истолковании сложению и вычитанию комплексных чисел соответствуют эти же операции над векторами. 

Геометрические истолкования комплексных чисел позволили определить многие понятия, связанные с функциями комплексного переменного, расширило область их применения. Стало ясно, что комплексные числа полезны во многих вопросах, где имеют дело с величинами, которые изображаются векторами на плоскости: при изучении течения жидкости, задач теории упругости, в теоретической электротехнике.



2.2 Действия с комплексными числами



Рассмотрим решение квадратного уравнения х2 +1 = 0. Отсюда х2  = -1. Число х, квадрат которого равен –1, называется мнимой единицей и обозначается i. Таким образом , i2 = -1, откуда . Решение квадратного уравнения, например, х2 – 8х + 25 = 0, можно записать следующим образом: 

.

Числа вида 4+3i и 4-3i называют комплексными числами. В общем виде комплексное число записывается а + bi, где a и b- действительные  числа, а i – мнимая единица. Число а называется действительной частью комплексного числа, bi-мнимой частью этого числа, b- коэффициентом мнимой части комплексного числа.



2.2.1 Сложение комплексных чисел

Суммой двух комплексных чисел z1 = a + bi и z2 = c + di называется комплексное число 



z = (a+c) + (b+d)i



Числа a + bi и a-bi называются сопряженными. Их сумма равна действительному числу 2а, 



(а+bi) + (а-bi) = 2а.



Числа а+bi и -a-bi называются противоположными. Их сумма равна нулю. Комплексные числа равны, если равны их действительные части и коэффициенты мнимых частей: а+bi = c+di, если a = c, b = d.   Комплексное число равно нулю тогда, когда его действительная часть и коэффициент мнимой части равны нулю, т.е. z=a + bi = 0, если a=0, b=0.  

Действительные числа являются частным случаем комплексных чисел. Если b=0, то a+bi=a - действительное число. Если а = 0, , то a + bi = bi – чисто мнимое число. Для комплексных чисел справедливы переместительный и сочетательный законы сложения. Их справедливость следует из того, что сложение комплексных чисел по существу сводится к сложению действительных частей и коэффициентов мнимых частей, а они являются действительными числами, для которых справедливы указанные законы. 



2.2.2 Вычитание комплексных чисел

Вычитание комплексных чисел определяется как действие, обратное сложению: разностью двух комплексных чисел a + bi  и  с + di называется комплексное число х + уi, которое в сумме с вычитаемым дает уменьшаемое. Отсюда, исходя из определения сложения и равенства комплексных чисел получим два уравнения, из которых найдем, что х = а-с, у = b-d. Значит, (а+bi) - (c+di) = (a-c) + (b-d)i. 



2.2.3 Произведение комплексных чисел

Произведение комплексных чисел z1=a+bi и z2=c+di называется комплексное число



z =(ac-bd) + (ad + bc)i,   z1z2 = (a + bi)(c + di) = (ac - bd) + (ad + bc)i.



Легко проверить, что умножение комплексных чисел можно выполнять  как умножение многочленов с заменой i2 на –1. Для умножения комплексных чисел также справедливы переместительный и сочетательный законы, а также распределительный закон умножения по отношению к сложению. 

Из определения умножения получим, что произведение сопряженных комплексных чисел равно действительному числу: (a + bi)(a - bi) = a2 + b2



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

Деление комплексных чисел, кроме деления на нуль, определяется как действие, обратное умножению. Конкретное правило деления получим, записав частное в виде дроби и умножив числитель и знаменатель этой дроби на число, сопряженное со знаменателем:


.

	
3. Программная реализация решения задачи



Файл UComplex.h

//---------------------------------------------------------------------------

#ifndef UComplexH

#define UComplexH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include "HandTuning.h"

#include <ExtCtrls.hpp>

#include <Menus.hpp>

//---------------------------------------------------------------------------

class TfrmComplex : public TForm

{

__published:// IDE-managed Components

TButton *btnCalc;

THandTuning *Real1;

THandTuning *Img1;

TLabel *Label1;

TLabel *Label2;

THandTuning *Real2;

THandTuning *Img2;

TLabel *Label3;

TRadioGroup *rgrOperation;

TLabel *Label4;

THandTuning *resReal;

THandTuning *resImg;

TLabel *Label5;

TLabel *Label6;

TLabel *Label7;

TButton *btnExit;

TButton *btnClear;

TLabel *Label8;

TLabel *Label9;

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TMenuItem *N5;

TMenuItem *N6;

TMenuItem *N7;

void __fastcall btnCalcClick(TObject *Sender);

void __fastcall btnExitClick(TObject *Sender);

void __fastcall btnClearClick(TObject *Sender);

void __fastcall NClick(TObject *Sender);

private:// User declarations

void __fastcall Sum(double r1, double img1, double r2, double img2, double &r, double &img);

void __fastcall Subtr(double r1, double img1, double r2, double img2, double &r, double &img);

void __fastcall Mult(double r1, double img1, double r2, double img2, double &r, double &img);

void __fastcall Div(double r1, double img1, double r2, double img2, double &r, double &img);

public:// User declarations

__fastcall TfrmComplex(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TfrmComplex *frmComplex;

//---------------------------------------------------------------------------

#endif

Файл UComplex.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "UComplex.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "HandTuning"

#pragma resource "*.dfm"

TfrmComplex *frmComplex;

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::Sum(double r1, double img1, double r2, double img2, double &r, double &img)

{

r = r1 + r2;

img = img1 + img2;

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::Subtr(double r1, double img1, double r2, double img2, double &r, double &img)

{

r = r1 - r2;

img = img1 - img2;

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::Mult(double r1, double img1, double r2, double img2, double &r, double &img)

{

r = r1 * r2 - img1 * img2;

img = r1 * img2 + img1 * r2;

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::Div(double r1, double img1, double r2, double img2, double &r, double &img)

{

if((r2 * r2 + img2 * img2) == 0)

{

Application->MessageBoxA(L"При выполнении операции деления \nвозникла ошибка: деление на ноль. \nПроверьте числа.",

L"Ошибка", MB_OK + MB_ICONERROR);

return;

}

r = (r1 * r2 + img1 * img2) / (r2 * r2 + img2 * img2);

img = (r2 * img1 - r1 * img2) / (r2 * r2 + img2 * img2);

}

//---------------------------------------------------------------------------

__fastcall TfrmComplex::TfrmComplex(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::btnCalcClick(TObject *Sender)

{

double r1 = Real1->Value;

double img1 = Img1->Value;

double r2 = Real2->Value;

double img2 = Img2->Value;

double real = 0;

double img = 0;

switch(rgrOperation->ItemIndex)

{

case 0:

Sum(r1, img1, r2, img2, real, img);

break;

case 1:

Subtr(r1, img1, r2, img2, real, img);

break;

case 2:

Mult(r1, img1, r2, img2, real, img);

break;

case 3:

Div(r1, img1, r2, img2, real, img);

break;

}

resReal->Value = real;

resImg->Value = img;

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::btnExitClick(TObject *Sender)

{

this->Close();

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::btnClearClick(TObject *Sender)

{

Real1->Value = 0;

Img1->Value = 0;

Real2->Value = 0;

Img2->Value = 0;

resReal->Value = 0;

resImg->Value = 0;

}

//---------------------------------------------------------------------------

void __fastcall TfrmComplex::NClick(TObject *Sender)

{

rgrOperation->ItemIndex = ((TMenuItem*)Sender)->Tag;

btnCalc->Click();

}

//---------------------------------------------------------------------------



4. Пример выполнения программы



Пример 1



 

Рисунок 1 – Входные данные


Пример 2





Рисунок 2 – Выходные данные



Пример 3





Рисунок 3 – Входные данные



Пример 4





Рисунок 4 – Входные данные


Пример 5





Рисунок 5 – Входные данные



Пример 6





Рисунок 6 – Входные данные



Пример 7





Рисунок 7 – Входные данные


Пример 8





Рисунок 8 – Входные данные


ЗАКЛЮЧЕНИЕ



Применение комплексных чисел позволяет удобно и компактно сформулировать многие математические модели, применяемые в математической физике и в естественных науках - электротехнике, гидродинамике, картографии, квантовой механике, теории колебаний и многих других.

Итогом работы можно считать созданную программу для реализации арифметических операций над комплексными числами. Созданный алгоритм и его программная реализация могут служить органической частью решения более сложных задач.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ и литературы

	

		Архангельский А.Я. Программирование в С++ Builder 6. [Текст] / А.Я.Архангельский. – М.: Бином, 2003. С. 1154.

		Ахо А.. Построение и анализ вычислительных алгоритмов [Электронный ресурс] / А. Ахо, Дж. Хопкрофт, Дж. Ульман. – М.: Мир. 1999. С. 143.

		Выгодский М.Я. Справочник по элементарной математике. [Текст] / М.Я. Выгодский – М.: АСТ: Астрель, 2006. С. 509.

				Дадаян А.А. Алгебра и геометрия. [Текст] / А.А Дадаян, В.А. Дударенко. – М.: Минск, 1999. С. 342.

		Камалян Р.З. Высшая математика. [Текст] / Р.З. Камалян. – М.: ИМСИТ, 2004. С.310.

		Комплексное число [Электронный ресурс] – Режим доступа: http://ru.wikipedia.org/wiki/Комплексное_число.

		Мейерс С. Наиболее эффективное использование С++. [Электронный ресурс] / С. Мейерс. – М.: ДМК Пресс, 2000. С. 304.

		Эккель Б. Введение в стандартный С++. [Электронный ресурс] / Б. Эккель. – М.:Питер, 2004. С. 572.