Файл: Содержание введение 3 глава основы теории и вопросы моделирования.docx
Добавлен: 23.11.2023
Просмотров: 159
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ
На рис. 2.5 2.7 показан пример результатов моделирования силовых ли- ний для зарядов q1=1 Кл и q2 = −1 Кл, на рис. 2.8 – 2.10 – примеры результатов для эквипотенциальных линий, на рис. 2.11˗ 2.12 – пример результата магнит- ного поля токов.
Рис. 2.5. Картина силовых линий поля Е для системы 3-х электрических зарядов. Положительные заряды – красный цвет, отрицательные - черный
Рис. 2.6. То же, что и на рис. 2.5, для системы 5 зарядов
Рис. 2.7.То же, что и на рис. 2.5, для системы 7 зарядов
Рис. 2.8. Зелеными линиями построены потенциальные линий между синим (положительным) и черным (отрицательным) зарядами
Рис. 2.9. Потенциальные линии между двумя положительными зарядами и одним отрицательным
Рис. 2.10. Потенциальные линии (зелеными) между двумя положительными зарядами и двумя отрицательными
Рис. 2.11. Синими вертикальными линиями обозначены витки тока, зелеными – линии магнитной индукции
Рис. 2.12. Линии индукции для 6 витков тока
ЗАКЛЮЧЕНИЕ
В ходе написания проекта в первой главе были рассмотрены вопросы, связанные с теорией электрического поля, его напряженностью, отдельные раз- делы были посвящены диполю и потенциалу. Во второй главе внимание уделе- но магнитному полю, ее силовым линиям и магнитной проницаемости.
На основе изучения электромагнитной теории и алгоритмов моделирова- ния электрического и магнитного полей, была разработана программа на языке Delphi7. Рассмотренный алгоритм позволяет проводить моделирование элек- трического поля для системы точечных электрических зарядов, а также магнит- ных полей для токов с графической иллюстрацией результатов.
На базе созданной программы были проведены серии тестовых численных экспериментов по моделированию электрического и магнитного полей.
СПИСОК ЛИТЕРАТУРЫ
-
Белашов В.Ю. Математическое моделирование физических процессов. Казань: КГЭУ, 2004.128с. -
Пакулин В.Н. Структура материи (Вихревая модель микромира). СПб: НТФ "Истра", 2011. ˗121 с.;см. также Пакулин В.Н. Структура материи, 2004. -
Ландсберг Г.С. Электричество и магнетизм. – М.:ФИЗМАТЛИТ, 2011. – 488с. -
Pirnat P. Physical Analogies, 2005. – http://www.ticalc.org/cgi- bin/zipview?89/basic/science/physanal.zip;physanal.txt. -
Поршнев С.В. Компьютерное моделирование физических процессов. Изд- во Горячая Линия - Телеком, 2003. -592 с. -
Яворский Б.М., Детлаф А.А. Справочник по физике для инженеров и сту- дентов вузов.– М.: Наука, 1971. – 940 с.
ПРИЛОЖЕНИЕ
Текст программы моделирования линий напряженности и потенциальных линий. Линии магнитной индукции.
unitmainFM; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Con- trols, Forms,
Dialogs, TeEngine, Series, BubbleCh, ExtCtrls, TeeProcs, Chart, StdCtrls,
Grids;
type
TfmMain = class(TForm) ris: TChart;
bubl: TBubbleSeries; kn: TButton;
tabl: TStringGrid; POLE_NZ: TEdit;
bub2: TBubbleSeries; Mem: TMemo;
S1: TLineSeries; tab_xyp: TStringGrid;
POLE_NP: TEdit;
Label1: TLabel;
Label2: TLabel;
procedureknClick(Sender: TObject); procedureFormCreate(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
fmMain: TfmMain;
const
GRAD_RAD = PI / 180; MAX_N = 8;
MAX_NT = 5700;
x_max = 5;
raz_x = 2 * x_max; y_max = 3;
raz_y = 2 * y_max; r_zar = y_max*0.022; otst = 0.3;
TYPE
M8 = ARRAY [ 1 .. MAX_N ] OF DOUBLE;
MT = ARRAY [ 1 .. MAX_NT ] OF DOUBLE
; VAR
MIN_STEP : DOUBLE; NZ : WORD ;
XT, YT, XTP, YTP : MT
;
implementation
{$R *.dfm}
USES MLINS, POT_MAXMIN, MLINP; VAR
Z, XZ, YZ : M8;
NEWseries :TLineSeries;
procedureTfmMain.knClick(Sender: TObject); VAR
POVTOR, ZAMKNULI : BOOLEAN;
XP, YP, X2, Y2, DOB_X, DOB_Y, UG, PB : DOUBLE; I, JG, J_CHET, J_NCHET : INTEGER;
NP, IP, IZ, NT, N_KUSKOV : WORD; CVETSIL, CVETPOT, CVETPLUS : TCOLOR;
begin
NZ := STRTOINT ( POLE_NZ.Text );
// x_beg := raz_x * otst - x_max; bubl.Clear;
bubl.AddBubble( -x_max - 0.05, -y_max - 0.05, 0.001 );
bubl.AddBubble(x_max + 0.05, -y_max - 0.05, 0.001 );
bubl.AddBubble( -x_max - 0.05, y_max + 0.05, 0.001 );
bubl.AddBubble(x_max + 0.05, y_max + 0.05, 0.001 );
// TABL.Cells[ 0, 0 ] := ' N ЗАР '; TABL.Cells [ 1, 0 ] := '
-
(mkKu) ';
// TABL.Cells[ 2, 0 ] := ' x (m) '; TABL.Cells [ 3, 0 ] := '
y (m) ';
CVETPLUS :=clRED;
bubl.ColorEachPoint := FALSE; bubl.AreaColor := CVETPLUS;
bub2.Clear; bub2.ColorEachPoint := FALSE; bub2.AreaColor := clBLUE; BUB2.LinePen.Width := 3; bub2.LinePen.Color := clBLUE;
FOR I := 1 TO NZ DO BEGIN
TABL.Cells[ 0, I ] := INTTOSTR ( I );
Z [ I ] := STRTOFLOAT ( TABL.Cells [ 1, I ] ); xZ [ I ] := STRTOFLOAT( TABL.Cells [ 2, I ]);
YZ [ I ] := STRTOFLOAT( TABL.Cells [ 3, I ]);
IF Z [ I ] > 0 THEN
bubl.AddBubble(xZ[ I ], YZ[I], r_zar ) ELSE
bub2.AddBubble(xZ[ I ], YZ[I], r_zar )
END
;
FOR JG := 3 TO RIS.SeriesCount - 1 DO RIS.Series[ JG ].Clear;
CVETPOT := CLGREEN; J_NCHET := 1;
NP := STRTOINT ( POLE_NP.Text ); FOR IP := 1 TO NP DO
BEGIN
XP := STRTOFLOAT ( TAB_XYP.Cells [ 1, IP ] ); YP := STRTOFLOAT ( TAB_XYP.Cells [ 2, IP ] );
PB := POT ( XP, YP, Z, XZ, YZ ); TAB_XYP.Cells[ 3, IP ] := FLOATTOSTR ( PB );
INC ( J_NCHET, 2 );
ZAMKNULI := FALSE;
POVTOR := LP1 ( 1, PB, XP, YP, Z, XZ, YZ,
NT, X2, Y2 );
TLineSeries(RIS.Series [ J_NCHET ]).LinePen.Color := CVETPOT; FOR I := 1 TO NT DO
IF ( ABS ( XT[I] ) <= X_MAX ) AND ( ABS ( YT[I] ) <= Y_MAX ) THEN
RIS.Series[ J_NCHET ].AddXY( XT[I], YT[I], '', CVETPOT )
;
IF POVTOR THEN
ZAMKNULI := ( ABS( X2 - XP ) < (X_MAX * 0.008) ) AND ( ABS( Y2 - YP ) < (Y_MAX * 0.008) )
;
N_KUSKOV := 1;
WHILE POVTOR AND ( NOT ZAMKNULI ) DO BEGIN
POVTOR := LP1 ( 1, PB, X2, Y2, Z, XZ, YZ,
NT, X2, Y2 );
INC ( J_NCHET, 2 );
TLineSeries(RIS.Series [ J_NCHET ]).LinePen.Color := CVETPOT; FOR I := 1 TO NT DO
IF ( ABS ( XT[I] ) <= X_MAX ) AND ( ABS ( YT[I] ) <= Y_MAX ) THEN
RIS.Series[ J_NCHET ].AddXY( XT[I], YT[I], '', CVETPOT )
;
INC ( N_KUSKOV ); IF N_KUSKOV > 5 THEN
BREAK;
IF POVTOR THEN
ZAMKNULI := ( ABS( X2 - XP ) < (X_MAX * 0.008) ) AND ( ABS( Y2 - YP ) < (Y_MAX * 0.008) )
END END
;
CVETSIL :=clBlue;
J_CHET := 2;
FOR IZ:= 1 TO NZ DO IF Z [ IZ ] > 0 THEN
BEGIN
FOR JG := 8 TO 26 DO BEGIN
UG := ( -10 + JG * 20 ) * GRAD_RAD;
DOB_X := 1.4 * r_zar * COS ( UG ); DOB_Y := 1.4 * r_zar * SIN ( UG );
INC ( J_CHET, 2 );
POVTOR := LS1 (1, XZ[IZ] + DOB_X, YZ[IZ] + DOB_Y, Z, XZ, YZ,
NT, X2, Y2 );
TLineSeries(RIS.Series [ J_CHET ]).LinePen.Color := CVETSIL; FOR I := 1 TO NT DO
IF ( ABS ( XT[I] ) <= X_MAX ) AND ( ABS ( YT[I] ) <= Y_MAX ) THEN
RIS.Series[ J_CHET ].AddXY( XT[I], YT[I], '', CVETSIL )
;
WHILE POVTOR DO BEGIN
INC ( J_CHET, 2 );
TLineSeries(RIS.Series [ J_CHET ]).LinePen.Color := CVETSIL;
POVTOR := LS1 (1, X2, Y2, Z, XZ, YZ,
NT, X2, Y2 ); FOR I := 1 TO NT DO
IF ( ABS ( XT[I] ) <= X_MAX ) AND ( ABS ( YT[I] ) <= Y_MAX ) THEN
RIS.Series[ J_CHET ].AddXY( XT[I], YT[I], '', CVETSIL ) END
;
INC ( J_CHET, 2 );
POVTOR := LS1 (-1, XZ[IZ] + DOB_X, YZ[IZ] + DOB_Y , Z, XZ, YZ,
NT, X2, Y2 );
TLineSeries(RIS.Series [ J_CHET ]).LinePen.Color := CVETSIL; FOR I := 1 TO NT DO
IF ( ABS ( XT[I] ) <= X_MAX ) AND ( ABS ( YT[I] ) <= Y_MAX ) THEN
RIS.Series[ J_CHET ].AddXY( XT[I], YT[I], '', CVETSIL )
;
WHILE POVTOR DO BEGIN
INC ( J_CHET, 2 );
TLineSeries(RIS.Series [ J_CHET ]).LinePen.Color := CVETSIL;
POVTOR := LS1 (-1, X2, Y2, Z, XZ, YZ,
NT, X2, Y2 ); FOR I := 1 TO NT DO
IF ( ABS ( XT[I] ) <= X_MAX ) AND ( ABS ( YT[I] ) <= Y_MAX ) THEN
RIS.Series[ J_CHET ].AddXY( XT[I], YT[I], '', CVETSIL ) END
END END
;
FOR I := 1 TO NZ DO BEGIN
IF Z [ I ] > 0 THEN
bubl.AddBubble(xZ[ I ], YZ[I], r_zar, '', CVETPLUS )
END
end;
procedureTfmMain.FormCreate(Sender: TObject); VAR
I, JG : WORD;
x_beg, dx, x : double
;
begin
MIN_STEP := 0.00002 *
SQRT ( SQR( RAZ_X ) + SQR( RAZ_Y ) );
s1.ColorEachPoint := false; s1.LinePen.Color := clGreen;
FOR JG :=RIS.SeriesCount TO 1500 DO BEGIN
NEWseries:=TLineSeries.Create( RIS ); RIS.AddSeries(NEWseries);
// RIS.Series [ JG ].Style := S1.Style; TLineSeries(RIS.Series [ JG ]).LinePen.COLOR := CLGREEN
END
;
NZ := STRTOINT ( POLE_NZ.Text );
dx := (raz_x * ( 1 - 2*otst) ) / ( NZ - 1 );
FOR JG := 0 TO RIS.SeriesCount - 1 DO mem.Lines.Append( 's[ '+
INTTOSTR ( JG ) + ' ] - ' + ris.Series [ JG
].Name);
{ mem.Lines.Append( 's[1] - ' + ris.Series [ 1 ].Name);
mem.Lines.Append( 's[2] - ' + ris.Series [ 2 ].Name);
mem.Lines.Append( 's[3] - ' + ris.Series [ 3 ].Name);
}
TAB_XYP.Cells[ 1, 0 ] := ' X ';
TAB_XYP.Cells[ 2, 0 ] := ' Y '; TAB_XYP.Cells[ 3, 0 ] := ' ПОТЕНЦИАЛ ';
TAB_xyp.Cells[ 1, 1 ] := floatTOSTR ( -2.2 );
TAB_xyp.Cells[ 1, 2 ] := floatTOSTR ( -1.5 );
TAB_xyp.Cells[ 2, 1 ] := floatTOSTR ( 1.0 );
TAB_xyp.Cells[ 2, 2 ] := floatTOSTR ( -1.5 );
x_beg := raz_x * otst - x_max;
TABL.Cells[ 0, 0 ] := ' N ЗАР '; TABL.Cells [ 1, 0 ] := ' Q
(mkKu) ';
TABL.Cells[ 2, 0 ] := ' x (m) '; TABL.Cells [ 3, 0 ] := ' y (m) ';
FOR I := 1 TO NZ DO BEGIN
TABL.Cells[ 0, I ] := INTTOSTR ( I ); TABL.Cells[ 1, I ] := floatTOSTR ( 1 );
x := x_beg + ( i - 1 ) * dx; TABL.Cells[ 2, I ] := floatTOSTr ( x );
TABL.Cells[ 3, I ] := floatTOSTR ( 0 ) END
;
TABL.Cells[ 1, 2 ] := floatTOSTR ( -1 );
knClick ( SENDER ) end;
end.
unit MLIN; interface
USES MAINFM
;
FUNCTION LS1 (ZNAK : INTEGER; XB, YB : DOUBLE; Z, XZ, YZ : M8 ) : WORD;
implementation
FUNCTION LS1 (ZNAK : INTEGER; XB, YB : DOUBLE; Z, XZ, YZ : M8 ) :