Показ дописів із міткою 69 рота. Показати всі дописи
Показ дописів із міткою 69 рота. Показати всі дописи

субота, 14 травня 2011 р.

Решение уравнений методом половинного деления.

Эта тема выносится на рубежный контроль и в экзаменационные вопросы.
Дано уравнение
Необходимо найти его корень с точностью до 4 знаков после запятой.
Как бы мы вычисляли корень вручную:
Оцениваем, что корень уравнения лежит между нулём и десятью, (т.к. и ). Значит 0<х<10. Находим середину интервала: (10+0)/2=5 и подставляем пятёрку в уравнение вместо х.
. Значит 0<х<5. Опять находим середину: (0+5)/2=2,5 и пробуем:
. Значит 0<х<2,5. Снова находим середину: (0+2,5)/2=1,25 и подставляем
. Т.к. теперь знак <, то двигается левая граница промежутка и 1,25<х<2,5. Теперь подставляем в равнение число (1,25+2,5)/2=1,875
и 1,25<х<1,875. Далее будем получать такие промежутки:
1,5625<х<1,875
1,5625<х<1,7188
1,6407<х<1,7188
1,6798<х<1,7188
1,6798<х<1,6993
1,6798<х<1,6896
1,6847<х<1,6896
1,6872<х<1,6896
1,6872<х<1,6884
1,6878<х<1,6884
1,6878<х<1,6881
1,6878<х<1,6880
1,6879<х<1,6880
Следовательно, x=1,6879….
Теперь запишем наше решение в виде алгоритма.
  1. Нужно найти два числа (А и В) такие, чтобы корень уравнения находился между ними. Эти числа будет вводить пользователь.
  2. Нужно определить, неравенство с каким знаком (больше или меньше) получится из уравнения, если в него подставить число А (пусть это будет переменная Z, она будет равна -1 при знаке < и 1 – при знаке >)
  3. Нужно найти точку С, середину отрезка [A;B] по формуле C=(A+B)/2 и подставить его в уравнение.
  4. Если знак получившегося неравенства будет таким же, как и при подстановке в него числа А, то корень находится на промежутке [C;B], в противном случае корень – на промежутке [A;C]. Значит, в первом случае левая граница промежутка становится равной С: А, а во втором – правая: В=С
  5. Если разность B-A больше требуемой точности (для четырёх знаков после запятой это 0,0001), то перейти к пункту 3 алгоритма, иначе – вывести решение.
Теперь можно писать программу
10 PRINT “RESHAEM URAVNENIJE X^3+9X=20”
20 PRINT “VVEDITE LEVUJU GRANICU PROMEZHUTKA”
30 INPUT A
40 PRINT “VVEDITE PRAVUJU GRANICU PROMEZHUTKA”
50 INPUT B
60 IF A^3+9*A>20 THEN Z=1 ELSE Z=-1
70 C=(A+B)/2
80 Y=C^3+9*C
90 IF (Y-20)*Z>0 THEN A=С ELSE B=C
100 PRINT A;”<х<”;B
110 IF (B-A)>0.0001 THEN GOTO 70
120 PRINT “X=”;(A+B)/2
Пояснения:
Строки 10-50 – ввод краёв интервала, где находится корень уравнения (п.1. алгоритма)
Строка 60 – находим знак неравенства в левом краю промежутка (п.2. алгоритма)
Строка 70 – находим середину отрезка
Строка 80 – подставляем это значение в уравнение (п.3. алгоритма)
Строка 90 – когда выражение (Y-20)*Z будет больше нуля? Тогда, когда Y>20 и Z=1 и когда Y<20 и Z=-1, т.е. тогда, когда знак неравенства при подстановке в него числа С такой же, как и при подстановке числа А. Это и требовалось в п.4. алгоритма
Строка 100 – выпечатываем, каким путём мы подбираемся к корню
Строка 110 – проверка, не получена ли уже требуемая точность (п.5 алгоритма)
120 – печатаем результат, ещё раз усреднив промежуток.
Для того, чтобы программа решала другое уравнение с другой точностью, нужно внести изменения в строки 10, 60, 80, 90 и 110
Задания для самостоятельной работы
уравнение
точность
1
x-10sinx=15
5 знаков после запятой
2
x+2cosx=3
3 знака после запятой
3
4 знака после запятой
P.S. По научному метод половинного деления называется «дихотомия», так что выполнив работу вы с полным правом можете употреблять это мудрёное слово :)

пʼятниця, 18 березня 2011 р.

Моделирование движения тел - основы

