Рис. 3.8. Конвекция двумерного газа.

Задача 3.9.

Рост некоторых природных объектов (кораллов, снежных хлопьев) происходит в результате случайного присоединения частей. Этот процесс называется агрегацией с ограничением диффузии. Возникает фрактал, имеющий древовидную структуру и называющийся дендритом. Напишите программу, моделирующую рост дендрита.

Промоделируем хаотическое движение молекул некоторого вещества в растворе. Все молекулы находятся в состоянии 0. Когда какая-нибудь молекула достигнет ячейки с заравочной частицей, она перейдет в состояние 1, остановится и изменит свой цвет. Если другая частица приблизится к молекуле, находящейся в состоянии 1, она как бы осядет, присоединится к ней, тоже перейдя в состояние 1. Частицы, находящиеся в состоянии 0, продолжают хаотически двигаться и оседать на частицах, находящихся в состоянии 1. В результате растет фрактал, имеющий древовидную структуру. Частицы, обуславливающие его рост, не могут проникнуть в глубь образующегося дендрита, они оседают на его периферии. Используется программа ПР - 3.9, результат ее работы представлен на рис. 3.9.2. В ней используются периодические граничные условия: когда частица выходит через левую границу квадратной ячейки, она входит в нее через правую границу; когда частица выходит через нижнюю границу квадратной ячейки, она входит в нее через верхнюю границу и т. д.

{$N+}

uses dos, crt, graph; { ПР - 3.9 }

const N=400;

var Fx, Fy, x,y, vx, vy: array[1..N] of Longint;

h: array[1..N] of boolean;

r, t,Gd, Gm, i,j: integer; k, ax, ay, F,l: single;

hh: string; v: real; label m0;

Procedure Raschet;

label m1;

begin For i:=1 to N do For j:=1 to N do

If h[i]=false then begin

l:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));

If (h[j]=true)and(l<6) then h[i]:=true;

end; end;

Procedure Nach_uslov;

begin For i:=1 to N do begin

x[i]:=100+round(random(300));

y[i]:=100+round(random(300));

end; end;

BEGIN

Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

Nach_uslov; Randomize; setbkcolor(15);

Repeat Raschet;

For i:=1 to N do

begin

If h[i]=true then goto m0;

x[i]:=x[i]+round(random(600)/100)-3;

y[i]:=y[i]+round(random(600)/100)-3;

If x[i]<100 then x[i]:=400;

If x[i]>400 then x[i]:=100;

If y[i]>400 then y[i]:=100;

If y[i]<100 then y[i]:=400;

If (abs(x[i]-250)<4)and(abs(y[i]-250)<4)then h[i]:=true;

m0:

end;

If t mod 20=0 then

begin

cleardevice;

For i:=1 to N do

begin

If h[i]=true then setcolor(blue) else setcolor(red);

circle(round(x[i]),round(y[i]),2);

circle(round(x[i]),round(y[i]),1);

end;

end; inc(t);

until KeyPressed; Repeat until keypressed; CloseGraph;

END.

Рис. 3.9.1. Рост дендрита.

НЕ нашли? Не то? Что вы ищете?

Рис. 3.9.1. Рост дендрита.

Рис.

Рис. 3.9.2. Дендрит имеет фрактальную структуру.

4. МЕХАНИКА ТВЕРДОГО ТЕЛА

Задача 4.1.

Стержень устанавливают на горизонтальную поверхность так, чтобы он образовывал некоторый угол с вертикалью и отпускают. Необходимо рассчитать координаты его концов при падении в последовательные моменты времени.

Рис.

Рис. 4.1.1. Падение стержня на горизонтальную поверхность.

Рассмотрим систему, состоящую из двух материальных точек m1 и m2, связанных между собой невесомым упругим стержнем. Длина стержня в недеформированном состоянии равна l0, при его сжатии возникают силы упругости F1 и F2. Будем считать, что нижний конец стержня A скользит по горизонтальной поверхности, не отрываясь от нее (y1=0). При этом на него действует сила вязкого трения FТР, пропорциональная скорости и направленная в сторону противоположную движению. Проекции сил, действующих на материальные точки m1 и m2 вычисляются из формул:

