Сравнение времен вычислений
Теперь определим время, необходимое для вычисления функции/(л:) в 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 раз быстрее процедуры с использованием исходного интегрального определения. Это просто феноменальный успех, полностью оправдывающий время, потерянное на предварительные эксперименты по аппроксимации и ее оптимизации! Разумеется, при условии, что вы будете применять эту аппроксимацию многократно.