Рис. 9.2. Течение вязкой жидкости.
10. РЕШЕНИЕ ВАРИАЦИОННЫХ ЗАДАЧ НА КОМПЬЮТЕРЕ |
| Задача 10.1. Имеются два кольца, центры которых лежат на одной оси, перпендикулярной содержащим их плоскостям. Кольца погружают в мыльный раствор и вынимают. Рассчитайте форму мыльной пленки, если радиусы колец и расстояние между их центрами известны. |

Рис. 10.1.1. К вычислению профиля мыльной пленки.
Мыльная пленка принимает такую форму, при которой ее потенциальная энергия, пропорциональная площади пленки, минимальна. Таким образом, задача состоит в нахождении формы мыльной пленки, соответствующего минимуму потенциальной энергии. Очевидно, что мыльная пленка примет осесимметричную форму, однозначно определяемую функцией y=y(x), задаваемой с помощью массива yi=y(xi), где xi=iΔx и Δx=l/N. Площадь поверхности фигуры вращения можно найти по формуле:
Для решения этой задачи используется программа ПР - 10.1. Сначала задаются заведомо большие значения yi=y(xi). В процедуре Ploshad осуществляется вычисление площади мыльной пленки. Затем перебираются все значения yi=y(xi) и уменьшаются на малую величину 0.0001. При этом каждый раз вычисляется новое значение площади S1. Если при этом площадь уменьшается, то изменение yi=y(xi) принимается, а если нет --- отвергается. Все это многократно повторяется, результаты вычислений выводятся в виде графика на экран. Получающийся результат при различных радиусах колец и расстояниях между ними представлен на рисунке 10.1.2. Можно убедиться в том, что когда расстояние между кольцами превышает некоторое критическое значение, устойчивого состояния, соответствующего минимуму потенциальной энергии, несуществует. |
|
| {$N+} { ПР - 10.1 } uses dos, crt, graph; const N=100; R1=1; R2=0.7; pi=3.1415926; var l, S,dx, a,S0,S1: real; i, j,k, Gd, Gm: integer; y: array[1..N]of single; Procedure Ploshad; begin S:=0; For i:=1 to N-1 do S:=S+pi*(y[i]+y[i+1])*sqrt(sqr(y[i]-y[i+1])+dx*dx); end; BEGIN S:=0; dx:=1/N; Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi'); For i:=1 to N do y[i]:=R1; y[N]:=R2; Repeat inc(k); For j:=2 to N-1 do begin a:=y[j]; Ploshad; S0:=S; y[j]:=a-0.0001; Ploshad; S1:=S; If S1>S0 then y[j]:=a; end; If k mod 100=0 then begin cleardevice; For i:=1 to 100 do circle(20+round(300*i*dx),400-round(300*y[i]),2); line(0,400,640,400); end; until KeyPressed; CloseGraph; END. |

Рис. 10.1.2. Результаты вычислений профиля мыльной пленки.
| Задача 10.2. Имеется неоднородная нить. Какую форму она примет в однородном поле тяжести если концы ее закрепить в фиксированных точках. |
Нить примет форму, при которой ее потенциальная энергия минимальна. Мысленно заменим нить совокупностью материальных точек с массами mi, которые связаны друг с другом пружинками жесткостью k и длиной b. Расстояние между соседними частицами и потенциальная энергия всей системы определяются уравнениями:
Допустим, правый конец нити привязан математическому маятнику длиной b1 и массой mN. Заменим нить маятника пружиной жесткостью k, тогда к потенциальной энергии системы следует прибавить величину:
Используется программа ПР - 10.2. В ней последовательно перебираются материальные точки mi, случайным образом изменяются их координаты и каждый раз вычисляется получающееся значение потениальной энергии системы. Если при смещении данной частицы потенциальная энергия уменьшилась, то это новое состояние системы принимается, иначе -- отвергается. Результат моделирования представлен на рис. 10.2. |
|
| {$N+} { ПР - 10.2 } uses dos, crt, graph; const N=20; b=20; b1=100; k=400; g=10; pi=3.1415; var U, U0,U1,x1,y1,l, l1,dU: Real; i, j,t, Gd, Gm: integer; x, y,m: array [1..N] of single; Energiya: string; Procedure Energy; var i: integer; begin U:=0; For i:=2 to N do begin l:=sqrt(sqr(x[i]-x[i-1])+sqr(y[i]-y[i-1])); If l>b then dU:=k*sqr(l-b)/2; U:=U+dU+m[i]*g*y[i]; end; l1:=sqrt(sqr(x[N]-400)+sqr(y[N]-60)); U:=U+k*sqr(l1-b1)/2; end; BEGIN Randomize; Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi'); For i:=1 to N do begin x[i]:=20*i; y[i]:=-2*i; If i<N then m[i]:=2 else m[i]:=10; end; Repeat inc(t); For i:=2 to N do begin x1:=x[i]; y1:=y[i]; Energy; U0:=U; x[i]:=x[i]+random(100)/25-2; y[i]:=y[i]+random(100)/25-2; Energy; U1:=U; If U1>U0 then begin x[i]:=x1; y[i]:=y1; end; end; Energy; Str(U, Energiya); If t mod 500=1 then begin cleardevice; For i:=1 to N-1 do begin circle(10+round(x[i]),150-round(y[i]),3); line(10+round(x[i]),150-round(y[i]), 10+round(x[i+1]),150-round(y[i+1])); end; line(10+round(x[N]),150-round(y[N]),410,150-60); OuttextXY(10,450,Energiya); end; until KeyPressed; CloseGraph; END. |