В программе ПР - 4.1 в последовательные моменты времени пересчитывают силы, действующие на материальные точки, их ускорения, скорости и координаты. Результаты моделирования падения стержня при различных значениях коэффициента сопротивления r представлены на рис. 4.1.2. При необходимости можно рассчитать траекторию движения центра масс стержня, зависимость его угла наклона от времени и т. д.

uses dos, crt, graph; { ПР - 4.1 }

const m1=1; m2=2; k=100; r=0.02; l0=300; dt=0.001;

var l, x1,x2,y1,y2,vx1,vy1,vx2,vy2,F, Fx1,Fy1,Fx2,Fy2 : real;

Gd, Gm, n : integer;

BEGIN

Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

x1:=200; y1:=0; x2:=201; y2:=300;

line(0,452,640,452);

Repeat

l:=sqrt(sqr(x1-x2)+sqr(y1-y2)); F:=k*(l0-l);

Fx1:=-F*(x2-x1)/l-r*vx1;

Fx2:=F*(x2-x1)/l; Fy2:=F*(y2-y1)/l-9.8*m2;

vx1:=vx1+Fx1/m1*dt; vy1:=vy1+Fy1/m1*dt;

vx2:=vx2+Fx2/m2*dt; vy2:=vy2+Fy2/m2*dt;

x1:=x1+vx1*dt;

x2:=x2+vx2*dt; y2:=y2+vy2*dt;

if y2<1 then begin vx2:=0; vy2:=0; end;

if n mod 500=0 then begin

line(20+round(x1),450-round(y1),20+round(x2),450-round(y2));

line(21+round(x1),451-round(y1),21+round(x2),451-round(y2));

circle(20+round(x2),450-round(y2),3); end; n:=n+1;

until KeyPressed;

END.

Рис.

Рис. 4.1.2. Результаты моделирования падения стержня.

Задача 4.2.

Лестницу прислоняют к стене и отпускают. Напишите программу, моделирующую падение лестницы, если известно, что ее концы с трением скользят по поверхностям стены и пола, не отрываясь от них.

Рис.

Рис. 4.2. Падение стержня на горизонтальную поверхность.

Вместо лестницы рассмотрим систему двух материальных точек массами m1 и m2, соединенных невесомым упругим стержнем жесткостью k и длиной l0. Эти точки как бы скользят по вертикальной и горизонтальной направляющим, при этом на них действует сила вязкого трения, прямо пропорциональная скорости и направленная в противоположную сторону. Найдем действующие на точки силы:

Программа ПР - 4.2 содержит цикл по времени в котором вычисляются силы, действующие на материальные точки, определяются их ускорения, скорости и координаты, а также координаты центра масс. На экране монитора изображается положение лестницы в последовательные моменты времени.

uses dos, crt, graph; { ПР - 4.2 }

const m1=3; m2=1; k=1000; r=0.1; dt=0.0004;

var x1,x2,y1,y2,xc, yc, vx1,vy1,vx2,vy2,l, l0,F, Fx1,Fy1,Fx2,Fy2 : real;

Gd, Gm, n : integer;

BEGIN

Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

x1:=100; y1:=300; x2:=150; y2:=0;

l0:=sqrt(sqr(x1-x2)+sqr(y1-y2));

rectangle(100,450,500,100);

Repeat

l:=sqrt(sqr(x1-x2)+sqr(y1-y2)); F:=k*(l0-l);

Fy1:=F*(y1-y2)/l-9.8*m1-r*vy1;

Fx2:=F*(x2-x1)/l-r*vx2;

vy1:=vy1+Fy1/m1*dt; vx2:=vx2+Fx2/m2*dt;

x2:=x2+vx2*dt; y1:=y1+vy1*dt;

xc:=(m1*x1+m2*x2)/(m1+m2); yc:=m1*y1/(m1+m2);

if y1<1 then begin vx1:=0; vy1:=0; end;

delay(10);

if n mod 2000=0 then begin

setcolor(15);