Сделаем программу, в которой цветной круг будет летать по экрану и отскакивать от краёв.
Что нужно знать для того, чтобы задать положение круга на экране?
Положение его центра (Х, Y) и радиус R. Для красоты круг можно рисовать некоторым цветом C
Что нужно знать, чтобы круг двигался?
Проекции его скорости на оси х и у: VX и VY.
На компьютере движение тела моделируется следующим образом:
Выбирается небольшой шаг времени DT, и с этим шагом каждый раз вычисляются новые координаты тела. Для прямолинейного движения формула будет:
X=X+VX*DT
Y=Y+VY*DT
Т.е. координата по оси Х будет той, что была, плюс то расстояние, на какое тело успело переместиться за время DT. Аналогично и для игрека.
Теперь как математически выразить отражение круга от края экрана?
Рассмотрим четыре его положения:
В положениях левее круга 1 и правее круга 3 происходит отражение от вертикальных границ. Это значит, что скорость VX должна поменять знак.
Если круг будет левее положения 1, то для него будет верным неравенство X<=R. Если он правее круга 3, то верно неравенство X>=600-R.
Поэтому команда отражения от вертикальных стенок будет выглядеть так:
IF X<=R OR X>=600-R THEN VX=-VX
В положениях ниже круга 2 и выше круга 4 менять знак должна скорость VY.
Поэтому, аналогично
IF Y<=R OR Y>=300-R THEN VY=-VY
Теперь сформулируем алгоритм, по которому круг будет летать по экрану
  1. Перевести экран в графический режим
  2. Инициализировать переменные
  3. Стереть старое положение круга
  4. Просчитать новое положение круга
  5. Нарисовать круг
  6. Проверить отражение
  7. Перейти к пункту 3
Сделаем на основе алгоритма программу, используя соображения, приведённые ранее.
Пункт 1 реализуется двумя стандартными строками:
10 SCREEN 9
20 CLS
Пункт 2: зададим переменным случайные стартовые значения
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
Таким образом, координата центра круга по оси х будет в пределах от 60 до 460, по оси у – от 60 до 260, радиус круга – от 10 до 50, цвет – любым целым числом от 1 до 15 (именно до 15-ти, т.к. RND всегда строго меньше единицы).
Шаг времени задаём равным 0,1 секунды, если понадобится – отрегулируем потом. Проекции скорости по осям х и у будут в пределах от -10 до 10.
Пункт3. Чтобы стереть изображение, его нужно нарисовать нулевым цветом, т.е. чёрным
100 CIRCLE(X,Y),R,0
Пункт 4. Применяем выведенные формулы
110 X=X+VX*DT
120 Y=Y+VY*DT
Пункт 5 – рисуем круг в новых координатах
130 CIRCLE(X,Y),R,C
Пункт 6 – применяем выведенные формулы отражения
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
Пункт 7 – возвращаемся к пункту 3 алгоритма, т.е. к 100й строке программы
160 GOTO 100
Запускаем программу, наблюдаем, наслаждаемся плодами труда своего J
Итак, если вы всё внимательно делали и разобрались, то удовлетворительное написание рубежа вам обеспечено. Для хороших и отличных оценок нужно уметь моделировать гравитацию и движение нескольких тел. Это вопрос будет разобран с следующей статье.

Моделирование движения тела под действием силы тяжести

На прошлой лабораторной работе мы получили программу, которая выводит на экран летающий круг, отражающийся от краёв.
10 SCREEN 9
20 CLS
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
100 CIRCLE(X,Y),R,0
110 X=X+VX*DT
120 Y=Y+VY*DT
130 CIRCLE(X,Y),R,C
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
160 GOTO 100
Теперь добавим сюда гравитацию. Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки:
Инициализируем переменную G
75 G=1
Вычисляем новую вертикальную скорость
135 VY=VY+G*DT
Заодно отключим стирание предыдущего положення круга, чтобы он оставлял след. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
100 ‘CIRCLE(X,Y),R,0
Запускам программу, наблюдаем за изменениями в движении.
Теперь о том, как будет использоваться эта программа на рубеже.
Нужно будет в строках 30, 40, 50, 75, 80 и 90 вместо случайных значений задать некоторые числа - координаты круга, его радиус, ускорение свободного падения и начальную скорость.
Далее, запустив программу, нужно будет проследить его траекторию и зарисовать её.
Посмотрите, как ведёт себя круг при:
X
Y
R
G
VX
VY
1
100
120
80
1
4
-1
2
110
280
10
-1
-5
5
3
500
10
5
0
3
2
4
450
150
20
0.5
2
6
5
300
180
15
10
8
-15
С Днём студента!

четвер, 24 грудня 2009 р.

График консультаций

Четверг, 24.12 и пятница, 25.12: консультации на 1-2 парах каб.203 или 18
Суббота, 26.12: консультации на 2-3 парах каб.18
Понедельник, 28.12, вторник, 29.12, среда, 30.12: консультации на 2-3 парах в каб.203 или 18