Révision 181

pobysoPythonSage/src/pobyso.py (revision 181)
1158 1158
    #polySo = taylorFormListSaSo[0]
1159 1159
    #errorRangeSo = sollya_lib_copy_obj(taylorFormListSaSo[2])
1160 1160
    errorRangeSo = taylorFormListSaSo[2]
1161
    # No copy_obj needed here: a new object is created.
1162
    maxErrorSo = sollya_lib_sup(errorRangeSo)
1161
    # No copy_obj needed here: a new objects are created.
1162
    maxErrorSo    = sollya_lib_sup(errorRangeSo)
1163
    minErrorSo    = sollya_lib_inf(errorRangeSo)
1164
    absMaxErrorSo = sollya_lib_abs(maxErrorSo)
1165
    absMinErrorSo = sollya_lib_abs(minErrorSo)
1166
    sollya_lib_clear_obj(maxErrorSo)
1167
    sollya_lib_clear_obj(minErrorSo)
1168
    absMaxErrorSa = pobyso_get_constant_as_rn_so_sa(absMaxErrorSo)
1169
    absMinErrorSa = pobyso_get_constant_as_rn_so_sa(absMinErrorSo)
1163 1170
    # If changed, reset the Sollya working precision.
1164 1171
    if not sollyaPrecSo is None:
1165 1172
        sollya_lib_set_prec(initialPrecSo)
......
1167 1174
    if errorTypeIsNone:
1168 1175
        sollya_lib_clear_obj(errorTypeSo)
1169 1176
    pobyso_clear_taylorform_sa_so(taylorFormListSaSo)
1170
    return((polySo, intervalCenterSo, maxErrorSo))
1177
    if absMaxErrorSa > absMinErrorSa:
1178
        sollya_lib_clear_obj(absMinErrorSo)
1179
        return((polySo, intervalCenterSo, absMaxErrorSo))
1180
    else:
1181
        sollya_lib_clear_obj(absMaxErrorSo)
1182
        return((polySo, intervalCenterSo, absMinErrorSo))
1171 1183
# end pobyso_taylor_expansion_no_change_var_so_so
1172 1184

  
1173 1185
def pobyso_taylor_expansion_with_change_var_so_so(functionSo, degreeSo, \
......
1200 1212
        pobyso_get_list_elements_so_so(taylorFormSo)
1201 1213
    polySo = taylorFormListSo[0]
1202 1214
    errorRangeSo = taylorFormListSo[2]
1203
    maxErrorSo = sollya_lib_sup(errorRangeSo)
1215
    maxErrorSo    = sollya_lib_sup(errorRangeSo)
1216
    minErrorSo    = sollya_lib_inf(errorRangeSo)
1217
    absMaxErrorSo = sollya_lib_abs(maxErrorSo)
1218
    absMinErrorSo = sollya_lib_abs(minErrorSo)
1219
    sollya_lib_clear_obj(maxErrorSo)
1220
    sollya_lib_clear_obj(minErrorSo)
1221
    absMaxErrorSa = pobyso_get_constant_as_rn_so_sa(absMaxErrorSo)
1222
    absMinErrorSa = pobyso_get_constant_as_rn_so_sa(absMinErrorSo)
1204 1223
    changeVarExpSo = sollya_lib_build_function_sub(\
1205 1224
                       sollya_lib_build_function_free_variable(),\
1206 1225
                       sollya_lib_copy_obj(intervalCenterSo))
1207
    polyVarChangedSo = sollya_lib_evaluate(polySo, changeVarExpSo) 
1226
    polyVarChangedSo = sollya_lib_evaluate(polySo, changeVarExpSo)
1227
    sollya_lib_clear_obj(polySo) 
1208 1228
    sollya_lib_clear_obj(changeVarExpSo)
1209 1229
    # If changed, reset the Sollya working precision.
1210 1230
    if not sollyaPrecSo is None:
......
1214 1234
        sollya_lib_clear_obj(errorTypeSo)
1215 1235
    sollya_lib_clear_obj(taylorFormSo)
1216 1236
    # Do not clear maxErrorSo.
1217
    return((polyVarChangedSo, intervalCenterSo, maxErrorSo))
1237
    if absMaxErrorSa > absMinErrorSa:
1238
        sollya_lib_clear_obj(absMinErrorSo)
1239
        return((polyVarChangedSo, intervalCenterSo, absMaxErrorSo))
1240
    else:
1241
        sollya_lib_clear_obj(absMaxErrorSo)
1242
        return((polyVarChangedSo, intervalCenterSo, absMinErrorSo))
1218 1243
# end pobyso_taylor_expansion_with_change_var_so_so
1219 1244

  
1220 1245
def pobyso_taylor(function, degree, point):
pobysoPythonSage/src/sollya_lib.sage (revision 181)
11 11
try:
12 12
    # Export the functions with their name in the library (so we can
13 13
    # use them without the "sollya." prefix).
14
        sollya_lib_abs = sollya.sollya_lib_abs
14 15
        sollya_lib_absolute = sollya.sollya_lib_absolute
15 16
        sollya_lib_autoprint = sollya.sollya_lib_autoprint
16 17
        sollya_lib_build_function_add = sollya.sollya_lib_build_function_add
pobysoPythonSage/src/sageSLZ/sageSLZ.sage (revision 181)
426 426
                                                    absoluteErrorTypeSo)