line(round(x1),450-round(y1),round(x2),450-round(y2));

line(round(x1+1),451-round(y1),round(x2+1),451-round(y2));

setcolor(12);

circle(round(x1),450-round(y1),2);

circle(round(x2),450-round(y2),2);

circle(round(xc),450-round(yc),3);

circle(round(xc),450-round(yc),4);

end; n:=n+1;

until KeyPressed;

END.

Рис.

Рис. 4.2. Падение стержня на горизонтальную поверхность.

Задача 4.3.

Промоделируйте плоское движение тела в поле тяжести, при котором его центр масс движется по кривой, а само тело вращается вокруг центра масс. Используйте модель состоящую из двух материальных точек, связанных упругим стержнем.

Рис.

Рис. 4.3.1. К вычислению массы, объема и координат центра масс тела.

Рассмотрим систему из двух материальных точек, соединенных упругим стержнем. Проекции сил, действующих на точки, могут быть вычислены по формулам:

<="" p="">

Программа ПР - 4.3 содержит цикл по времени, в котором вычисляются действующие силы, ускорения, скорости и координаты точек. На экране строятся положения стержня в последовательные моменты времени. Программа позволяет промоделировать: 1) отскок стержня от стены и пола; 2) движение системы в случае, когда массы точек сильно отличаются; 3) движение системы при не очень большой жесткости стержня.

uses dos, crt, graph; { ПР - 4.3 }

const m1=0.2; m2=0.1; k=1000; r=0.005;

b=0.6; l0=40; dt=0.001;

var l, x1,x2,y1,y2,vx1,vy1,vx2,vy2,F, Fx1,Fy1,Fx2,Fy2 : real;

Gd, Gm, n : integer;

BEGIN

Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

x1:=0; y1:=300; x2:=0; y2:=260; vx1:=50; vy1:=20;

rectangle(2,2,572,442);

Repeat

l:=sqrt(sqr(x1-x2)+sqr(y1-y2)); F:=k*(l-l0);

Fx1:=F*(x2-x1)/l-r*vx1; Fy1:=F*(y2-y1)/l-r*vy1-0.98*m1;

Fx2:=-F*(x2-x1)/l-r*vx2; Fy2:=-F*(y2-y1)/l-r*vy2-0.98*m2;

vx1:=vx1+Fx1/m1*dt; vy1:=vy1+Fy1/m1*dt;

vx2:=vx2+Fx2/m2*dt; vy2:=vy2+Fy2/m2*dt;

x1:=x1+vx1*dt; y1:=y1+vy1*dt;

x2:=x2+vx2*dt; y2:=y2+vy2*dt;

If x1>550 then vx1:=-b*vx1; If x2>550 then vx2:=-b*vx2;

If y1<-0 then vy1:=-b*vy1; If y2<-0 then vy2:=-b*vy2;

circle(20+round(x2),440-round(y2),1);

If n mod 1000=0 then begin

line(20+round(x1),440-round(y1),20+round(x2),440-round(y2));

circle(20+round(x1),440-round(y1),3);

end; inc(n);

until KeyPressed;

END.

Рис. 4.3.2. Движение палки в поле тяжести.

Рис. 4.3.2. Движение палки в поле тяжести.

Задача 4.4.

На тележке массой m1 подвешен маятник, состоящий из тела массой m2 и нити длиной l. Маятник выводят из положения равновесия и отпускают. В подшипниках тележки действует сила вязкого трения. Напишите программу, моделирующую затухающие колебания системы.

Рис. 4.4.1. Движение тележки с маятником.

Рис. 4.4.1. Движение тележки с маятником.

Заменим систему "маятник-тележка" системой, состоящей из двух материальных точек m1 и m2, связанных упругим стержнем жесткостью k и длиной l0. Материальная точка m1 способна скользить по горизонтальной линии так, что ее координата y2остается постоянной. При этом на нее действует сила вязкого трения, направленная противоположно скорости и пропорциональная ее величине. Проекции сил, действующих на точки системы, вычисляются по формулам:

Формулы для расчета колебаний маятника на тележке.

