Автор: }0pa 13.10.2006 3:44
Написал прогу для вычисления корня уравнения на заданном отрезке методо ПОЛОВИННОГО деления этого отрезка...
Код
procedure polovin(x:real;n:integer);
var a,b:real;{отрезок}
begin
n := 0;
Repeat
c := (a + b) / 2;
If (f(a) * f(c)) < 0 Then b := c
Else a := c;
Inc(n)
Until (b - a) <= Eps;
x := (a + b) / 2;
Write('KOPEHb PABEH x = ', x:10:7);writeln(' |');
Write('KOL-BO DELENIY = ',n);writeln(' |');
end;
Вопрос. Если бы существовал метод деления отрезка на три части, то какие бы были у него недостатки?
Автор: lapp 13.10.2006 4:31
Цитата(}0pa @ 13.10.2006 0:44)
Если бы существовал метод деления отрезка на три части, то какие бы были у него недостатки?
Интересная постановка вопроса..
Типа: если у людей было не две, а три ноги - хуже бы они ходили?..
Метод деления на три части (в отличие от трехногих людей) на самом деле существует. Он, конечно, не прописан ни в каком учебнике, но воплотить ты его можешь, ничто тебе не мешает. И если ты это сделаешь, то наглядно сможешь сравнить результаты..
Вообще, дихотомия (метод поиска делением пополам) - это наиболее рациональный метод. Сходимость его очень быстрая. И на каждом шагу тебе нужно делать только одно сравнение. При делении на три нужно делать одно или два сравнения (зависит от местоположения ответа). Это не намного дольше в смысле скорости счета, но явно требует более сложной структуры при программировании, что, в свою очередь не только берет память (немного, но может быть важно для специализированных чипов), но и может стать источником дополнительныз ошибок.
PS
Вспомнилось, что когда-то, на заре туманной юнности, еще программируя на Fortran'е, я сделал решение уравнения методом деления на несколько частей (от трех до переменного числа отрезков - один маленький шажок). И тогда же убедился в неэффективности..
Автор: }0pa 14.10.2006 14:09
Спасибо, за исчерпывающий ответ!
Автор: мисс_граффити 17.10.2006 2:49
если интересно - почитай про метод золотого сечения.