Рис. 10.2. Результат вычисления формы нити.
| Задача 10.3. Имеется неоднородная цепь, ее концы закреплены в некоторых точках. К заданной точке цепи привязана невесомая нить, которая перекинута через неподвожный блок и привязана к грузу известной массы M. |
Как и при решении задачи 10.2, заменим цепь совокупностью материальных точек, соединенных пружинами жесткостью k и длиной b. Пусть блок имеет небольшие размеры и его координаты равны X и Y, а перекинутая через него нить привязана к k-ой материальной точке с координатами xk и yk. Тогда при расчете потенциальной энергии системы следует учесть потенциальную энергию груза массы M:
Если к некоторой i-ой точке цепи привязан груз известной массы (без блока), то при рассчете формы цепи необходимо увеличить массу i-ой точки на массу груза. Во всем остальном задача решается аналогично предыдущей задаче 10.2: случайным образом на небольшие величины изменяются координаты частиц, вычисляется потенциальная энергия системы, определяется положение системы, при которой потенциальная энергия минимальна (приграмма ПР - 10.3). Результат решения -- на рис. 10.3. |
|
| {$N+} { ПР - 10.3 } uses dos, crt, graph; const N=80; b=5; k=200; g=10; pi=3.1415; var U, U0,U1,x1,y1,l, dU, S,mm: real; i, j,t, r,Gd, Gm: integer; Energiya: string; x, y,m: array [1..N] of single; Procedure Energy; var i: integer; begin U:=0; For i:=2 to N do begin l:=sqrt(sqr(x[i]-x[i-1])+sqr(y[i]-y[i-1])); If l>b then dU:=k*sqr(l-b)/2; U:=U+dU+m[i]*g*y[i]; end; S:=sqrt(sqr(x[40]-200)+sqr(y[40]-20)); U:=U+mm*g*S; end; BEGIN Randomize; Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi'); For i:=1 to N do begin x[i]:=6*i; y[i]:=-i; If i<40 then m[i]:=2 else m[i]:=4; m[20]:=30; end; mm:=25; Repeat inc(t); For i:=2 to N-1 do begin x1:=x[i]; y1:=y[i]; Energy; U0:=U; x[i]:=x[i]+random(100)/25-2; y[i]:=y[i]+random(100)/25-2; Energy; U1:=U; If U1>U0 then begin x[i]:=x1; y[i]:=y1; end; end; Energy; Str(U, Energiya); If t mod 500=1 then begin cleardevice; For i:=1 to N-1 do begin If i<40 then r:=1 else r:=4; circle(10+round(x[i]),150-round(y[i]),2); circle(10+round(x[i]),150-round(y[i]),r); line(10+round(x[i]),150-round(y[i]), 10+round(x[i+1]),150-round(y[i+1])); end; line(10+round(x[40]),150-round(y[40]),200,20); OuttextXY(10,450,Energiya); end; until KeyPressed; CloseGraph; END. |

Рис. 10.3. Результат вычисления формы нити.
| Задача 10.4. Рассчитайте форму длинной упругой пластины, находящейся в однородном поле тяжести. Пластина неоднородная, один ее конец закреплен. |