В предлагаемой программе ПР - 4.4 осуществляется расчет действующих на точки сил, а также проекций их ускорений, скоростей и координат в последовательные моменты времени. Результаты моделирования представлены на рис. 4.4.

uses dos, crt, graph; { ПР - 4.4 }

const m1=0.1; m2=0.2; k=100; r=0.01; dt=0.001;

var l0,l, x1,x2,y1,y2,vx1,vy1,vx2,vy2,F, Fx1,Fy1,Fx2,Fy2 : real;

Gd, Gm : integer; n: longint;

BEGIN

Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

x1:=0; y1:=0; x2:=300; y2:=-150;

l0:=sqrt(sqr(x1-x2)+sqr(y1-y2));

Repeat

l:=sqrt(sqr(x1-x2)+sqr(y1-y2)); F:=k*(l-l0);

Fx1:=F*(x2-x1)/l-r*vx1;

Fx2:=-F*(x2-x1)/l;

Fy2:=-F*(y2-y1)/l-0.5*m2;

vx1:=vx1+Fx1/m1*dt;

vx2:=vx2+Fx2/m2*dt;

vy2:=vy2+Fy2/m2*dt;

x1:=x1+vx1*dt;

x2:=x2+vx2*dt;

y2:=y2+vy2*dt;

circle(250+round(x2),50-round(y2),1);

if n mod 8000=0 then begin

line(250+round(x1),50-round(y1),250+round(x2),50-round(y2));

line(251+round(x1),51-round(y1),251+round(x2),51-round(y2));

circle(250+round(x1),50-round(y1),2);

circle(250+round(x2),50-round(y2),2);

circle(250+round(x2),50-round(y2),3);

end; inc(n);

until KeyPressed;

END.

Рис. 4.4.2. Колебания маятника на тележке.

Рис. 4.4.2. Колебания маятника на тележке.

Задача 4.5.

На горизонтальной поверхности покоится кольцо (труба), к внутренней стороне которого прикреплен груз. Расстояние от оси кольца до его центра масс известно. Кольцо смещают из положения равновесия от отпускают. Изучите: 1) колебания кольца относительно положения равновесия; 2) движение кольца после того, как ему сообщили начальную скорость.

Рис. 4.5.1. Колебания маятника на тележке.

Рис. 4.5.1. Колебания маятника на тележке.

Необходимо рассчитать расстояние от центра кольца O до центра масс C, момент M силы тяжести, момент инерции I относительно мгновенной оси вращения A. Для этого используют формулы:

Зная момент силы и момент инерции определяют угловое ускорение тела в последовательные моменты времени, вычисляют угловую скорость и угол поворота, горизонтальную координату центра кольца. При этом используется программа ПР-1, результаты представлены на рис. 4.5.2, 4.5.3. Чтобы промоделировать качение кольца со смещенным центром масс, следует задать начальную скорость (рис. 4.5.4).

uses dos, crt, graph; { ПР - 4.5 }

const dt=0.005; g=9.8; R=60; l=55;

var x, w,fi, mt, mgr, lc, M,I, dd : real;

Gd, Gm : integer; k: longint;

BEGIN

Gd:=Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

mt:=1; mgr:=10; x:=-10; fi:=3.0;w:=0;{-0.1;}

Repeat inc(k); lc:=mgr*l/(mgr+mt);

M:=(mgr+mt)*g*lc*sin(fi);

dd:=R*R+l*l-2*R*l*cos(fi);

I:=mgr*dd+2*mt*R*R;

w:=w-M/I*dt; fi:=fi+w*dt; x:=x-R*w*dt;

{ circle(10+round(k/100),300-round(0.4*x),1);}

circle(100+round(x+R*sin(fi)),300+round(R*cos(fi)),1);

if k mod 500=0 then begin {cleardevice;}

line(0,300+R,640,300+R); line(0,301+R,640,301+R);

line(100+round(x),300,100+round(x+R*sin(fi)),300+round(R*cos(fi)));

circle(100+round(x),300,R); circle(100+round(x),300,R-1); end;

