Разработка програмного обеспечения для расчёта дисперсионной характеристики планарного волновода
Следует учитывать, что функция f (x) вычисляется с некоторой абсолютной погрешностью e1. Вблизи корня значения функции f (x) малы по абсолютной величине и могут оказаться сравнимыми с погрешностью ее вычисления. Другими словами, при подходе к корню мы можем попасть в полосу шумов 2e1 и дальнейшее уточнение корня окажется невозможным. Поэтому надо задать ширину полосы шумов и прекратить итерационный… Читать ещё >
Разработка програмного обеспечения для расчёта дисперсионной характеристики планарного волновода (реферат, курсовая, диплом, контрольная)
Федеральное агентство образования и науки Российской Федерации
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ
УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ
Кафедра сверхвысокочастотной и квантовой радиотехники
Применение методов вычислительной математики
Пояснительная записка к курсовой работе по информатике
Студент группы 164 __________. «___"__________г. | ||
Руководитель Аспирант кафедры _________ «___"__________. | ||
РЕФЕРАТ.
Курсовая работа 26 с., 9 рис., 2 источника, 3 приложения.
МЕТОД ДИХОТОМИИ, ДИСПЕРСИОННАЯ ХАРАКТЕРИСТИКА, НАПРАВЛЯЮЩИЕ УГЛЫ, ПЛАНАРНЫЙ ВОЛНОВОД, ПРОФИЛИ ТЕ-МОД.
Объектом исследования является асимметричный планарный волновод, предназначенный для распространения в нём ТЕ-мод.
Цель работы — разработка програмного обеспечения для расчёта дисперсионной характеристики планарного волновода, нахождения направляющих углов для ТЕ-мод и построения соответствующих им профилей.
В процессе работы реализована программа для расчёта дисперсионной характеристики планарного волновода, отработана методика нахождения корней уравнений численными методами.
В результате исследования получены зависимости количества, направляющих углов и профилей ТЕ-мод от характеристик волновода и длины волны излучения.
Пояснительная записка к дипломной работе выполнена в текстовом редакторе Microsoft Word 2002.
" УТВЕРЖДАЮ"
Зав.каф.
________.
" ___" г.
ЗАДАНИЕ № 9
на курсовую работу по дисциплине «ИНФОРМАТИКА»
студенту гр.
(фамилия, имя, отчество)
1. Тема работы: применение методов вычислительной математики
2. Срок сдачи работы на кафедру ;
3. Содержание работы и сроки выполнения работы:
3.1. Изучение задания и рекомендованной литературы — 2я неделя.
3.2. Разработка алгоритма решения и составление схемы алгоритма — 4я неделя.
3.3. Составление программы для решения задачи в пакете MATHCAD — 7я неделя.
3.4. Написание программы и создание пользовательского интерфейса в среде программирования «Borland Delphi». — 10я неделя.
3.5. Отладка программы на ПК. — 12я неделя.
3.6. Выполнение вычислений на ПК. — 14я неделя.
3.7. Оформление пояснительной записки в соответствии с требованиями к оформлению курсовых работ. — 15я неделя.
4. Рекомендуемая литература:
4.1. Фигурнов В. Э. IBM PC для пользователя. — М.: Финансы и статистика, 1990 г, — 240с.
4.2. Сергиевский М. В., Шалашов А. В., Турбо Паскаль 7.0., Язык, среда, программирования. — М.: Машиностроение. — 1994. — 254с.
4.3. Мудров А. Е., Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. — Томск: МП «РАСКО», 1991. — 272с.
4.4. Дьяконов В. П. Система MathCAD: Справочник, — М.: Радио и связь, 1993. — 128с.
4.5. Кудрявцев Е. М. Mathcad2000 Pro: — М.: ДМК Пресс, 2001. — 576 с.: ил.
5. Дополнительную литературу студент ищет самостоятельно в зависимости от темы и сложности задания.
6. Исходные данные:
Определить профили мод ТЕ в планарном волноводе, если профиль компоненты Еу задан в трех слоях как:
x0
где — поперечные волновые числа 1, 2 и 3-й сред соответственно.
6.2.Дисперсионная характеристика для ТЕ-мод в планарном волноводе задается выражением:
где n1, n2, n3 — показатели преломления трех сред;
m — порядок моды;
и — угол падения луча на границу раздела сред;
d — толщина волноводного слоя;
— длина волны света в вакууме.
— Построить семейство диспесионных характериситик для заданных значений n1, n2, n3, ;
— Для заданного значения d определить количесвто направляемых мод и соответствующие углы ввода для каждой из них;
— Построить профили ТЕ мод распрастроняющихся в волноводе с заданными конструктивными параметрами.
6.3. Пункт 6.1.-6.2. повторить на пакете MATHCAD.
— Точность вычислений обеспечить не хуже 10-3.
— Ввод исходных данных организовать с помощью меню.
7. Состав пояснительной записки:
7.1. Титульный лист.
7.2. Аннотация.
7.3. Лист задания с подписью преподавателя.
7.4. Содержание.
7.5.
Введение
Постановка задачи.
7.6. Математическое описание используемого метода для решения задачи. Кратко, понятно, лаконично изложение теории.
7.7. Описание алгоритма решения задачи и схема алгоритма.
7.8. Описание программы. Результаты решения.
7.9. Интерпретация результатов и выводы по проделанной работе.
7.10. Список используемой литературы.
7.11. Распечатка программы с комментариями (в виде приложения).
8. Отчетность по работе:
8.1. В ходе выполнения работы — отчетность по фактическому материалу в рабочей тетради (в соответствии со сроками выполнения основных этапов, указанных в п.3).
8.2. Пояснительная записка, в обязательном порядке со всеми разделами по п. 7. без исключения.
8.3. На дискете — передается: файл программы, подробное описание программы.
8.4. После оформления пояснительной записки — защита на кафедре.
Дата выдачи задания .
Подпись руководителя _____________
Подпись студента _____________
Содержание:
Математическое описание использованного для решения задачи метода | ||||
Описание алгоритма решения задачи и схема алгоритма | ||||
Описание программы | ||||
Результаты решения, их интерпретация и выводы по проделанной работе | ||||
5.1 | Результаты работы программы | |||
5.2 | Результаты проверки в пакете «MathCAD» | |||
5.3 | Интерпретация результатов и выводы по проделанной работе | |||
Приложение А | ||||
Приложение В | ||||
Приложение С | ||||
1. Введение
В этой работе перед нами ставится цель научиться применять некоторые численные методы при решении метематических задач при помощи ПК. Математическое моделирование процессов и явлений в различных областях науки и техники является одним из основных способов получения новых знаний и технологических решений. Для решения поставленной в этом курсовом проекте задачи необходи иметь основные навыки программирования на языке «Pascal» и в объектно-ориентированной среде «Delphi». Эти знания могут пригодиться и в будущем, при написании каких-либо программ вычислительного характера.
В данной работе необходимо написать программу, которая бы рассчитала дисперсионную характеристику планарного волновода и построила профили направляемых в нём ТЕ-мод. Для нахождения направляющих углов был использован метод дихотомии (половинного деления). Он наиболее прост в реализации, имеет относительно быструю сходимость и позволяет легко контролировать погрешность вычислений.
2. Математическое описание использованного
для решения задачи МЕТОДА.
Нажождение корня уравнения методом дихотомии.
Считаем, что на отрезке [а, b] расположен один корень, который необходимо уточнить с погреш-ностью e.
Метод дихотомии, или половинного деления, заключается в следующем. Определяем середину отрезка [а, b]
Х= (а + b)/2
и вычисляем функцию f (Х). Далее делаем выбор, какую из двух частей отрезка взять для дальнейшего уточнения корня. Если левая часть уравнения f(x) есть непрерывная функция аргумента х, то корень будет находиться в той половине отрезка, на концах которой f(x) имеет разные знаки. Это будет отрезок [а, Х], т. е. для очередного шага уточнения точку b перемещаем в середину отрезка Х и продолжаем процесс деления как с первоначальным отрезком [а, b].
Итерационный (повторяющийся) процесс будем продолжать до тех пор, пока интервал [а, b] не станет меньше заданной погрешности e.
Следует учитывать, что функция f(x) вычисляется с некоторой абсолютной погрешностью e1. Вблизи корня значения функции f(x) малы по абсолютной величине и могут оказаться сравнимыми с погрешностью ее вычисления. Другими словами, при подходе к корню мы можем попасть в полосу шумов 2e1 и дальнейшее уточнение корня окажется невозможным. Поэтому надо задать ширину полосы шумов и прекратить итерационный процесс при попадании в нее. Также необходимо иметь в виду, что при уменьшении интервала [а, b] увеличивается погрешность вычисления его длины (b — а) за счет вычитания близких чисел.
Метод дихотомии позволяет значительно уменьшить объем вычислений по сравнению с графическим методом. Так как за каждую итерацию интервал, где расположен корень, уменьшается в два раза, то через n итераций интервал будет равен (b — а)/2n. За 10 итераций интервал уменьшится в 2 10 =1024 раз, за 20 итераций — в 220=1 048 576 раз.
3. Описание алгоритма решения задачи и схема алгоритма.
Основная задача, которая решается в этой программе, это решение приведённого далее уравнения относительно :
(3.1)
где | — толщина волновода; | |
— длина волны запускаемого пучка света; | ||
— направляющий угол; | ||
— порядок моды; | ||
— показатели преломления волновода и окружающих его веществ. | ||
В программе решение данного уравнения реализавано методом дихотомии, схема которого приведена ниже.
Рисунок 3.1 — блок-схема метода дихотомии. | |
Далее, используя полученные значения направляющих углов, строится график, отображающий профили ТЕ-мод. График, отображающий правую часть уравнения (3.1), практической ценности для решения задачи не имеет и носит чисто иллюстративный характер.
4. ОПИСАНИЕ ПРОГРАММЫ.
Вид программы представлен на рисунке 4.1. По своей внешней форме она представляет собой 4 закладки, расположенные на 1 форме. На первой закладке осуществляется ввод исходных данных, на второй строится график дисперсионной характеристики волновода, на третьей выводятся значения направляющих углов, а на чётвертой строятся профили ТЕ-мод.
Рисунок 4.1 — Основной вид программы, закладка для ввода исходных данных. | |
Все вычисления и построения графиков производятся при смене закладки с первой на любую другую (событие объекта TPageControl «OnChange»). Перед сменой (событие «OnChanging») осуществляется проверка на полноту исходных данных: если хоть в одном из окон осталось стоящее по умолчанию число «0», то смены закладки не произойдёт, зато возникнет информационное окно, которое укажет пользователю на его ошибку. При повторном переходе с первой закладки на другую будет произведён перерасчёт.
Вычисление направляющих углов осуществляется с указанной в задании точностью — 0,001.
Полная схема и листинг программы находятся в приложении, А и В соответственно.
5. Результаты решения, их интерпретация и выводы по проделанной работе.
5.1. результаты работы программы.
Расчёты проводились при следующих исходных данных:
Рисунок 5.1 — ввод исходных данных в программу. | |
При таких введённых параметрах программа рассчитала следующую дисперсионную характеристику:
Рисунок 5.2 — дисперсионная характеристика волновода. | |
Подсчитанные направляющие углы составили:
Рисунок 5.3 — направляющие углы ТЕ-мод. | |
И при этих углах программа построила вот такие профили ТЕ-мод:
Рисунок 5.4 — профили ТЕ-мод. | |
5.2. Результаты проверки в пакете «MathCAD».
При аналогичных исходных данных «MathCAD» выдал следующие результаты:
Рисунок 5.5 — график дисперсионной характеристики, полученный при помощи пакета «MathCAD». | |
Рисунок 5.6 — график с профилями ТЕ-мод, полученный при помощи пакета «MathCAD» | |
Полный листинг решения поставленной задачи в пакете «MathCAD» приведён в приложении С.
5.3. Интерпретация результатов и выводы по проделанной работе.
Проведя сравнительный анализ результатов, полученных при помощи написанной в «Delphi» программы и пакета «MathCAD», мы видим их полное совпадение в пределах заданной погрешности. Кроме того, конечные результаты, а именно профили ТЕ-мод, совпадают со справочными:
Рисунок 5.7 — три низшие ТЕ-моды асимметричного планарного волновода и соответствующие им зигзагообразные лучи. | |
Из этого можно сделать вывод, что поставленная задача была решена мною верно и в полном объёме. Я не только создал конечный програмный продукт, ограниченно пригодный для практического использования, но и получил практические навыки программирования в объектно ориентированной среде «Delphi».
6. Список используемой литературы:
1. «Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль». А. Е. Мудров — МП «Раско», Томск, 1992 г, 270с.
2. «Оптические волны в кристаллах». А. Ярив, П. Юх — издательство «Мир», Москва, 1987 г, 616с.
Приложение А.
Блок-схема тела основной программы.
Рисунок А.1 — блок-схема тела основной программы. | |
nn1,nn2,nn3 — показатели преломления, исходные данные, вводимые пользователем;
dd — толщина волновода, вводится пользователем;
wll — длина волны используемого света, вводится пользователем.
Блок-схема Процедуры «OnChanging».
Рисунок А.2 — блок-схема процедуры «OnChanging». | |
AllowChange — свойство объекта TPageControl, отвечающее за разрешение/неразрешение смены закладки;
mtInformation — информационное окно, уведомляющее пользователя о том, что он ввёл не все исходные данные.
Блок-схема Процедуры «OnChange».
Рисунок А.3 — блок-схема процедуры «OnChange». | |
i — переменная типа boolean, которая отвечает за то, будет ли при смене закладки осуществлён пересчёт;
chart1 — график, отображающий дисперсионную характеристику волновода;
chart2 — график, отображающий профили ТЕ-мод;
stringgrid1 — таблица, которая по ходу выполнения программы заполняется значениями направляющих углов;
n — переменная типа byte, соответствующая порядку моды;
a, b — переменные, задающие диапазон, на котором производится уточнение направляющих углов;
dwl — функция, задающая дисперсионную характеристику волновода (численно равна правой части уравнения (3.1));
dix — процедура, осуществляющая одну итерацию метода дихотомии;
k — вспомогательная переменнная типа integer, используемая для построения графика;
f (k), g (k) — функции от k, выступающие в роли аргумента для других функций;
e1, e2, e3 — функции, определяющие профиль моды в различных средах.
Блок-схема процедуры «dix».
Рисунок А.4 — блок схема процедуры «dix». | |
х1, х2, хm — крайние и среднее значения интервала, на котором производится уточнение корня;
y1, y2 ym — значения уточняемой функции от x1, x2 и xm соответственно;
xx1, xx2, xxm — новые крайние и среднее значения интервала, полученные после его уменьшения вдвое.
Приложение В.
Модуль формы Form1.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls, TeEngine, Series, TeeProcs,
Chart, math, Grids, Menus;
type
TForm1 = class (TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Image1: TImage;
Image2: TImage;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
TabSheet3: TTabSheet;
Chart1: TChart;
TabSheet4: TTabSheet;
Chart2: TChart;
StringGrid1: TStringGrid;
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
procedure Edit1KeyPress (Sender: TObject; var Key: Char);
procedure Edit2KeyPress (Sender: TObject; var Key: Char);
procedure Edit3KeyPress (Sender: TObject; var Key: Char);
procedure Edit4KeyPress (Sender: TObject; var Key: Char);
procedure Edit5KeyPress (Sender: TObject; var Key: Char);
procedure PageControl1Changing (Sender: TObject;
var AllowChange: Boolean);
procedure PageControl1Change (Sender: TObject);
procedure FormActivate (Sender: TObject);
procedure Exit1Click (Sender: TObject);
procedure About1Click (Sender: TObject);
private
{ Private declarations }
public
i:boolean;
nn1,nn2,nn3,dd, wll: real;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit4;
{$R *.dfm}
procedure TForm1. Edit1KeyPress (Sender: TObject; var Key: Char);
begin
case key of
'0'.'9', chr (8): ;
'-': if length (edit1.text)<>0 then key:=chr (0) else key:=chr (45);
'.': if pos (',', edit1. text)<>0 then key:=chr (0) else key:=chr (44);
',': if pos (',', edit1. text)<>0 then key:=chr (0) else key:=chr (44);
else key:=chr (0);
end;
end;
procedure TForm1. Edit2KeyPress (Sender: TObject; var Key: Char);
begin
case key of
'0'.'9', chr (8): ;
'-': if length (edit2.text)<>0 then key:=chr (0) else key:=chr (45);
'.': if pos (',', edit2. text)<>0 then key:=chr (0) else key:=chr (44);
',': if pos (',', edit2. text)<>0 then key:=chr (0) else key:=chr (44);
else key:=chr (0);
end;
end;
procedure TForm1. Edit3KeyPress (Sender: TObject; var Key: Char);
begin
case key of
'0'.'9', chr (8): ;
'-': if length (edit3.text)<>0 then key:=chr (0) else key:=chr (45);
'.': if pos (',', edit3. text)<>0 then key:=chr (0) else key:=chr (44);
',': if pos (',', edit3. text)<>0 then key:=chr (0) else key:=chr (44);
else key:=chr (0);
end;
end;
procedure TForm1. Edit4KeyPress (Sender: TObject; var Key: Char);
begin
case key of
'0'.'9', chr (8): ;
'-': if length (edit4.text)<>0 then key:=chr (0) else key:=chr (45);
'.': if pos (',', edit4. text)<>0 then key:=chr (0) else key:=chr (44);
',': if pos (',', edit4. text)<>0 then key:=chr (0) else key:=chr (44);
else key:=chr (0);
end;
end;
procedure TForm1. Edit5KeyPress (Sender: TObject; var Key: Char);
begin
case key of
'0'.'9', chr (8): ;
'-': if length (edit5.text)<>0 then key:=chr (0) else key:=chr (45);
'.': if pos (',', edit5. text)<>0 then key:=chr (0) else key:=chr (44);
',': if pos (',', edit5. text)<>0 then key:=chr (0) else key:=chr (44);
else key:=chr (0);
end;
end;
procedure TForm1. PageControl1Changing (Sender: TObject;
var AllowChange: Boolean);
begin
allowchange:= tschng (strtofloat (edit1.text), strtofloat (edit2.text), strtofloat (edit3.text), strtofloat (edit4.text), strtofloat (edit5.text));
end;
procedure TForm1. PageControl1Change (Sender: TObject);
//основная процедура программы, привязанная к смене закладки
//по её ходу и осуществляются все вычисления и построение графиков
var
n:byte;
k:integer;
a, b, c, f: real;
begin
nn1:=strtofloat (edit1.text);
nn2:=strtofloat (edit2.text);
nn3:=strtofloat (edit3.text);
dd:=strtofloat (edit4.text)/1 000 000;
wll:=strtofloat (edit5.text)/1 000 000 000;
if pagecontrol1. activepage=(tabsheet1) then
begin
i:=false;
chart1.RemoveAllSeries;
chart2.RemoveAllSeries;
stringgrid1.rowcount:=(2);
stringgrid1.Height:=(52);
stringgrid1.Cells[0,1]: =(' ');
stringgrid1.Cells[1,1]: =(' ');
end
else
begin
if i=false then
begin
n:=0;
while dwl (n,(arcsin (nn1/nn2)+0.5), nn1, nn2,nn3)<(dd/wll) do
begin
a:=(arcsin (nn1/nn2)+0.001);
b:=(pi/2−0.001);
c:=(a+b)/2;
while (abs (dwl (n, a, nn1,nn2,nn3)-dwl (n, b, nn1,nn2,nn3))>0.001) or (abs (a-b)>0.001) do
begin
dix (a, b, c,(dwl (n, a, nn1,nn2,nn3)-(dd/wll)),(dwl (n, b, nn1,nn2,nn3)-(dd/wll)),(dwl (n, c, nn1,nn2,nn3)-(dd/wll)), a, b, c);
end;
stringgrid1.Cells[0,n+1]: =floattostr (n);
stringgrid1.Cells[1,n+1]: =floattostr (a);
stringgrid1.RowCount:=(stringgrid1.RowCount+1);
if n<14 then stringgrid1. Height:=(stringgrid1.Height+26);
n:=n+1;
end;
stringgrid1.RowCount:=(stringgrid1.RowCount-1);
stringgrid1.Height:=(stringgrid1.Height-26);
for n:=0 to (stringgrid1.RowCount-2) do
begin
Chart1.AddSeries (TlineSeries.Create (Self));
chart1.Serieslist[n]. SeriesColor:=chart1.getfreeseriescolor (false);
for k:=0 to 269 do
begin
f:=(arcsin (nn1/nn2)+k*(((pi/2)-0.001-arcsin (nn1/nn2))/300));
chart1.Series[n]. AddXY (k, dwl (n, f, nn1,nn2,nn3),'', clteecolor);
end;
end;
Chart1.AddSeries (TlineSeries.Create (Self));
for k:=1 to 269 do
begin
chart1.Series[chart1.SeriesCount-1]. AddXY (k,(dd/wll),'', clteecolor);
end;
for n:=0 to (stringgrid1.RowCount-2) do
begin
Chart2.AddSeries (TlineSeries.Create (Self));
chart2.Serieslist[n]. SeriesColor:=chart2.getfreeseriescolor (false);
for k:=(-99) to 0 do
begin
chart2.Series[n]. AddXY (k, e1(wll, dd, nn1, nn2,nn3,strtofloat (stringgrid1.Cells[1,n+1]),(k*dd/100)),'', clteecolor);
end;
for k:=0 to 99 do
begin
chart2.Series[n]. AddXY (k, e2(wll, dd, nn1, nn2,nn3,strtofloat (stringgrid1.cells[1,n+1]),(k*dd/100)),'', clteecolor);
end;
for k:=100 to 199 do
begin
chart2.Series[n]. AddXY (k, e3(wll, dd, nn1, nn2,nn3,strtofloat (stringgrid1.Cells[1,n+1]),(k*dd/100)),'', clteecolor);
end;
end;
label7.Caption:=floattostrf (arcsin (nn1/nn2), ffgeneral, 3,3);
label8.caption:=floattostrf ((pi/2−0.001-(pi/2-arcsin (nn1/nn2))/300), ffgeneral, 3,3);
label10.Caption:=floattostr (-dd*1 000 000);
label11.Caption:=floattostr (2*dd*1 000 000);
i:=true;
end;
end;
end;
procedure TForm1. FormActivate (Sender: TObject);
begin
i:=false;
stringgrid1.Cells[0,0]: =('Порядок');
stringgrid1.Cells[1,0]:=('Угол (рад)');
end;
procedure TForm1. Exit1Click (Sender: TObject);
begin
close;
end;
procedure TForm1. About1Click (Sender: TObject);
begin
messagedlg ('Курсовая работа по информатике, ТУСУР,'
+#13+' 1 курс, специальность 210 405.'
+#13+' Выполнил студент группы 164'
+#13+' Филатов Александр.', mtinformation, [mbOK], 0);
end;
end.
Вспомогательный модуль, содержащий математические процедуры и функции.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls, TeEngine, Series, TeeProcs,
Chart, math;
function tschng (n1,n2,n3,d, wl: real):boolean;
function dwl (m:byte; tetta, n1, n2,n3:real):real;
function q (wl, tetta, n2, n1:real):real;
function h (wl, tetta, n2: real):real;
function p (wl, tetta, n2, n3:real):real;
function e1(wl1,d1,n11,n21,n31,tetta1,x1:real):real;
function e2(wl2,d2,n12,n22,n32,tetta2,x2:real):real;
function e3(wl3,d3,n13,n23,n33,tetta3,x3:real):real;
procedure dix (x1,x2,xm, y1, y2,ym:real; var xx1, xx2,xxm:real);
implementation
function tschng (n1,n2,n3,d, wl: real):boolean;
//осуществляет проверку исходных данных на полноту
begin
if (n1=0) or (n2=0) or (n3=0) or (d=0) or (wl=0) then
begin
messagedlg ('Вы должны ввести значения всех параметров!', mtinformation, [mbOK], 0);
tschng:=(False);
end
else
tschng:=(True);
end;
function dwl (m:byte; tetta, n1, n2,n3:real):real;
//функция дисперсионной характеристики волновода
var
aa, bb, cc, dd: real;
begin
aa:= sqrt (1-sqr (sin (tetta)));
aa:= 1/(2*pi*n2*aa);
bb:= sqrt (sqr (n2*sin (tetta))-sqr (n3));
cc:= sqrt (sqr (n2*sin (tetta))-sqr (n1));
dd:= n2*sqrt (1-sqr (sin (tetta)));
dwl:=aa*(arctan (bb/dd)+arctan (cc/dd)+pi*m);
end;
function q (wl, tetta, n2, n1:real):real;
//функция, вычисляющая волновое число q
begin
q:=(2*pi*sqrt (sqr (n2*sin (tetta))-n1*n1))/wl;
end;
function h (wl, tetta, n2: real):real;
//функция, вычисляющая волновое число h
begin
h:=(2*pi*cos (tetta)*n2)/wl;
end;
function p (wl, tetta, n2, n3:real):real;
//функция, вычисляющая волновое число p
begin
p:=(2*pi*sqrt (sqr (n2*sin (tetta))-n3*n3))/wl;
end;
function e1(wl1,d1,n11,n21,n31,tetta1,x1:real):real;
//функция, задающая профиль Еу ТЕ моды при условии х<=0
begin
e1:=exp (q (wl1,tetta1,n21,n11)*x1);
end;
function e2(wl2,d2,n12,n22,n32,tetta2,x2:real):real;
//функция, задающая профиль Еу ТЕ моды при условии 0<�х
begin
e2:=(q (wl2,tetta2,n22,n12)/h (wl2,tetta2,n22))*(sin (x2*h (wl2,tetta2,n22))+(h (wl2,tetta2,n22)/q (wl2,tetta2,n22,n12))*cos (h (wl2,tetta2,n22)*x2));
end;
function e3(wl3,d3,n13,n23,n33,tetta3,x3:real):real;
//функция, задающая профиль Еу ТЕ моды при условии х>=d
begin
e3:=(q (wl3,tetta3,n23,n13)/h (wl3,tetta3,n23))*(sin (d3*h (wl3,tetta3,n23))+(h (wl3,tetta3,n23)/q (wl3,tetta3,n23,n13))*cos (h (wl3,tetta3,n23)*d3))*exp (-p (wl3,tetta3,n23,n33)*(x3-d3));
end;
procedure dix (x1,x2,xm, y1, y2,ym:real; var xx1, xx2,xxm:real);
//процедура, осуществляющая 1 итерацию метода дихотомии
begin
if (y1*ym)<0 then
begin
xx1:=x1;
xx2:=xm;
xxm:=(x1+xm)/2;
end;
if (ym*y2)<0 then
begin
xx1:=xm;
xx2:=x2;
xxm:=(xm+x2)/2;
end;
end;
end.
Приложение c.