427 427
    maxErrorSa = pobyso_get_constant_as_rn_with_rf_so_sa(maxErrorSo)
428 428
    while maxErrorSa > approxPrecSa:
429
        print "++Approximation error:", maxErrorSa
429
        print "++Approximation error:", maxErrorSa.n()
430 430
        sollya_lib_clear_obj(polySo)
431 431
        sollya_lib_clear_obj(intervalCenterSo)
432 432
        sollya_lib_clear_obj(maxErrorSo)
433
        # Very empirical schrinking factor.
433
        # Very empirical shrinking factor.
434 434
        shrinkFactorSa = 1 /  (maxErrorSa/approxPrecSa).log2().abs()
435
        print "Shrink factor:", shrinkFactorSa, intervalShrinkConstFactorSa
435
        print "Shrink factor:", \
436
              shrinkFactorSa.n(), \
437
              intervalShrinkConstFactorSa
436 438
        #errorRatioSa = approxPrecSa/maxErrorSa
437 439
        #print "Error ratio: ", errorRatioSa
440
        # Make sure interval shrinks.
438 441
        if shrinkFactorSa > intervalShrinkConstFactorSa:
439 442
            actualShrinkFactorSa = intervalShrinkConstFactorSa
440 443
            #print "Fixed"
......
444 447
            #print shrinkFactorSa, maxErrorSa
445 448
        #print "Shrink factor", actualShrinkFactorSa
446 449
        currentUpperBoundSa = currentLowerBoundSa + \
447
                                  (currentUpperBoundSa - currentLowerBoundSa) * \
448
                                   actualShrinkFactorSa
450
                                (currentUpperBoundSa - currentLowerBoundSa) * \
451
                                actualShrinkFactorSa
449 452
        #print "Current upper bound:", currentUpperBoundSa
450 453
        sollya_lib_clear_obj(currentRangeSo)
454
        # Check what is left with the bounds.
451 455
        if currentUpperBoundSa <= currentLowerBoundSa or \
452 456
              currentUpperBoundSa == currentLowerBoundSa.nextabove():
453 457
            sollya_lib_clear_obj(absoluteErrorTypeSo)
......
1349 1353
    is not 0.
1350 1354
    Return () otherwise.
1351 1355
    """
1352
    polynomialRing0 = poly1.parent()
1356
    polynomialRing0    = poly1.parent()
1353 1357
    resultantInElimVar = poly1.resultant(poly2,polynomialRing0(elimVar))
1354 1358
    if resultantInElimVar.is_zero():
1355 1359
        return ()
pobysoPythonSage/src/testPobyso.sage (revision 181)
277 277
    return timing
278 278
# End test_pobyso_taylor_expansion_no_change_var_so_so
279 279

  
280
def test_pobyso_taylor_expansion_with_change_var_so_so(repeat=1000, number=10):
281
    functionName = inspect.stack()[0][3]
282
    print "Running", functionName, "..."
283
    functionSo  = pobyso_parse_string('exp(x)')
284
    degreeSo    = pobyso_constant_from_int_sa_so(20)
285
    rangeSo     = pobyso_bounds_to_range_sa_so(RR(1),RR(2))
286
    errorTypeSo = pobyso_absolute_so_so()
287
    def test(functionSo, degreeSo, rangeSo, errorTypeSo):
288
        teSo = pobyso_taylor_expansion_with_change_var_so_so(functionSo,
289
                                                             degreeSo,
290
                                                             rangeSo,
291
                                                             errorTypeSo)
292
        sollya_lib_clear_obj(teSo[0])
293
        sollya_lib_clear_obj(teSo[1])
294
        sollya_lib_clear_obj(teSo[2])
295
    # End test
296
    wrapped = test_pobyso_wrapper(test, 
297
                                  functionSo, 
298
                                  degreeSo, 
299
                                  rangeSo, 
300
                                  errorTypeSo)
301
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
302
    sollya_lib_clear_obj(functionSo)
303
    sollya_lib_clear_obj(degreeSo)
304
    sollya_lib_clear_obj(rangeSo)
305
    sollya_lib_clear_obj(errorTypeSo)
306
    print "\t...", functionName, "done."
307
    return timing
308
# End test_pobyso_taylor_expansion_with_change_var_so_so
309

  
280 310
def test_pobyso_taylorform_so_so_2(repeat=1000, number=10):
281 311
    functionName = inspect.stack()[0][3]
282 312
    print "Running", functionName, "..."

Formats disponibles : Unified diff