на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка програмного обеспечения для расчёта дисперсионной характеристики планарного волновода
ычисление направляющих углов осуществляется с указанной в задании точностью - 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.

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.