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

Федеральное агентство образования и науки Российской Федерации

ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ

Кафедра сверхвысокочастотной и квантовой радиотехники

Применение методов вычислительной математики

Пояснительная записка к курсовой работе по информатике

Студент группы 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. Исходные данные:

Определить профили мод ТЕ в планарном волноводе, если профиль компоненты Еу задан в трех слоях как:

, x £0

,

Где – поперечные волновые числа 1, 2 и 3-й сред соответственно.

6.2.Дисперсионная характеристика для ТЕ-мод в планарном волноводе задается выражением:

Где n1, n2, n3 – показатели преломления трех сред;

M – порядок моды;

θ – угол падения луча на границу раздела сред;

D – толщина волноводного слоя;

L – длина волны света в вакууме.

– Построить семейство диспесионных характериситик для заданных значений n1, n2, n3, l;

– Для заданного значения 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. После оформления пояснительной записки – защита на кафедре.

Дата выдачи задания.

Подпись руководителя _____________

Подпись студента _____________

Содержание:

1Введение

6

2

Математическое описание использованного для решения задачи метода

7

3

Описание алгоритма решения задачи и схема алгоритма

8

4

Описание программы

15

5

Результаты решения, их интерпретация и выводы по проделанной работе

10

5.1

Результаты работы программы

10

5.2

Результаты проверки в пакете “MathCAD”

12

5.3

Интерпретация результатов и выводы по проделанной работе

13

6

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

14

7

Приложение А

15

8

Приложение В

18

9

Приложение С

25

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 =1048576 раз.

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)/1000000;

Wll:=strtofloat(edit5.text)/1000000000;

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.00005),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*1000000);

Label11.Caption:=floattostr(2*dd*1000000);

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 курс, специальность 210405.’

+#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<х<d

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.


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