Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.DOC
Скачиваний:
23
Добавлен:
21.03.2015
Размер:
1.77 Mб
Скачать

Практическое задание n 2. 27

1) Вывести в файл стоимость маршрутов без повторяющихся узлов при N=4, M=3, M1=4, Х=9. Определить номера маршрутов с наименьшей и наибольшей стоимостью

для разных значений М.

2) Вывести символами псевдографики в текстовом режиме маршруты движения в прямоугольнике 2х4, либо 4х2. Начало движения при NH=8.

  1. Вывести общий вес и число коробок каждого из 3-х видов, загружаемых в машину. Задать веса функцией Random(50)+50; Установить фильтр по общему весу G<900. Общее число коробок: M=10, M1=12.

2. 5. Программы математических расчетов

2. 5. 1. Численное решение уравнений

Решение уравнения F(x) = 0 заключается в определении значений переменной "x", при которых функция обращается в нуль, т. е. в нахождении корней уравнения. Методы решения уравнений в конечном, аналитическом виде называются прямыми. Например, для уравнения F(x) = a*X+b = 0; решение имеет вид X = -в/а. Аналитически можно определить корни алгебраических уравнений не выше четвертой степени, причем для показателя степени больше двух формулы получаются достаточно сложные. Для определения корней алгебраических и трансцендентных уравнений разработаны численные методы, основанные на уточнении значения корня в предположении, что на отрезке [A, B] функция Y=F(x) непрерывна и имеет только один корень. В этом случае значения функции на концах отрезка имеют разные знаки. Знак вещественного числа "Y" можно определить при помощи функции:

FUNCTION SGN( Y: real): integer;

Begin if Y < 0 then SGN:= -1 else SGN:= 1 End;

Значение переменной SGN= -1 если Y<0, SGN= 1 если Y>=0.

Рассмотрим некоторые численные методы нахождения корней уравнения.

Метод половинного деления (дихотомии) при нахождении корня уравнения F(x)=0 состоит в делении пополам отрезка [A, B], где находится корень. Затем анализируется изменение знака функции на половинах отрезка и одна из границ отрезка [A, B] переносится в его середину. Переносится та граница, со стороны которой функция на половине отрезка знака не меняет. Далее процесс повторяется. Итерации прекращаются при выполнении одного из условий: либо длина интервала [A, B] становится меньше заданной погрешности нахождения корня "Е", либо функция попадает в полосу шума (Е1) - значение функции сравнимо с погрешностью расчетов.

REPEAT { начало итерации }

x:= (A + B)/2; { x - середина отрезка [A, B] }

Y:= F(x); YA:= F(A); { значения функции в середине и на конце отрезка }

if SGN(Y)* SGN(YA) > 0 { если знаки функции в точках "A" и "x" совпадают }

then A:= x else B:= x { то, перенос границы "A", иначе - "В" }

UNTIL (ABS(B-A)< E) OR (ABS(F(x))< E1);

Метод дихотомии уменьшает интервал определения корня за 1 итерацию в 2 раза - за 20 итераций это составит 220.

Метод секущих (хорд) при нахождении корня уравнения Y = F(x)=0 состоит в определении точки пересечения секущей с осью "x". Секущей называется линия, соединяющая точки с координатами (A, F(A)) и (B, F(B)) на плоскости XoY. Приближенное значение корня определяется точкой пересечения с осью "X" секущей и находится по формуле:

x = (A*F(B) - B*F(A))/(F(B) - F(A));

При следующем приближении вычисляется Y = F(x), YA = F(A) и полагается A=X, если знак функции на половине отрезка [A, x] не меняется, иначе B=x. Далее корень ищется на том отрезке, где функция меняет знак. Процесс прекращается при достижении требуемой точности.

Если на исследуемом интервале [A1, B1] функция имеет несколько корней x1[1. . m], то для их нахождения можно разбить этот интервал на "N" малых интервалов и выбрать из них те, где функция меняет знак. Здесь полагается, что на каждом малом интервале функция имеет не более одного корня. Затем следует на каждом выбранном малом интервале применить метод дихотомии или секущих:

Y МЕТОД СЕКУЩИХ

F(B)

Y(x)

0 A x B X

F(A)

dx:= (b1-a1)/N; { длина отрезков }

m:= 0 { счетчик корней }

for k:= 1 to N do begin

a:= a1+(k-1)*dx; b:= a+dx;

if SGN(F(a))* SGN(F(b) <= 0

then begin m:= m+1;

REPEAT << метод дихотомии >>

UNTIL (ABS(b-a)< E) OR (ABS(F(x)) < E1);

x1[m]:= x; { корень номер m }

end

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]