until (k>7000)or(KeyPressed);

Repeat until KeyPressed; CloseGraph;

END.

Рис.

Рис. 4.5.2. Зависимость угла поворота от времени.

Рис.

Рис. 4.5.3. Колебания кольца на горизонтальной поверхности.

Рис.

Рис. 4.5.4. Качение кольца со смещенным центром масс.

Задача 4.6.

Брусок в форме прямоугольного параллелепипеда плавает на поверхности жидкости. Координаты центра масс, плотности жидкости и бруска известны. Определите расположение бруска относительно поверхности жидкости.

Рис. 4.6.1. К расчету положения тела.

Рис. 4.6.1. К расчету положения тела.

Расположение бруска относительно поверхности воды однозначно определяется величинами d и φ (рис. 4.6.1). Пусть a=3, b=1. Задача решается так. Положим, что φ=0. Будем увеличивать d от -3 с некоторым шагом, каждый раз вычисляя объем погруженной части бруска и определяя силу Архимеда. Плотность бруска ρ меньше плотности жидкости ρ0, поэтому сила Архимеда превысит силу тяжести, когда тело не полностью погрузится в жидкость. Нарисуем поверхность жидкости AB и определим положение центра плавучести P.

Брусок будет находиться в положении устойчивого равновесия тогда, когда центр масс C находится точно под центром плавучести P, то есть углы φ и φ1 равны. Если это условие не выполняется, будем увеличивать угол φ с некоторым шагом, каждый раз определяя величину d, положение центра плавучести P и проверяя равенство углов φ и φ1 (оно может выполняться с небольшой погрешностью). Когда углы φ и φ1 окажутся равными, программы должна вывести результат вычислений.

Для нахождения объема погруженной части тела Vp необходимо найти площадь S фигуры, выделенной точками. Для этого используется метод прямоугольников:

For i:=-100 to 100 do begin

x:=dx*i; y:=sin(fi)/cos(fi)*x+d;

If y>b then y:=b; If y<-b then y:=-b;

S:=S+(y+b)*dx;

end;

Чтобы найти координаты xpl и ypl центра плавучести, внутрь прямоугольника случайным образом бросим 100000 точек и подсчитаем количество точек, попавших в заштрихованную область S, соответсвующую погруженной части тела. Используется следующий фрагмент программы:

Repeat x:=(random(200)/100-1)*a;

y:=(random(200)/100-1)*b;

yl:=sin(fi)/cos(fi)*x+d; inc(N);

if y100000;

xpl:=sx/(nn+0.01); ypl:=sy/(nn+0.01);

Результаты работы программы ПР - 4.6 представлены на рис. 4.6.2 и 4.6.3. Программа рисует прямоугольное сечение бруска и определяет положение поверхности жидкости AB и центра плавучести. Сила Архимеда направлена вдоль вертикали MN. В состоянии устойчивого равновесия центр масс C и центр плавучести P лежат на одной вертикали MN. Изображение, получающееся на экране монитора, представлено в левой части рис. 4.6.2 и 4.6.3.

{$N+}

uses dos, crt, graph;

const rho=900; rho0=1000; g=9.8; { ПР - 4.6 }

Ms=50; a=3; b=1; c=1; xc=1.2;

yc=-0.5; pi=3.1415;

var x, y,dx, d,yl, Vp, V,S, sx, sy, xpl, ypl, Fa, Ft, m,fi, fi1: single;

i, j,k, Gd, Gm: integer; n, nn: Longint;

BEGIN

Gd:= Detect; InitGraph(Gd, Gm, 'c:\bp\bgi');

Randomize; dx:=a/100;

Repeat

inc(j); fi:=pi/300*j; d:=-3;

Repeat S:=0; {cleardevice;}

For i:=-100 to 100 do

begin

x:=dx*i; y:=sin(fi)/cos(fi)*x+d;

If y>b then y:=b; If y<-b then y:=-b;

S:=S+(y+b)*dx;

end;

V:=4*a*b*c; Vp:=S*c;

Fa:=rho0*Vp*g; Ft:=rho*4*a*b*c*g;

