МК У5_2_1 Pост человека о возрастаВЕКТОРНО-ГРАФИЧЕСКИЙ АНАЛИЗ В СИСТЕМЕ "ВЕКТОР" ПОД WINDOWS /9 практических занятий в примерах / Введение
1. Введение в систему "Вектор" под Windows
1.0.1.Полученный сценарий при задания отрезка и окружности в диалогеotrezok.beg(0) = 101
otrezok.beg(1) = 236
otrezok.end(0) = 414
otrezok.end(1) = 155
otrezok.Draw()ellips.centr(0) = 220
ellips.centr(1) = 48
ellips.gAx = 20
ellips.vAx = 20
ellips.Draw()
Преобразование сценария в базовые подпрограммы (подстегиваются в конец МК) построения окружности и отрезка
' базовая программа построения окружности)
' входные параметры:
' x100, y100 - положение центра
' r100 - радиусSub okr (x100, y100, r100)
ellips.centr(0) = x100
ellips.centr(1) = y100
ellips.gAx = r100
ellips.vAx = r100
ellips.Draw()
End Sub
' базовая программа (собрутина) построения отрезка)
' входные параметры:
' x101, y101 - координаты начала отрезка
' x102, y102 - координаты концаSub lin (x101, y101, x102, y102)
otrezok.beg(0) = x101
otrezok.beg(1) = y101
otrezok.end(0) = x102
otrezok.end(1) = y102
otrezok.Draw()
End Sub
' построение отрезка через обращение к базовой программе
lin 100, 240, 500, 155
' построение отрезка через обращение к базовой программе
okr 220, 50, 20
' окружности в начале и конце отрезка
okr 100,240,15
okr 500,155,15
' базовая программа (собрутина) построения окружности)
' входные параметры:
' x100, y100 - положение центра
' r100 - радиусSub okr (x100, y100, r100)
ellips.centr(0) = x100
ellips.centr(1) = y100
ellips.gAx = r100
ellips.vAx = r100
ellips.Draw()
End Sub
' базовая программа (собрутина) построения отрезка)
' входные параметры:
' x101, y101 - координаты начала отрезка
' x102, y102 - координаты концаSub lin (x101, y101, x102, y102)
otrezok.beg(0) = x101
otrezok.beg(1) = y101
otrezok.end(0) = x102
otrezok.end(1) = y102
otrezok.Draw()
End Sub
МК У1_1_3. Перебор точек на прямой и соединение их с третьей
' занесем координаты начала и конца отрезка в компаненты точек р1,р2x1 = 100
y1 = 240
x2 = 500
y2 = 155
lin x1,y1,x2,y2 ' сразу же строим отрезок p1-p2' занесем координаты центра точки и ее радиус в р3 и r3
x3= 220
y3= 50
r3= 20
okr x3,y3,r3 ' окружность в точке р3' строим серию точек на прямой р1-р2, cоединяя их с р3
For s = 0. To 1.01 Step 0.05
x =(1.-s)*x1+s*x2
y =(1.-s)*y1+s*y2
lin x, y, x3,y3
okr x, y, 10
Next
* Базовые МК упущены окружности и отрезка опущены
' Алгоритмизация.
' Найти геометрическое место точек p равноудаенных от заданной pc
' на расстояние d = 100
' Дано:xc = 200
yc = 200
d=100okr xc,yc,10 'окружность в точке рc
' известно что это - окружность
x103=xc+d
y103=yc
For s = 0. To 6.32 Step 0.1
x = xc + d*cos(s)
y = yc + d*sin(s)
lin x, y, xc,yc
' okr x, y, 10
lin x103, y103, x,y
x103=x
y103=y
Next
МК У2_2_1
' Алгоритмизация.
' Найти геометрическое место линий между двумя заданными p11-p12, p13-p14x11 = 40
y11 = 60
x12 = 300
y12 = 50
x13 = 50
y13 = 150
x14 = 290
y14 = 200For s = 0. To 1.01 Step 0.1
x1= (1.-s)*x11+ s*x13
y1= (1.-s)*y11+ s*y13
x2= (1.-s)*x12+ s*x14
y2= (1.-s)*y12+ s*y14
lin x1, y1, x2,y2
Next
МК У2_3_1
' Алгоритмизация.
' Найти ортогональную сетку линий между точками p11-p12, p13-p14x11 = 40
y11 = 60
x12 = 300
y12 = 50
x13 = 50
y13 = 150
x14 = 290
y14 = 200' Задача решена с помощью вложенного цикла
For u = 0. To 1.01 Step 0.1
x1= (1.-u)*x11+ u*x13
y1= (1.-u)*y11+ u*y13
x2= (1.-u)*x12+ u*x14
y2= (1.-u)*y12+ u*y14
lin x1, y1, x2,y2NextFor v = 0. To 1.01 Step 0.1x1= (1.-v)*x11+ v*x12Next
y1= (1.-v)*y11+ v*y12
x2= (1.-v)*x13+ v*x14
y2= (1.-v)*y13+ v*y14
lin x1, y1, x2,y2
МК У2_4_1
' Работа со случайными числами. Построение окружностей радиуса 20 в прямоугольнике 580х290
For u = 0. To 1.01 Step 0.01
randomizeNext
x=int(rnd(1)*600+20)
y=int(rnd(1)*300+10)
okr x, y, 20
МК У3_1_1 - 1-й этап расчет без графика ЦФ
' Оптимизация.Найти наикратчайшее расстояние от точки р3 до прямой р1-р2
' Дано:x1 = 100
y1 = 240
x2 = 500
y2 = 155lin x1,y1,x2,y2 ' сразу же строим отрезок p1-p2
x3= 220
y3= 50
r3= 20okr x3,y3,r3 ' окружность в точке р3
' строим серию точек на прямой р1-р2, cоединяя их с р3 тут же
' вычисляем длины отрезков и сравнивая с эталаном выбираем меньшее' эталон положив в него число заведомо большее
smin=10000For s = 0. To 1.01 Step 0.05
x =(1.-s)*x1+s*x2Next
y =(1.-s)*y1+s*y2
lin x, y, x3,y3
okr x, y, 10dlina=sqr((x3-x)*(x3-x)+(y3-y)*(y3-y))
if dlina < smin Then smin=dlina' MsgBox ("МИНДЛИНА" & smin) - почему-то не работает ?!!!
МК У3_1_2. Второй шаг: повторяем тот же цикл, но при достижении минимума из
' цикла выйти и в текущей точке построить окужностьssmin=smin
For s = 0. To 1.01 Step 0.05
x =(1.-s)*x1+s*x2Next
y =(1.-s)*y1+s*y2
lin x, y, x3,y3
okr x, y, 10dlina=sqr((x3-x)*(x3-x)+(y3-y)*(y3-y))
if dlina < smin Then smin=dlina
if dlina = ssmin Then Exit For
МК У3_1_3 Третий шаг: повторяем первый цикл с построением ЦФ
x103=x1
y103=sqr((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1))
For s = 0. To 1.01 Step 0.05
x =(1.-s)*x1+s*x2Next
y =(1.-s)*y1+s*y2
lin x, y, x3,y3dlina=sqr((x3-x)*(x3-x)+(y3-y)*(y3-y))
if dlina < smin Then smin=dlina
lin x103, y103, x, dlina
x103=x
y103=dlina
МК У3_1_4 Четверый шаг: повторяем второй цикл с построением тут же ЦФ
' график должен оборваться (третий шаг удалили)ssmin=smin
x103=x1
y103=sqr((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1))
For s = 0. To 1.01 Step 0.05
x =(1.-s)*x1+s*x2
y =(1.-s)*y1+s*y2
lin x, y, x3,y3dlina=sqr((x3-x)*(x3-x)+(y3-y)*(y3-y))
if dlina < smin Then smin=dlina
lin x103, y103, x, dlina
x103=x
y103=dlina
if dlina = ssmin Then Exit For
Next
МК У3_2_1
' Из набора 3-х чисел s1, s2, s3 найти минимальное
s1 = 80
s2 = 40
s3 = 60' Эталон
s99 = 200if s1 < s99 Then s99=s1
if s1 < s99 Then s99=s1
if s1 < s99 Then s99=s1' в s99 - будет лежать минимум
' строим график зависимости значения числа от его номера
lin 1*100, s1, 2*100, s2
lin 2*100, s2, 3*100, s3
МК У3_3_1 Из набора чисел s1, s2, s3...sn найти минимальное
Dim s
s = Array(70, 50,80,60,10,20,5,70,90,35,15,76,54,77,125,165,66,105,39,84)' Эталон
s99 = 200
x103=0
y103=s(0)For n = 0 To 19 Step 1
if s(n) < s99 Then s99=s(n)Next
lin x103, y103, n*10, s(n)
x103=n*10
y103=s(n)
МК У3_3_2
' Из набора чисел s1, s2, s3...sn найти минимальноеDim s
s = Array(70, 50,80,60,10,20,5,70,90,35,15,76,54,77,125,165,66,105,39,84)
' Эталон
s99 = 200For n = 0 To 19 Step 1
if s(n) < s99 Then s99=s(n)Next
' lin x103, y103, n*10, s(n)
x103=n*10
y103=s(n)ss99=s99
s99=200
x103=0
y103=s(0)' При достижении минимума выйти
For n = 0 To 19 Step 1if s(n) < s99 Then s99=s(n)if s(n) = ss99 Then exit For
lin x103, y103, n*10, s(n)
x103=n*10
y103=s(n)Next
МК У4_1_1 Задача движение по скошенноу и не скошенному лугам
' Дано:
' p1 - начало движения
' p2 - конец движения
' Известно и скорость движеня по скошенному и нескошенному лугамx1=10
y1=10
x2=300
y2=300
v1 = 8
v2 = 4' Решение
tmin=1000
'Найти минимум времени на преодолении данного пути
' Минимизируем время
' t1 = s1/v1
' t2 = s2/v2
' Стоп это как бы теория
' Начинаем использовать метод "Золушки" перебрать, сравнить и выбрать
' Во-первых определяем диапозон (облость ограничений) в котором возможно
' движения пешехода на границе лугов - это p11-p12
' Задаем эти точкиx11=50
y11=100
x12=400
y12=100
lin x11, y11, x12, y12x103=x11
y103=10' Определяем
For u = 0. To 1.01 Step 0.1
x = (1.-u)*x11+ u*x12Next
y = (1.-u)*y11+ u*y12
lin x1, y1, x, y
lin x2, y2, x, ys1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2=sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
t1=s1/v1
t2=s2/v2
t=t1+t2
if t < tmin Then tmin=t
lin x103,y103,x,t
x103=x
y103=tt99=tmin
tmin=1000
For u = 0. To 1.01 Step 0.1
x = (1.-u)*x11+ u*x12Next
y = (1.-u)*y11+ u*y12
lin x1, y1, x, y
lin x2, y2, x, ys1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2=sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
t1=s1/v1
t2=s2/v2
t=t1+t2
if t < tmin Then tmin=t
lin x103,y103,x,t
x103=x
y103=t
okr x,y,10 ' окружность в точке р3
' if tmin = t99 Then Exit For
МК У4_1_2 Задача движение по скошенноу и не скошенному лугам - 2 этап
' Дано:
' p1 - начало движения
' p2 - конец движения
' Известно и скорость движеня по скошенному и нескошенному лугамx1=10
y1=10
x2=300
y2=300
v1 = 8
v2 = 4' Решение
tmin=1000x11=50
y11=100
x12=400
y12=100
lin x11, y11, x12, y12x103=x11
y103=10' Определяем
For u = 0. To 1.01 Step 0.1Next
x = (1.-u)*x11+ u*x12
y = (1.-u)*y11+ u*y12
lin x1, y1, x, y
lin x2, y2, x, ys1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2=sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
t1=s1/v1
t2=s2/v2
t=t1+t2
if t < tmin Then tmin=t
' lin x103,y103,x,t
x103=x
y103=tt99=tmin
tmin=1000For u = 0. To 1.01 Step 0.1
x = (1.-u)*x11+ u*x12Next
y = (1.-u)*y11+ u*y12
lin x1, y1, x, y
lin x2, y2, x, ys1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2=sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
t1=s1/v1
t2=s2/v2
t=t1+t2
if t < tmin Then tmin=t
lin x103,y103,x,t
x103=x
y103=t
okr x,y,10 ' окружность в точке р3
if tmin = t99 Then Exit For
МК У4_2_1 Оптимизация движения по течению и без течения
v1=8 ' скорость судна
v2=6 ' скорость воды
' р1-р2 - вектор движение судна
' р1-р3 - вектор движение воды
x1 = 60
y1 = 45
x3 = 470
y3 = 75x2 = 310
y2 = 245okr x1,y1,10
okr x2,y2,10
okr x3,y3,20
lin x1,y1,x2,y2
lin x1,y1,x3,y3
s11 = sqr((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
t11=s11/v1
x99=x1
y99=t11
tmin=1000For u = 0. To 1.01 Step 0.05
x = (1.-u)*x1+ u*x3
y = (1.-u)*y1+ u*y3
lin x2, y2, x, y
s1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2=sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
v3=v1+v2
t1=s1/v3
t2=s2/v1
t=t1+t2
if t < tmin Then tmin=t
lin x99,y99,x,t
x99=x
y99=t
Nextx99=x1
y99=t11
ttmin=tmin
tmin=1000For u = 0. To 1.01 Step 0.05
x = (1.-u)*x1+ u*x3
y = (1.-u)*y1+ u*y3
lin x2, y2, x, y
s1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2=sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
v3=v1+v2
t1=s1/v3
t2=s2/v1
t=t1+t2
if t < tmin Then tmin=t
lin x99,y99,x,t
okr x,y,12
if tmin = ttmin Then Exit For
x99=x
y99=t
Next
МК У4_3_1' Bernulli
x11 = 0
y11 = 150
x12 = 400
y12 = 150x1=0
y1=0
okr x1, y1, 20
x2=400
y2=300okr x2, y2, 20
x=200
y=150
' okr x, y, 10lin x11, y11, x12, y12
' lin x1, y1, x, y
' lin x2, y2, x, y
' okr x, y, 20v1=sqr(2.*9.8*y11)
v2=sqr(2.*9.8*y2)
t1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))/v1
t2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))/v2
t=t1+t2
x3=0
y3=t*30-100
etmin=10000.
For s = 0 To 1.001 Step 0.1x=(1-s)*x11+s*x12Next
y=(1-s)*y11+s*y12
' okr x, y, 10
v1=sqr(2.*9.8*y11)
v2=sqr(2.*9.8*y2)
t1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))/v1
t2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))/v2
t=t1+t2
lin x3, y3, x, t*30-100
x3=x
y3=t*30-100
if t < etmin Then etmin = t
' lin x1, y1, x, y
' lin x, y, x2, y2v1=sqr(2.*9.8*y11)
v2=sqr(2.*9.8*y2)
t1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))/v1
t2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))/v2
t=t1+t2
x3=0
y3=t*30-100ttmin=etmin
etmin=10000.For s = 0 To 1.001 Step 0.1
x=(1-s)*x11+s*x12Next
y=(1-s)*y11+s*y12
okr x, y, 10
v1=sqr(2.*9.8*y11)
v2=sqr(2.*9.8*y2)
t1=sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))/v1
t2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))/v2
t=t1+t2
lin x3, y3, x, t*30-100
x3=x
y3=t*30-100
if t < etmin Then etmin = t
lin x1, y1, x, y
lin x, y, x2, y2
if etmin = ttmin Then okr x, y, 20
' if etmin = ttmin Then Exit For
МК У5_1_1 Метод наименьших квадратов. Найти уравнение в виде прямой, описывающее наилучшим образом данный эксперимент
' 1 - этап - дано
x1 = 15
y1 = 25
okr x1, y1, 10
x2 = 60
y2 = 40
okr x2, y2, 10
x3 = 70
y3 = 80
okr x3, y3, 10
x4 = 105
y4 = 120
okr x4, y4, 10
x5 = 145
y5 = 120
okr x5, y5, 10
МК У5_1_2 Метод наименьших квадратов. Найти уравнение в виде прямой, описывающее наилучшим образом данный эксперимент
' 1 - этап - дано + 2 - этап - построения ЦФ зависимости коэффициента прямой от угла
' STATIC
x1 = 15
y1 = 25
okr x1, y1, 10
x2 = 60
y2 = 40
okr x2, y2, 10
x3 = 70
y3 = 80
okr x3, y3, 10
x4 = 105
y4 = 120
okr x4, y4, 10
x5 = 145
y5 = 120
okr x5, y5, 10' y = ax - апроксимуруемая линия (прямая)
' сумма отклонений (в квадрате) стремиться к минимуму
' требуется найти а в уравнении y=axemin=10000
x103=0
y103=10For a = 0. To 1.25 Step 0.1
e1=(a*x1-y1)*(a*x1-y1)
e2=(a*x2-y2)*(a*x2-y2)
e3=(a*x3-y3)*(a*x3-y3)
e4=(a*x4-y4)*(a*x4-y4)
e5=(a*x5-y5)*(a*x1-y1)
e = e1 + e2 + e3 + e4 + e5
if e < emin Then emin=e
lin x103, y103, a*100, e/100
x103=a*100
y103=e/100
Next
МК У5_1_3 Метод наименьших квадратов. Найти уравнение в виде прямой, описывающее наилучшим образом данный эксперимент' 1 - этап - дано + 2 - этап - построения ЦФ зависимости коэффициента прямой от угла
' + 3 этап - фиксация коэффициента прямойx1 = 15
y1 = 25
okr x1, y1, 10
x2 = 60
y2 = 40
okr x2, y2, 10
x3 = 70
y3 = 80
okr x3, y3, 10
x4 = 105
y4 = 120
okr x4, y4, 10
x5 = 145
y5 = 120
okr x5, y5, 10' y = ax - апроксимуруемая линия (прямая)
' сумма отклонений (в квадрате) стремиться к минимуму
' требуется найти а в уравнении y=axemin=10000
x103=0
y103=10For a = 0. To 1.25 Step 0.1
e1=(a*x1-y1)*(a*x1-y1)
e2=(a*x2-y2)*(a*x2-y2)
e3=(a*x3-y3)*(a*x3-y3)
e4=(a*x4-y4)*(a*x4-y4)
e5=(a*x5-y5)*(a*x1-y1)
e = e1 + e2 + e3 + e4 + e5
if e < emin Then emin=e
lin x103, y103, a*100, e/100
x103=a*100
y103=e/100
Next
eemin=emin
emin=10000
x103=0
y103=10' требутся определить при каком а достигается emin
For a = 0. To 1.45 Step 0.1
e1=(a*x1-y1)*(a*x1-y1)
e2=(a*x2-y2)*(a*x2-y2)
e3=(a*x3-y3)*(a*x3-y3)
e4=(a*x4-y4)*(a*x4-y4)
e5=(a*x5-y5)*(a*x1-y1)
e = e1 + e2 + e3 + e4 + e5
if e < emin Then emin=e
lin x103, y103, a*100, e/100
x103=a*100
y103=e/100
if emin = eemin Then okr a*100, e/100, 5
if emin = eemin Then aa=a
' if emin = eemin Then Exit For
Next
МК У5_1_4 Метод наименьших квадратов. Найти уравнение в виде прямой, описывающее наилучшим образом данный эксперимент' 1 - этап - дано + 2 - этап - построения ЦФ зависимости коэффициента прямой от угла
' + 3 этап - фиксация коэффициента прямой + 4 этап построение самой аппроксимирующей прямойx1 = 15
y1 = 25
okr x1, y1, 10
x2 = 60
y2 = 40
okr x2, y2, 10
x3 = 70
y3 = 80
okr x3, y3, 10
x4 = 105
y4 = 120
okr x4, y4, 10
x5 = 145
y5 = 120
okr x5, y5, 10' y = ax - апроксимуруемая линия (прямая)
' сумма отклонений (в квадрате) стремиться к минимуму
' требуется найти а в уравнении y=axemin=10000
x103=0
y103=10For a = 0. To 1.25 Step 0.1
e1=(a*x1-y1)*(a*x1-y1)
e2=(a*x2-y2)*(a*x2-y2)
e3=(a*x3-y3)*(a*x3-y3)
e4=(a*x4-y4)*(a*x4-y4)
e5=(a*x5-y5)*(a*x1-y1)
e = e1 + e2 + e3 + e4 + e5
if e < emin Then emin=e
lin x103, y103, a*100, e/100
x103=a*100
y103=e/100
Next
eemin=emin
emin=10000
x103=0
y103=10' требутся определить при каком а достигается emin
For a = 0. To 1.45 Step 0.1
e1=(a*x1-y1)*(a*x1-y1)
e2=(a*x2-y2)*(a*x2-y2)
e3=(a*x3-y3)*(a*x3-y3)
e4=(a*x4-y4)*(a*x4-y4)
e5=(a*x5-y5)*(a*x1-y1)
e = e1 + e2 + e3 + e4 + e5
if e < emin Then emin=e
lin x103, y103, a*100, e/100
x103=a*100
y103=e/100
if emin = eemin Then okr a*100, e/100, 5
if emin = eemin Then Exit For
Nexta=eemin
' строим аппроксимируемый отрезок y=ax
x103=0
y103=0For x = 0 To 180 Step 20
y=a*x
lin x103, y103, x, y
x103=x
y103=y
Next
a=244.6
b=0.710333
k=0.052333t=1
x103=0
y103=1tt=18
For t = 1 To 124 Step 1
y = a*(1-b*exp(-k*t))Next
lin x103, y103, t*5, y
x103=t*5
y103=y
if t = tt Then okr t*5, y, 7
МК У6_0_0 Линия - на которой д.б. построен завод и два города
otrezok.beg(0) = 89
otrezok.beg(1) = 135
otrezok.end(0) = 547
otrezok.end(1) = 45
otrezok.Draw()ellips.centr(0) = 172
ellips.centr(1) = 187
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()ellips.centr(0) = 507
ellips.centr(1) = 231
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()
У6_1_1 Задачи на компромисс и опредедение зоны Парето
' Два города р1 и р2 решили построить завод р. Рассмотрим 5 вариантов
' 1-город стремиться построить его ближе к себе
' 2-город стремиться также построить ближе к себе
' общее расстояние стиремится к минимуму
' второй город имеет приоритет 2.
' на одинаковом растоянииotrezok.beg(0) = 89
otrezok.beg(1) = 135
otrezok.end(0) = 547
otrezok.end(1) = 45
otrezok.Draw()x11=otrezok.beg(0)
y11=otrezok.beg(1)
x12=otrezok.end(0)
y12=otrezok.end(1)
ellips.centr(0) = 172
ellips.centr(1) = 187
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()x1=ellips.centr(0)
y1=ellips.centr(1)
ellips.centr(0) = 507
ellips.centr(1) = 231
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()x2=ellips.centr(0)
y2=ellips.centr(1)
s1min=10000
x103=x11
y103=sqr((x11-x1)*(x11-x1)+(y11-y1)*(y11-y1))For u = 0 To 1 Step 0.05
x=(1-u)*x11+u*x12
y=(1-u)*y11+u*y12
lin x1, y1, x, y
s1=sqr((x-x1)*(x-x1)+(y-y1)*(y-y1))
lin x103, y103, x, s1
x103=x
y103=s1
if s1 < s1min Then s1min=s1
Next
У6_1_2 Задачи на компромисс и опредедение зоны Парето
' 2-город стремиться также построить ближе к себеotrezok.beg(0) = 89
otrezok.beg(1) = 135
otrezok.end(0) = 547
otrezok.end(1) = 45
otrezok.Draw()x11=otrezok.beg(0)
y11=otrezok.beg(1)
x12=otrezok.end(0)
y12=otrezok.end(1)
ellips.centr(0) = 172
ellips.centr(1) = 187
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()x1=ellips.centr(0)
y1=ellips.centr(1)
ellips.centr(0) = 507
ellips.centr(1) = 231
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()x2=ellips.centr(0)
y2=ellips.centr(1)
s2min=10000
x103=x11
y103=sqr((x11-x2)*(x11-x2)+(y11-y2)*(y11-y2))For u = 0 To 1 Step 0.05
x=(1-u)*x11+u*x12
y=(1-u)*y11+u*y12
lin x2, y2, x, y
s2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))
lin x103, y103, x, s2
x103=x
y103=s2
if s2 < s2min Then s2min=s2
Next
У6_1_3 Задачи на компромисс и опредедение зоны Парето
' 3 - общее расстояние стремится к минимумуotrezok.beg(0) = 89
otrezok.beg(1) = 135
otrezok.end(0) = 547
otrezok.end(1) = 45
otrezok.Draw()x11=otrezok.beg(0)
y11=otrezok.beg(1)
x12=otrezok.end(0)
y12=otrezok.end(1)
ellips.centr(0) = 172
ellips.centr(1) = 187
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()x1=ellips.centr(0)
y1=ellips.centr(1)
ellips.centr(0) = 507
ellips.centr(1) = 231
ellips.gAx = 10
ellips.vAx = 10
ellips.Draw()x2=ellips.centr(0)
y2=ellips.centr(1)
s3min=10000
x103=x11
s1 = sqr((x11-x1)*(x11-x1)+(y11-y1)*(y11-y1))
s2 = sqr((x11-x2)*(x11-x2)+(y11-y2)*(y11-y2))
y103 = s1+s2-350For u = 0 To 1.001 Step 0.05
x=(1-u)*x11+u*x12Next
y=(1-u)*y11+u*y12
lin x1, y1, x, y
lin x2, y2, x, y
s1=sqr((x-x1)*(x-x1)+(y-y1)*(y-y1))
s2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))
s3=s1+s2
lin x103, y103, x, s3-350
x103=x
y103=s3-350
if s3 < s3min Then s3min=s3
У6_1_4 Задачи на компромисс и опредедение зоны Парето
' 4 - 2 город имеет приоритет 2s3min=10000
x103=x11
s1 = sqr((x11-x1)*(x11-x1)+(y11-y1)*(y11-y1))
s2 = sqr((x11-x2)*(x11-x2)+(y11-y2)*(y11-y2))
y103 = s1+2*s2-600For u = 0 To 1.001 Step 0.05
x=(1-u)*x11+u*x12Next
y=(1-u)*y11+u*y12
lin x1, y1, x, y
lin x2, y2, x, y
s1=sqr((x-x1)*(x-x1)+(y-y1)*(y-y1))
s2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))
s3=s1+2*s2
lin x103, y103, x, s3-600
x103=x
y103=s3-600
if s3 < s3min Then s3min=s3
У6_1_5 Задачи на компромисс и опредедение зоны Парето
' 6 - на одинаковом растоянии
s3min=10000
x103=x11
s1 = sqr((x11-x1)*(x11-x1)+(y11-y1)*(y11-y1))
s2 = sqr((x11-x2)*(x11-x2)+(y11-y2)*(y11-y2))
y103 = sqr((s1-s2)*(s1-s2))For u = 0 To 1.001 Step 0.01
x=(1-u)*x11+u*x12Next
y=(1-u)*y11+u*y12
lin x1, y1, x, y
lin x2, y2, x, y
s1=sqr((x-x1)*(x-x1)+(y-y1)*(y-y1))
s2=sqr((x-x2)*(x-x2)+(y-y2)*(y-y2))
s3=sqr((s1-s2)*(s1-s2))
lin x103, y103, x, s3
x103=x
y103=s3
if s3 < s3min Then s3min=s3
УУ7_1_1. Графы Найти оптимальный путь судна из трех возможных маршрутовDim p1, p11, p21, p2, p12, p22, p3, p13, p23
' Разобьем точки в соответствии 0, 1, 3-го маршрутов
p1 = Array ( 0, 0,0)
p11 = Array (45, 120,0)
p21 = Array (15, 70,0)
p2 = Array (0, 0, 1)
p12 = Array (35, 170, 1)
p22 = Array (10, 120, 1)p3 = Array (0, 0, 2)
p13 = Array (55, 60, 2)
p23 = Array (35, 160, 2)
' Сначала считаем расход топлива по маршрутам
v99 = 10000
v0=p1(0)+p11(0)+ p21(0) ' 0 + 45 + 15 = 60
v1=p2(0)+p12(0)+ p22(0) ' 0 + 35 + 10 = 45
v2=p3(0)+p13(0)+ p23(0) ' 0 + 55 + 35 = 80if v0 < v99 Then v99=v0
if v1 < v99 Then v99=v1
if v2 < v99 Then v99=v2lin 1*50, v0, 2*50, v1
lin 2*50, v1, 3*50, v2
' считаем пибыль по маршрутам
tmax = 0
t0=p1(1)+p11(1)+ p21(1) ' 0 + 120 + 70 = 190
t1=p2(1)+p12(1)+ p22(1) ' 0 + 170 + 120 = 290
t2=p3(1)+p13(1)+ p23(1) ' 0 + 60 + 160 = 220if t0 < tmax Then t99=v0
if t1 < tmax Then t99=v1
if t2 < tmax Then t99=v2lin 1*50, t0, 2*50, t1
lin 2*50, t1, 3*50, t2
MKУ7_2_1. Найти путь объекта при минимуме расхода топлива
Dim x(1), y(1), z(1)
Dim p0, p1, p2, p3, p4, p5
Dim p10, p11, p12, p13, p14, p15
Dim p20, p21, p22, p23, p24, p25
Dim p30, p31, p32, p33, p34, p35
Dim p40, p41, p42, p43, p44, p45
Dim p50, p51, p52, p53, p54, p55p0 = Array(0,0,0)
p1 = Array(2,0,0)
p2 = Array(6,0,0)
p3 = Array(6,0,0)
p4 = Array(1,0,0)
p5 = Array(5,0,0)
p10 = Array(0,9,0)
p11 = Array(2,3,1)
p12 = Array(7,9,8)
p13 = Array(3,5,4)
p14 = Array(14,3,2)
p15 = Array(1,4,3)
p20 = Array(0,8,0)
p21 = Array(6,4,5)
p22 = Array(1,6,12)
p23 = Array(10,2,11)
p24 = Array(12,2,13)
p25 = Array(8,5,6)p30 = Array(0,2,0)
p31 = Array(10,3,2)
p32 = Array(7,2,3)
p33 = Array(6,9,8)
p34 = Array(1,10,9)
p35 = Array(9,7,10)
p40 = Array(0,4,0)
p41 = Array(6,9,8)
p42 = Array(4,3,5)
p43 = Array(4,7,5)
p44 = Array(1,7,5)
p45 = Array(7,8,6)
p50 = Array(0,3,0)
p51 = Array(4,7,5)
p52 = Array(3,1,2)
p53 = Array(6,2,7)
p54 = Array(2,4,3)
p55 = Array(3,5,12)
x71=50
y71=15
x72=450
y72=15
x73=50
y73=280
x74=450
y74=280
' plosk x71, y71, x72, y72, x73, y73, x74, y74
x103=x71
y103=y71For p = 0 To 150 Step 1
For m = 0 To 11 Step 1if s1 > 1.-0.001 Then n2=0
if s2 > 1.-0.001 Then n3=0x81 = (1.-s2)*x71+ s2*x73
y81 = (1.-s2)*y71+ s2*y73x82 = (1.-s2)*x72+ s2*x74
y82 = (1.-s2)*y72+ s2*y74x80 = (1.-s1)*x81 + s1*x82
y80 = (1.-s1)*y81 + s1*y82
okr x80,y80,5
lin x103, y103, x80, y80
x103=x80
y103=y80randomize
n=int(rnd(1)*4+1)if n = 1 Then s1 = s1+0.2
if n = 2 Then s2 = s2+0.2
if n = 3 Then s1 = s1+0.2
if n = 3 Then s2 = s2+0.2if s1 > 1.-0.001 Then s1 = 1.0
if s2 > 1.-0.001 Then s2 = 1.0
Next
s1=0
s2=0
x103=x71
y103=y71Next
МК У8_1_1 Задачи 8.1 Линейное программирование
' Задана ЦФ: x + y -> max
' При ограничениях:
' x/100+y/170 > 1 (1) (p1-p2)
' x/140+y/120 > 1 (2) (p3-p4
' x > 1 (3)
' y > 1 (4)' Уравнения можно интепретировать отрезками
p1_x=100
p1_y=0
p2_x=0
p2_y=170
lin p1_x, p1_y, p2_x, p2_yp3_x=140
p3_y=0
p4_x=0
p4_y=120
lin p3_x, p3_y, p4_x, p4_y
' Целевую функцию выберем произвольно x+y=200 или x/200+y/200=1
p5_x=200
p5_y=0
p6_x=0
p6_y=200
lin p5_x, p5_y, p6_x, p6_y
МК У8_1_2 ' Задачи 8.1 Линейное программирование
' 2-й этап - перебираем точки на области ограничений, вы' Задана ЦФ: x + y -> max
' При ограничениях:
' x/100+y/170 > 1 (1) (p1-p2)
' x/140+y/120 > 1 (2) (p3-p4
' x > 1 (3)
' y > 1 (4)' Уравнения можно интепретировать отрезками
p1_x=100
p1_y=0
p2_x=0 ' p82
p2_y=170
lin p1_x, p1_y, p2_x, p2_yp3_x=140 ' p81
p3_y=0
p4_x=0
p4_y=120
lin p3_x, p3_y, p4_x, p4_y
' Целевую функцию выберем произвольно x+y=200 или x/200+y/200=1
p5_x=200
p5_y=0
p6_x=0
p6_y=200
lin p5_x, p5_y, p6_x, p6_y
' 2-й этап - перебираем точки на области ограничений, вычисляя ЦФ
For y=0 To 120 Step 5
x90=(1-(y/170))*100Next
x91=(1-(y/120))*140
For x=0 To 100 Step 5
if x > x90 then Exit For
okr x100, y, 5
Next
lin x190, y, x191, y
МК У8_1_3 Задачи 8.1 Линейное программирование
' Задана ЦФ: x + y -> max
' При ограничениях:
' x/100+y/170 > 1 (1) (p1-p2)
' x/140+y/120 > 1 (2) (p3-p4
' x > 1 (3)
' y > 1 (4)' Уравнения можно интепретировать отрезками
p1_x=100
p1_y=0
p2_x=0 ' p82
p2_y=170
lin p1_x, p1_y, p2_x, p2_yp3_x=140 ' p81
p3_y=0
p4_x=0
p4_y=120
lin p3_x, p3_y, p4_x, p4_y
' Целевую функцию выберем произвольно x+y=200 или x/200+y/200=1
p5_x=200
p5_y=0
p6_x=0
p6_y=200
lin p5_x, p5_y, p6_x, p6_y
' 3-й этап cfmin=0
For y=0 To 120 Step 10
x90=(1-(y/170))*100
x91=(1-(y/120))*140
if x90 < x91 Then x=x90
if x91 < x90 Then x=x91
okr x, y, 7
if cf > cfmax Then cfmax = cf
Next
MK У8_1_4‘ Задача расходе топлива и прибыли.
‘ Пусть расход топлива, прибыль и номер маршрута судна
‘ заданы как составляющие векторов:
' расход определяется координатой х,
' прибыль определяется координатой y,
' номер маршрута - координатой z:
' p1= 0.,0., 0. p2=0., 0., 1. p3= 0.,0., 2.
' p11=90.,300., 0. p12=70.,400., 1. p13=40.,200., 2.
' p21=30.,200., 0. p22=20.,300., 1. p23=70.,450., 2.Dim p1 (0, 0, 0 )
Dim p2 (0, 0, 1 )
Dim p3 (0, 0, 2 )
Dim p11 (90, 300, 0 )
Dim p1 (10, 10, 10 )
Dim p2 (400, 0, 20 )
Dim p3 (10, 200, 30 )
Dim p11 (500, 250, 40 )lin p1(0), p1(1) p2(0), p2(1)
lin p3(0), p3(1) p4(0), p4(1)okr p1(0), p1(1), p1(2)
okr p2(0), p2(1), p2(2)
okr p3(0), p3(1), p3(2)
okr p4(0), p4(1), p4(2)
MK У8_2_1
' Посылка
x1=290
y1=0
z1=0
x2=0
y2=270
z2=0
x3=0
y3=0
z3=280
lin x2, y2, x1, y1vmax=0
For s = 0. To 1.01 Step 0.1
x91=(1-s)*x1+s*x3Next
y91=(1-s)*y1+s*y3
z91=(1-s)*z1+s*z3
x92=(1-s)*x2+s*x3
y92=(1-s)*y2+s*y3
z92=(1-s)*z2+s*z3
lin x91, y91, x92, y92
point x91,y91,x92,y92
Sub point (x91, y91, x92, y92)
For u = 0. To 1.01 Step 0.1End Subx=(1-u)*x91+u*x92
y=(1-u)*y91+u*y92
z=(1-u)*z91+u*z92
okr x, y, 10
v=x+y+z
lin x3, y3, x, v/10
x3=x
y3=v/10
if v > vmax Then vmax = v
Next
9.1.1. Заданы числа 2 4 6 1 9 3. Требуеся выбрать число 6
' По методу случайных чисел
For n = 1 To 100 Step 1
randomize
x=int(rnd(1)*10+1)
okr 20*x, 20*x, 10
if x = 6 Then
okr 20*x, 20*x, 40
end if
if x = 6 Then Exit For
Next
9.1.2. Заданы числа 2 4 6 1 9 3. Требуеся выбрать число 6
' По методу перебора
For n = 1 To 10 Step 1
okr 10*n, 10*n, 10
if n = 6 Then
okr 10*n, 10*n, 30
end if
if n = 6 Then Exit For
Next
' ЛоШу - поиск чисел по методу случайных чисел
n5=15/3 ' среднее число определяется из логических и алгебраических соображений
For k = 0 To 290 Step 1
randomizeEnd if
n=int(rnd(1)*10+1)
n1=n
n=int(rnd(1)*10+1)
n4=n
n9=15-n1-n5
n7=15-n1-n4
n3=15-n7-n5
n2=15-n1-n3
n6=15-n4-n5
n8=15-n2-n5okr n1*20, n4*20, 10
if n2>0 Or n3>0 Or n6>0 Or n7>0 Or n8>0 Or n9>0 Then
m1=n1+n2+n3
m2=n4+n5+n6
m3=n7+n8+n9
m4=n1+n4+n7
m5=n2+n5+n8
m6=n3+n6+n9m7=n1+n5+n9
m8=n3+n5+n7if m1=15 & m2=15 & m3=15 & m4=15 & m5=15 & m6=15 _
& m7=15 & m8=15 & m9=15 Then
okr 100, 100, 25
end ifif m1=15 & m2=15 & m3=15 & m4=15 & m5=15 & m6=15 _
& m7=15 & m8=15 & m9=15 Then Exit ForNext
' Ло Шу поиск 2-х неизвестных через два цикла
n5=15/3
n5=15/3 ' среднее число определяется из логических и алгебраических соображений
For n1 = 1 To 9 Step 1
For n4 = 1 To 9 Step 1n9=15-n1-n5Next
n7=15-n1-n4
n3=15-n7-n5
n2=15-n1-n3
n6=15-n4-n5
n8=15-n2-n5
okr n1*20, n4*20, 10if n9>0 Or n7>0 Or n3>0 Or n2>0 Or n6>0 Or n8>0 Then
m1=n1+n2+n3
m2=n4+n5+n6
m3=n7+n8+n9
m4=n1+n4+n7
m5=n2+n5+n8
m6=n3+n6+n9m7=n1+n5+n9
m8=n3+n5+n7
End ifif m1=15 & m2=15 & m3=15 & m4=15 & m5=15 & m6=15 & m7=15 & m8=15 Then
okr 100, 100, 25
end ifif m1=15 & m2=15 & m3=15 & m4=15 & m5=15 & m6=15 & m7=15 & m8=15 Then Exit For
if m1=15 & m2=15 & m3=15 & m4=15 & m5=15 & m6=15 & m7=15 & m8=15 Then Exit For
Next
Введение в векторно-графический анализ
Приведенные упражнения решены пратически за один день - на оформление этой странички времени больше ушло. В новой версии "Вектор" значительно все проще, но есть пока и минусы:
- нет возможностей работы с векторами - вместо них испрользуются массивы, которые нельзя скадывать и прочее;
- нет протокола сценария-расчета, в котором можно было бы по цифрам проследить ход решения задачи;
- не разобрался, есть или нет в VBS оператор goto, без которого не смог решить задачу Ло-Шу;
- не удалось решить и задачу Богданов-Вентцель (в версии под DOS задача просто решается потому что вектора и их состовляющие имеют один индификатор).Если посмотреть на макрокоманды (МК), то в начале страх берет. Но на самом деле все проще: многое в МК копируется из предыдущих МК, много стандартного. Редактировать МК можно в любом редакторе: Блокнот, WordPad, Microsoft Word. Используется и минимум языка VBS. По темам приведены самые простые задачи, которые могут быть усложнены до трехмерных и более размерности (такие воможности в "Вектор" будут).
При инсталляции системы "Вектор" копируются и МК, которые можно использовать на первых занятиях.
На вопрос - а надо ли все это? Можно ответить.- каждая рассматриваемая тема - это высшая математика, на изучение которой требуется не один месяц. Однако, благодаря простому графочисленному подходу - перебрать, сравнить и выбрать и целевой функции (ЦФ) - отображающий и контролирующий этот процесс, решать такие задачи можно новичку или тому, кто подзабыл, что изучал когда-то. Далее система "Вектор" будет развиваться (адаптироваться из DOS в Windows). Многие возможности будут реализованы в автоматическом режиме, и потому не исключено, что кто-то воспользуется в будущем для решения своих практических задач в технике, науке или дизайне. Кроме того язык VBS или JS (JavaScript) - это язык приложений в Windows и в Интернет - без чего уже никак немыслимо творить сегодня. Польза несомненно есть!
В.П.Болотов