Рис. 10.4. К вычислению формы упругой пластины.
Пластину представим как систему материальных точек m[i], связанных недеформируемыми стержнями длиной b. При изгибе пластины изменяются угол φ[i] и координаты x[i], y[i]. Потенциальная энергия системы равна:
В используемой программе ПР - 10.4 реализуется следующий алгоритм. Последовательно перебираются материальные точки m[i] и случайным образом изменяются углы φ[i]. Каждый раз пересчитывается энергия системы. Если она увеличилась, то эта конфигурация отвергается, а если уменьшилась --- принимается. В результате определяется устойчивое состояние равновесия системы, соответствующее минимуму потенциальной энергии. На рис. 10.4 представлены результаты расчетов для неоднородного стержня (жесткости левой и правой половин различны), к концу которого прикреплен груз (масса m[N] в 5 раз больше масс других материальных точек). |
|
| {$N+} { ПР - 10.4 } uses dos, crt, graph; const N=20; b=20; g=10; pi=3.1415; var U, U0,U1,x1,y1,fi0,l, l1,dU: Real; i, j,t, Gd, Gm: integer; fi, x,y, m,k: array [0..N] of single; Energiya: string; Procedure Energy; var i: integer; begin U:=0; For i:=1 to N do begin x[i]:=x[i-1]+b*cos(fi[i]); y[i]:=y[i-1]-b*sin(fi[i]); end; For i:=1 to N do begin dU:=k[i]*sqr(fi[i]-fi[i-1])/2; U:=U+dU+m[i]*g*y[i]; end; end; BEGIN Randomize; Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi'); For i:=0 to N do begin fi[i]:=0; If i<N-1 then m[i]:=0.02 else m[i]:=0.1; If i<N/2 then k[i]:=20000 else k[i]:=1000; end; fi[0]:=-0.5; Repeat inc(t); For i:=N downto 1 do begin fi0:=fi[i]; Energy; U0:=U; fi[i]:=fi[i]+pi*(random(200)/100-1)/20; Energy; U1:=U; If U1>U0 then fi[i]:=fi0; end; Energy; Str(U, Energiya); For i:=1 to N do begin x[i]:=x[i-1]+b*cos(fi[i]); y[i]:=y[i-1]-b*sin(fi[i]); end; If t mod 50=1 then begin cleardevice; For i:=0 to N do begin circle(20+round(x[i]),150-round(y[i]),3); line(20+round(x[i]),150-round(y[i]), 20+round(x[i-1]),150-round(y[i-1])); end; circle(20+round(x[N]),150-round(y[N]),5); OuttextXY(10,450,Energiya); end; until KeyPressed; CloseGraph; END. |

Рис. 10.4. Изгиб неоднородного стержня с грузом на конце.
| Задача 10.5. Показатель преломления неоднородной среды зависит от координат: n=n(x, y). Используя принцип Ферма, рассчитайте траекторию распространения светового луча из фиксированной точки A в фиксированную точку B, оптическая длина которой минимальна. |
Согласно принципу Ферма, свет распространяется по пути, оптическая длина которого минимальна (экстремальна). Рассмотрим сетку, состоящую из вертикалей, пересекающих ось абсцисс в точках xi=iΔx, i=0,1,2,..,N. Траектория аппроксимируется ломанной, пересекающей линии сетки в точках y1=y(x1), y2=y(x2), y3=y(x3), ..., yN=y(xN). Оптическая длина пути такой траектории определяется формулой:
Будем случайным образом варьировать величины yi=y(xi), каждый раз определяя изменение оптической длины пути L. Если вариация yi вызывает уменьшение оптической длины пути, то она принимается, а в противном случае, --- отвергается. Используется программа ПР - 10.5, результат ее работы --- представлен на рис. 10.5. |
|
| {$N+} { ПР - 10.5 } uses dos, crt, graph; const N=106; M=80; R1=1; R2=0.7; pi=3.1415926; var s, s1,l, dx, a,xx, yy, L0,L1,n_sr: real; x, j,k, Gd, Gm: integer; y: array[1..N] of single; Dlina: string; Procedure Opt_plotn; begin s:=sqr(20-xx)+sqr(20-yy); s1:=sqr(80-xx)+sqr(50-yy); n_sr:=1+50/(s+1)+100/(s1+1); If n_sr>5 then n_sr:=5; end; Procedure Opt_Dlina; var x:integer; begin L:=0; For x:=1 to N-1 do begin xx:=x; yy:=y[x]; Opt_plotn; L:=L+n_sr*sqrt(sqr(y[x]-y[x+1])+dx*dx); end; end; BEGIN Randomize; dx:=1; Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi'); For x:=1 to N do y[x]:=2+0.7*x; Repeat inc(k); For x:=2 to N-1 do begin a:=y[x]; Opt_Dlina; L0:=L; y[x]:=a+random(20)/100-0.1; Opt_Dlina; L1:=L; If L1>L0 then y[x]:=a; end; Opt_Dlina; Str(L, Dlina); If k mod 100=0 then begin cleardevice; For x:=1 to N do For j:=1 to M do begin xx:=x; yy:=j; Opt_plotn; setcolor(round(n_sr*5)+5); rectangle(20+5*x,20+5*j,24+5*x,24+5*j); rectangle(21+5*x,21+5*j,23+5*x,23+5*j); end; OuttextXY(20,440,Dlina); setcolor(8); For x:=1 to N do begin circle(20+round(5*x),20+round(5*y[x]),1); circle(20+round(5*x),20+round(5*y[x]),2); circle(20+round(5*x),20+round(5*y[x]),3); end; end; until KeyPressed; CloseGraph; END. |

