|
Сравнение
времен вычислений
Теперь определим время, необходимое
для вычисления функции/(л:) в 1000 точек, используя первоначальное интегральное
определение, и сравним его с временем, требующимся для схемы
MinimaxApprox в виде непрерывной дроби. Так как наше приближение будет
давать только 6 точных цифр, мы также потребуем 6 точных цифр и от интегрального
представления функции:
> Digits :=б:
St :=time():
> seq( evalf(f(i/250.0)),
i = 1..1000 ):
> oldtime
:= time() - st;
oldtime-81.805
В процессе вычислений с использованием
представления рациональной функции в виде непрерывной дроби иногда требуется
внести несколько дополнительных цифр точности для страховки. В данном случае
достаточно внести две дополнительные цифры. Итак, новое время вычислений:
>
Digits := 8: st := tirae():
> seq( MinimaxApprox(i/250.0), i = 1..1000 ):
> newtime :» time()- st;
newtime:= .694
Ускорение вычисления при аппроксимации
есть:
>
SpeedUp := oldtime/newtime;
SpeedUp:=U7.S7464
Мы видим, что процедура вычислений,
основанная на MinimaxApprox, выполняется почти в 120
раз быстрее процедуры с использованием исходного интегрального определения.
Это просто феноменальный успех, полностью оправдывающий время, потерянное на
предварительные эксперименты по аппроксимации и ее оптимизации! Разумеется,
при условии, что вы будете применять эту аппроксимацию многократно.
|