d:=d+0.01;

until Fa>Ft;

rectangle(320-Ms*a,240-Ms*b,320+Ms*a,240+Ms*b);

rectangle(318-Ms*a,238-Ms*b,322+Ms*a,242+Ms*b);

circle(round(320+Ms*xc),round(240-Ms*yc),5);

N:=0; nn:=0; sx:=0; sy:=0;

Repeat

x:=(random(200)/100-1)*a;

y:=(random(200)/100-1)*b;

yl:=sin(fi)/cos(fi)*x+d; inc(N);

If y<yl then

begin

inc(nn); sx:=sx+x; sy:=sy+y;

end;

until N>100000;

xpl:=sx/(nn+0.01); ypl:=sy/(nn+0.01);

fi1:=arctan((xc-xpl)/abs(yc-ypl));

circle(round(320+Ms*xpl),round(240-Ms*ypl),2);

circle(round(320+Ms*xpl),round(240-Ms*ypl),3);

line(round(320+Ms*(xpl-5*sin(fi))),round(240-

Ms*(ypl+5*cos(fi))), round(320+Ms*(xpl+5*sin(fi))),

round(240-Ms*(ypl-5*cos(fi))));

line(320+Ms*5,240-round(Ms*sin(fi)/cos(fi)*5+Ms*d),

320-Ms*5,240-round(-Ms*sin(fi)/cos(fi)*5+Ms*d));

until fi1<fi;

Repeat until KeyPressed; CloseGraph;

END.

Рис.

Рис. 4.6.2. Устойчивое состояние плавающего тела.

Рис.

Рис. 4.6.3. Устойчивое состояние плавающего тела.

5. РАСЧЕТ ЭЛЕКТРИЧЕСКИХ ЦЕПЕЙ

Задача 5.1.

Электрическая цепь (рис. 5.1) состоит из источника постоянной ЭДС E=200 В, резистора R1=400 Ом и нелинейного элемента, вольт--амперная характеристика которого может быть апроксимирована многочленом третьей степени i(u)=2+5u-0,18u2+0,002u3. Рассчитайте ток в цепи.

Рис. 5.1. Расчет нелинейной цепи.

Рис. 5.1. Расчет нелинейной цепи.

Вольт--амперные характеристики обоих элементов изображены на рис. 5.1 (ВАХ резистора повернута вокруг оси ординат и смещена на E). Напряжение на нелинейном элементе равно U=E-IR1, поэтому для нахождения искомого тока I следует решить нелинейное алгебраическое уравнение:

Чтобы решить уравнение необходимо определить количество корней и локализовать их, то есть установить интервалы, внутри которых находится каждый корень. Воспользуемся графическим методом, для этого построим график функции

и найдем точку его пересечения с осью абсцисс, для которой F(I)=0. Она лежит в интервале 0,2 -- 0,4 мА. Самым простым способом решения подобных уравнений является табулирование функции F(I). Это может быть реализовано с помощью алгоритма A-1 (программа ПР - 5.1.1). При запуске программы на экран выводятся те значения тока, для которых функция F(I) по модулю меньше чем ε =0,01, то есть близка к нулю. Это позволяет уменьшить неопределенность в нахождении корня до 0,01, корень уравнения лежит в интервале от 2,960 до 2,965. Ответ: ток примерно равен 2,962 А.

uses crt, graph; const N=200; { ПР - 5.1.1 }

var EC, D,DrV, MV, i,j, q1,q2,q3,x1,y1,x2,y2,x3,y3,k: integer;

u, tok, tok1,a0,a1,a2,a3,r1,E: real;

BEGIN

clrscr; a0:=2; a1:=5; a2:=-0.18;

a3:=0.002; R1:=400; E:=200;

For i:=0 to 2000 do

begin

tok:=0.0005*i; u:=E-Tok*R1;

Tok1:=0.001*(a0+a1*u+a2*u*u+a3*u*u*u);

If abs(tok-tok1)<0.01 then

writeln(tok, ' ', tok1, ' ', tok-tok1);

end; readkey;

END.