Рис. 10.5. Распространение света в неоднородной среде.
11. МОДЕЛИРОВАНИЕ БИОЛОГИЧЕСКИХ ПРОЦЕССОВ |
| Задача 11.1. Размножение насекомых на изолированном острове описывается квадратичным отображением xi+1=axi(1-xi). Изучите поведение этой функции в зависимости от параметра a, изменяющегося в интервале от 0 до 4. Постройте график x=x(r) и найдите точки бифуркации, в которых происходит расщепление пути эволюции системы и наступает динамический хаос. |
Численность насекомых Ni+1 в (i+1)-ом поколении с одной стороны пропорциональна числу насекомых Ni в предыдущем i-ом поколении. С другой стороны, с ростом Ni насекомые начинают испытывать нехватку энергетического ресурса (еды) и их коэффициент размножения уменьшается. При достижении числа насекомых Ni своего предела A коэффициент размножения уменьшается до 0. Получаем уравнение:
Напишем программу ПР - 11.1, вычисляющую по значений xi при различных значениях параметра a, который изменяется от 0 до 4 и выводит результаты на экран в графическом виде. Результат ее работы представлен на рис. 11.1. Видно, что пока a меньше 3 каждому значению параметра a соответствует одно значение x. Дальнейшее увеличение a приводит к каскаду бифуркаций удвоения периода: сначала одному значению a отвечают два значения x, затем 4, затем 8 и т. д. Послдедовательность бифуркаций, начинаясь слева переходит в хаос справа, которому соответствует уже не непрерывная линия, а фрактальное множество точек. Полосы хаоса перемежаются с "окнами периодичности". |
|
| Uses crt, graph; { ПР - 11.1 } Var DrV, MV, i,j: integer; a, x : real; BEGIN DrV:=Detect; InitGraph(DrV, MV,'c:\bp\bgi'); Repeat a:=a+0.003; x:=0.01; For i:=1 to 1000 do begin x:=a*x*(1-x); If i>100 then putpixel(round(150*a), 450-round(x*350),15); end; until a>3.99; For j:=1 to 4 do line(150*j,0,150*j,480); Repeat until KeyPressed; CloseGraph; END. |

Рис. 11.1. Квадратичное отображение.
| Задача 11.2. На изолированном острове имеется популяция волков (хищников) и популяция зайцев (жертв). Встречаясь с зайцем волк съедает его, при этом число зайцев уменьшается, а популяция волков растет. Без пищи волки вымирают от голода. Изучите динамику хищника и жертвы на компьютере. |
Численность популяции зайцев и волков обозначим через N и C. Быстрота увеличения числа зайцев dN/dt зависит от их числа N, коэффициента рождаемости r, а также частоты встреч волков и зайцев, которая пропорциональна NC. Скорость изменения числа волков dC/dt определяется их количеством C, коэффициентом смертности q, а также частотой встречи с зайцами, пропорциональной NC:
Ниже представлена программа ПР - 11.2, позволяющая вычислить численность популяции волков и зайцев в последовательные моменты времени и строящая фазовую кривую системы. Результат вычислений -- на рис. 11.2. |
|
| uses crt, graph; { ПР - 11.2 } var t, N,C, dN, dC : real; Gd, Gm : integer; const r=0.03; q=0.01; a=0.00001; f=0.15; dt=0.1; BEGIN Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi\'); N:=5000; C:=1000; Line(0,400,640,400); Line(20,0,20,480); Repeat t:=t+dt; dN:=(r*N-a*N*C)*dt; {зайцы} dC:=(-q*C+f*a*N*C)*dt; {волки} N:=N+dN; C:=C+dC; t:=t+dt; circle(20+round(t/5),400-round(N/100),1); circle(20+round(t/5),400-round(C/100),2); {circle(20+round(N/50),400-round(C/50),2);} until t>3000; Repeat until keypressed; CloseGraph; END. |

