1. Изучение основ компьютерного моделирования предусматривает овладение методами решения дифференциальных уравнений, содержащих частные производные второго порядка. Методика решения уравнения переноса и волнового уравнения описана в монографии [1], электронный вариант которого может быть скачен с сайта http://maier-rv.glazov.net. Рассмотрим программу, решающую уравнение Пуассона, которое описывает распределение потенциала электростатического поля. Пусть в прямоугольной области задано распределение зарядов и граничные условия, то есть значения потенциала вдоль границы. Необходимо определить потенциал во всех точках области. Будем использовать метод сеток (метод конечных разностей), для этого: 1) в плоской области построим сетку, состоящую из большого количества узлов; 2) исходное дифференциальное уравнение заменим конечно-разностным; 3) из граничных условий за несколько итераций вычислим значения потенциала в узлах сетки. Уравнения Пуассона для потенциала в однородной и неоднородной средах: Если правая часть равна 0, то левое уравнение превращается в уравнение Лапласа, описывающее стационарное распределение температуры. Перейдем к конечным разностям: Для расчета распределения потенциала необходимо организовать цикл, в котором перебираются все узлы сетки и вычисляются потенциалы в момент t+Δt. Результаты решения уравнения Пуассона для однородной и неоднородной среды представлены на рис. 1. Ниже приведена программа на языке Pascal (программа 1). uses crt, graph; Программа 1. const n=70; m=70; var i, j, ii, jj, k, q, DriverVar, ModeVar, ErrorCode : integer; fi, e: array[1..N, 1..M] of real; procedure Sreda; {---Диэлектрическая проницаемость среды---} begin For i:=1 to N do For j:=1 to M do begin e[i,j]:=1+0.015*j*i; end; end; procedure Raschet; {---- Расчет потенциала ----} begin q:=0; if ((i>30)and(i<40)and(j>30)and(j<40))then q:=80; fi[i,j]:=(fi[i+1,j]+fi[i-1,j]+fi[i,j+1]+fi[i,j-1]+q/e[i,j])/4+ ((e[i-1,j]-e[i+1,j])*(fi[i+1,j]-fi[i-1,j])+ (e[i,j-1]-e[i,j+1])*(fi[i,j+1]-fi[i,j-1]))/(16*e[i,j]); end; procedure Gran; {---- Граничные условия ----} begin for i:=1 to N do begin fi[i,2]:=0; fi[i,M-1]:=0; fi[2,i]:=-20; fi[N-1,i]:=20; end; for j:=20 to 25 do fi[55,j]:=0; end; procedure Draw; {---- Вывод на экран ----} begin if fi[i,j]>-400 then setcolor(15); if fi[i,j]>-350 then setcolor(0); if fi[i,j]>-300 then setcolor(1); if fi[i,j]>-200 then setcolor(2); if fi[i,j]>-100 then setcolor(3); if fi[i,j]>-50 then setcolor(4); if fi[i,j]>-25 then setcolor(5); if fi[i,j]>-15 then setcolor(6); if fi[i,j]>-7 then setcolor(7); if fi[i,j]>7 then setcolor(8); if fi[i,j]>15 then setcolor(9); if fi[i,j]>25 then setcolor(10); if fi[i,j]>50 then setcolor(11); if fi[i,j]>100 then setcolor(12); if fi[i,j]>200 then setcolor(13); if fi[i,j]>300 then setcolor(14); if fi[i,j]>300 then setcolor(15); if fi[i,j]>400 then setcolor(0); if abs(fi[i,j])<3 then setcolor(15); rectangle(i*4+50,j*4,i*4+54,j*4+4); rectangle(i*4+51,j*4+1,i*4+53,j*4+3); end; BEGIN {---- Основная программа ----} DriverVar:=Detect; InitGraph(DriverVar,ModeVar,'c:\bp\bgi'); ErrorCode:=GraphResult; if ErrorCode <> grOK then Halt(1); Sreda; Repeat inc(k); For i:=2 to N-1 do For j:=2 to M-1 do Raschet; Gran; For j:=2 to M-1 do For i:=2 to N-1 do Raschet; Gran; For i:=2 to N-1 do For jj:=2 to M-1 do begin j:=M+1-jj; Raschet; end; Gran; For j:=2 to M-1 do For ii:=2 to N-1 do begin i:=N+1-ii; Raschet; end; Gran; If k/10=round(k/10) then For i:=2 to N-1 do For j:=2 to M-1 do Draw; until KeyPressed; CloseGraph; END. 2. Если электрическое поле создано несколькими точечными зарядами, а рассматриваемая область не ограничена, то определение распределения потенциала осуществляется в соответствии с принципом суперпозиции: Предлагаемая программа 2 на языке Pascal позволяет реализовать данный метод. Результаты работы программы представлены на рис. 2. uses crt, graph; Программа 2. var r1,r2,r3,x1,x2,x3,y1,y2,y3,fi,q1,q2,q3 :real; Gd,Gm,i,j :integer; BEGIN Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi\'); if GraphResult <> grOk then Halt(1); q1:=15; q2:=-23; q3:=8; { q1:=8; q2:=46;} x1:=180.5; y1:=180.5; x2:=400.5; y2:=220.5; x3:=240.5; y3:=340.5; circle(round(x1),round(y1),3); circle(round(x2),round(y2),3); For i:=0 to 640 do For j:=0 to 480 do begin r1:=sqrt(sqr(x1-i)+sqr(y1-j)); r2:=sqrt(sqr(x2-i)+sqr(y2-j)); r3:=sqrt(sqr(x3-i)+sqr(y3-j)); fi:=q1/r1+q2/r2+q3/r3; {putpixel(i,j,round((fi+1)*20));} if round(fi/0.05)-fi/0.05<0.002 then putpixel(i,j,15); end; Repeat until Keypressed; CloseGraph; END.Литература
1. Майер, Р.В. Информационные технологии и физическое образование [Текст] / Р.В.Майер. –– Глазов: ГГПИ, 2006. –– 64 с. 2. Поршнев, С.В. Компьютерное моделирование физических процессов с использованием пакета MathCAD [Текст]: учебное пособие / С.В. Поршнев. –– М.: Горячая линия – Телеком, 2002. – 252 c. 3. Web–site http://maier-rv.glazov.net (http://komp-model.narod.ru).
Майер Р.В. Вычисление потенциала электрического поля на компьютере // Научно-технические и социально-экономические проблемы регионального развития: Сборник научных трудов. Вып. 5. --- Глазовский инженерно-- экономический институт. --- Глазов: Издательство ГГПИ, 2007. --- C.139--143. ВВЕРХ
|