Другой способ решения уравнения F(x)=0 состоит в использовании метода половинного деления. Задается интервал [a0, b0], содержащий корень. График функции y=F(x) должен пересекать ось абсцисс внутри интервала, на его границах функция имеет противоположны знаки, в чем можно убедиться, проверив условие F(a0)F(b0)<0. Отрезок [a0, b0] делится точкой с=(a+b)/2 попалам. Если F(c)=0, то значение x=c и есть корень уравнения. В противном случае из двух отрезков [a0,c] и [c, b0] выбирается тот, внутри которого график y=F(x) пересекает ось абсцисс. Для этого снова проверяется условие F(c)F(b0)<0, если оно выполняется, то a1=c, b1=b0. После этого осуществляется следующая итерация: отрезок [a1, b1] снова делится попалам и т. д. Так продолжается до тех пор, пока длина отрезка [ai, bi] не окажется меньше заданной точности ε.

Используется программа ПР - 5.1.2. Понятно, что ток в цепи не может превышать значение E/R1, поэтому в качестве нулевого приближения к корню выберем интервал [0, E/R1]. В результате последовательности итераций при ε=0,0000001 получается корень уравнения 2,96296. Округляя до четырех значащих цифр, получаем: ток равен 2,963 А.

uses crt; { ПР - 5.1.2 }

var a0,a1,a2,a3,r1,E, u,tok, tok1,y1,y2,y3,a, b,c, eps: real;

Label metka;

Function Funk(Tok: real): real;

begin

u:=E-Tok*R1; Funk:=0.001*(a0+a1*u+a2*u*u+a3*u*u*u)-Tok;

end;

BEGIN

clrscr; a0:=2; a1:=5; a2:=-0.18; a3:=0.002;

R1:=400; E:=200; a:=0; b:=E/R1; eps:=0.0000001;

metka:

y1:=Funk(a); y2:=Funk(b); c:=(a+b)/2; y3:=Funk(c);

writeln(a, b); if (y1*y3)>0 then a:=c else b:=c;

If (b-a)>eps then goto metka;

writeln('Корень лежит в интервале ', a, b);

writeln('0= ',Funk(a)); readkey;

END.

Задача 5.2.

Напишите программу, рассчитывающую сопротивление цепи, состоящей из бесконечной цепочки резисторов R1=80 Ом и R2=100 Ом (рис. 5.2).

Рис.

Рис. 5.2. Схема из бесконечной цепочки резисторов.

Найдем сопротивление участка цепи MABN из двух ветвей, участка цепи MACDBN из четырех ветвей, участка цепи MACEFDBN из шести ветвей. Обобщим получающуюся формулу:

Программа ПР - 5.2 последовательно вычисляет сопротивление Z1, Z2, Z3, ... и результат выводит на экран. Получающиеся значения стремятся к величине 138 Ом.

uses crt; { ПР - 5.2 }

const r1=80; r2=100;

var i: integer;

z: array [1..200] of real;

BEGIN

clrscr; i:=1; z[1]:=r1+r2;

Repeat

writeln(i,' ',z[i]); inc(i);

z[i]:=r1+r2*z[i-1]/(r2+z[i-1]);

until (i>20)or(KeyPressed);

readkey;

END.

Задача 5.3.

Напишите программу, решающую систему из N линейных алгебраических уравнений.

Рассмотрим алгоритм, позволяющий решать систему из n линейных алгебраических уравнений с n неизвестными, имеющую следующий вид:

От этой системы перейдем к матрице из элементов ai, j, где i=1, 2, ... , n и j=1, 2, ... , n+1.

Приведем данную матрицу к треугольному виду. Чтобы исключить деление на ноль сложим левые и правые части первого и второго, первого и третьего, второго и четвертого уравнений и т. д. Первый шаг состоит в следующем: разделим все элементы каждой строки матрицы (или каждого уравнения системы) на первый коэффициент ai1, где i=1, 2, ... , n. Тогда все элементы ai1 из первого столбца будут равны 1. Вычтем из второго, третьего и последующих уравнений первое. Матрица коэффициентов приобретет вид:

где a'i, j=ai, j/ai1- a1j/a11, где i=1, 2, ... , n и j=1, 2, ... , n+1. После этого сделаем второй шаг: разделим вторую, третью и последующие строки матрица на соответствующие коэффиценты $ai2, после чего вычтем из третьей, четвертой и последующих строк вторую строку. Получим:

где a''ij=a'ij/a'i1- a'1j/a'11, где i=1, 2, ... , n и j=1, 2, ... , n+1. После n-ого шага получим матрицу треугольного вида:

Искомые значения находятся по формулам:

Желательно, чтобы программа осуществляла проверку решения, подставляя найденные значения x1, x2, ... в исходную систему уравнений.

uses crt; const n=6; var i, ii, j,k : integer; { ПР - 5.3 }

aa, a: array[1..N, 1..N+1] of real; b, x: array[1..N] of real;

BEGIN

clrscr;

a[1,1]:=13; a[1,2]:=21; a[1,3]:=0; a[1,4]:=-8;

a[1,5]:=0; a[1,6]:=0; a[1,7]:=-24;

a[2,1]:=0; a[2,2]:=0; a[2,3]:=0; a[2,4]:=8;

a[2,5]:=-17;a[2,6]:=11; a[2,7]:=-14;

a[3,1]:=0; a[3,2]:=-21;a[3,3]:=15; a[3,4]:=0;

a[3,5]:=0; a[3,6]:=-11;a[3,7]:=30;

a[4,1]:=1; a[4,2]:=0; a[4,3]:=0; a[4,4]:=1;

a[4,5]:=1; a[4,6]:=0; a[4,7]:=0;

a[5,1]:=-1; a[5,2]:=1; a[5,3]:=1; a[5,4]:=0;

a[5,5]:=0; a[5,6]:=0; a[5,7]:=0;

a[6,1]:=0; a[6,2]:=0; a[6,3]:=-1; a[6,4]:=0;

a[6,5]:=-1; a[6,6]:=-1; a[6,7]:=0;

For i:=1 to N do For j:=1 to N+1 do aa[i, j]:=a[i, j];

For i:=1 to N do For j:=1 to N+1 do a[i, j]:=a[i, j]+a[1,j]+a[N, j];

For i:=2 to N do For j:=1 to N+1 do a[i, j]:=a[i, j]+a[2,j]+a[N-1,j];

For i:=3 to N do For j:=1 to N+1 do a[i, j]:=a[i, j]+a[3,j]+a[4,j];

For i:=1 to N do

begin

For j:=1 to N+1 do write(a[i, j]:2:3, ' ');

writeln;

end; writeln;

For k:=1 to N do

begin

For i:=k to N do

For j:=1 to N+1 do a[i, N+2-j]:=a[i, N+2-j]/a[i, k];

For i:=k+1 to N do

For j:=1 to N+1 do a[i, j]:=a[i, j]-a[k, j];

end;

For i:=1 to N do

begin

For j:=1 to N+1 do write(a[i, j]:2:3, ' ');

writeln;

end; writeln; delay(13000);

For ii:=1 to N do

begin

i:=N-ii+1; x[i]:=-a[i, N+1];

For j:=i+1 to N do x[i]:=x[i]-a[i, j]*x[j];

end;

writeln(' ОТВЕТ '); For i:=1 to N do writeln('x[',i,']= ',x[i]);

writeln(' ПРОВЕРКА ');

For i:=1 to N do

begin

For j:=1 to N do b[i]:=b[i]+aa[i, j]*x[j];

writeln(b[i]+aa[i, N+1]:2:7);

end; ReadKey;

END.

Задача 5.4.

Рассчитате цепь постоянного тока, состоящую из нескольких контуров (рис. 5.4). Сопротивления резисторов R1=13 Ом, R2=21 Ом, R3=15 Ом, R4=8 Ом, R5=17 Ом, R6=11 Ом. ЭДС источников E1=5 В, E2=13 В, E3=9 В, E4=-6 В, E5=12 В, E6=-8 В.

Рис.

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