Рис. 11.2. Динамика популяции волков и зайцев.
| Задача 11.3. Имеется популяция животных одного вида. Известен коэффициент рождаемости r, коэффициент смертности s и максимально возможная численность животных K. Как изменяется численность популяции с течением времени, если смертность на некоторое время резко увеличивается (например, вследствие эпидемии). |
Быстрота увеличения численности животных dN/dt пропорциональна их количеству N. При этом имеет место внутривидовая конкуренция, состоящая в использовании энергетического ресурса одним животным, что снижает доступность этого ресурса для другого животного того же вида. Это приводит к тому, что с ростом численности N коэффициент рождаемости уменьшается, а когда N приближается к максимально возможному числу K, рождаемость падает до 0. Чтобы учесть уменьшение числа животных N вследствие смертности, вводят слагаемое - sN, где s --- коэффициент смертности. Получается:
Для численного решения этого уравнения используется программа ПР - 11.3. В интервале [t1;t2] смертность увеличивается в 5 раз. Результат моделирования -- на рис. 11.3. |
|
| uses crt, graph; { ПР - 11.3 } var t, s,N, C,dN, dC: real; Gd, Gm: integer; const r=0.03; K=100; dt=0.1; BEGIN Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi\'); Line(0,400,640,400); Line(20,0,20,480); N:=2; Repeat t:=t+dt; If (t>1000)and(t<1500) then s:=0.01 else s:=0.002; dN:=(r*N*(K-N)/K-s*N)*dt; N:=N+dN; t:=t+dt; circle(20+round(t/4),400-round(N*3),2); until t>3000; Repeat until keypressed; CloseGraph; END. |

Рис. 11.3. Зависимость численности популяции от времени.
12. АВТОМАТЫ. КЛЕТОЧНЫЕ АВТОМАТЫ |
| Задача 12.1. Напишите программу, моделирующую работу автомата с четырьмя внутренними состояниями. Диаграмма Мура задана. На вход автомата поступает последовательность символов "baba... acbb". |

Рис. 12.1. Диаграмма Мура автомата с четырьмя состояниями.
Автомат -- это дискретное устройство, имеющее конечное множество внутренних состояний Q={q1, q2, ...}, и преобразующий входные сигналы (символы) X={x1, x2, ...} в выходные сигналы (символы) Y={y1, y2, ...} в соответствии с определенными правилами, задаваемыми функцией перехода и функцией выходов. Для задания автомата строят диаграмму Мура, которая представляет собой ориентированный граф. Вершины графа изображают состояния автомата Q={1, 2, 3, 4}. Каждой команде соответствует ребро, идущее из qi в qj. Из диаграммы на рис. 12.1 видно, что если автомат находится в состоянии 2, на вход поступает символ "c", то автомат переходи в состояние 4, на выходе получается символ A. Компьютерная программа ПР - 12.1 моделирует работу автомата с четырьмя внутренними состояниями, на вход которого поступает последовательность символов S:="baba... acbb". При ее работе на экране появляется номер состояния автомата символ на его выходе в результате первого, второго, третьего... шага. |
|
| uses crt; { ПР - 12.1 } var i: integer; x, y,S, a,b, c: string; q: integer; label m; BEGIN S:='babacaabcbabcbcbaaccbcbabcbccaacbb'; writeln('S=',S);q:=1; For i:=1 to length(S) do begin x:=copy(S, i,1); If (x='a')and(q=1) then begin q:=1; y:='B'; goto m; end; If (x='c')and(q=1) then begin q:=2; y:='A'; goto m; end; If (x='b')and(q=1) then begin q:=4; y:='C'; goto m; end; If (x='b')and(q=2) then begin q:=2; y:='D'; goto m; end; If (x='a')and(q=2) then begin q:=3; y:='B'; goto m; end; If (x='c')and(q=2) then begin q:=4; y:='A'; goto m; end; If (x='a')and(q=3) then begin q:=4; y:='C'; goto m; end; If (x='c')and(q=3) then begin q:=3; y:='E'; goto m; end; If (x='b')and(q=3) then begin q:=2; y:='C'; goto m; end; If (x='a')and(q=4) then begin q:=4; y:='E'; goto m; end; If (x='b')and(q=4) then begin q:=3; y:='F'; goto m; end; If (x='c')and(q=4) then begin q:=1; y:='D'; goto m; end; m: write(q,' ',y,' | '); end; ReadKey; END. |
| Задача 12.2. Создайте компьютерную модель ученика, представляющего собой вероятностный автомат с несколькими внутренними состояниями. Ученик случайным образом переходит из одного состояния в другое, совершая определенную последовательность действий. Промоделируйте процесс обучения. |

Рис. 12.2.1. Диаграмма Мура автомата с двумя состояниями.
Рассмотрим абстрактную модель ученика, представляющую собой вероятностный автомат с двумя состояниями. При переходе из одного состояния в другое автомат как-бы выполняет некоторую операцию (действие). Будем считать, что автомат обучен, когда из состояния 1 он переходит в состояние 2, а из состояния 2 --- в состояние 1 и т. д.: -... Если из состояния 1 автомат переходит в состояние 1 или из состояния 2 переходит в состояние 2, то он совершает ошибку. Вероятность правильного действия обозначим через p, тогда вероятность неправильного действия равна q=1-p. В принципе можно изучать работу вероятностного автомата с большим числом состояний, но при этом всегда один из переходов будет правильным, а остальные --- неправильными. Изначально автомат необучен. Пусть он может совершить 100 различных операций с равными вероятностями, тогда вероятность правильного действия p=0.01. Программа ПР - 12.2.1, моделирующая ученика, содержит цикл, в котором выбор каждой операции осуществляется с помощью генератора случайных чисел. Если случайное число x, находящееся в интервале [0;1], меньше p, то АМУ совершает правильное действие, если нет --- то делает ошибку. Процесс обучения приводит к изменению матрицы вероятностей: вероятность правильного выбора p увеличивается на a*q, где a --- коэффициент научения, а вероятность ошибки уменьшается на ту же величину. Уровень знаний Z будем считать равным вероятности p правильного перехода. Чтобы учесть забывание необходимо на каждом временном шаге уменьшать p на g*p (g --- коэффициент забывания) и на такую же величину увеличивать q: p:=p-g*p; q:=q+g*p; {забывание} Программа позволяет промоделировать ситуации: Обучение с поощрением: при выполнении правильного действия ученика "поощряют", пересчитывая вероятности p и q. Так как сначала ученик ошибается гораздо чаще (q превосходит p), то сначала обучение происходит медленно (рис. 12.2.2). Зато по мере увеличения "знаний" вероятность совершения правильного действия растет. Акты обучения происходят все чаще, вероятность p увеличивается до 1. Программа содержит строку: If (x<p)and(t<4000) then begin p:=p+a*q; q:=q-a*q; end; Обучение с наказанием: в случае ошибки ученика "наказывают", подсказывая ему правильный ответ, что приводит к росту p и уменьшению q. Сначала ученик ошибается часто, поэтому уровень его "знаний" быстро растет, вероятность ошибки q падает (рис. 12.2.3). Акты обучения происходя реже, вероятность правильного действия не достигает 1 (за счет забывания). Программа содержит строку: If (x>p)and(t<4000) then begin p:=p+a*q; q:=q-a*q; end; Обучение с поощрением и наказанием: при правильном ответе ученика поощряют, а при неправильном наказывают, подсказывая правильный ответ. В обоих случаях вероятность правильного действия p растет, а вероятность ошибки снижается. За счет того, что при любом действии учащегося его учат, уровень знаний быстро растет и достигает 1 (рис. 12.2.4). Программа содержит строку: If t<4000 then begin p:=p+a*q; q:=q-a*q; end; |
|
| uses dos, crt, graph; { ПР - 12.2.1 } var t, Gd, Gm : integer; x, p,q, a,g : real; BEGIN Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi'); Randomize; line(0,450,640,450); line(10,0,10,480); p:=0.01; q:=1-p; a:=0.003; g:=0.0004; Repeat inc(t); x:=random(1000)/1000; If (x>p)and(t<4000) then begin p:=p+a*q; q:=q-a*q; end; p:=p-g*p; q:=q+g*p; {забывание} Circle(10+round(t/15),450-round(400*p),2); until (t>10000)or(KeyPressed); Repeat until KeyPressed; CloseGraph; END. |

|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 |














