fmcTitle ("tp067v3"): # Source version 1 # FMCMAP post processor version 1.1 # FMC's first native input language. # The Hock & Schittkowski test problem #67. # This is a free, more intuitive formulation of #67, # without discontinuities, as it would probably be defined # by a modeler of our days. # The solution is equal to the one obtained with tp067v1, # i.e., it is sensible but not exact in the sense of #67. y2 := tp067v3x (fmc_ident_tcb, 2, 0, x1, x2, x3): y3 := tp067v3x (fmc_ident_tcb, 3, 0, x1, x2, x3): y4 := tp067v3x (fmc_ident_tcb, 4, 0, x1, x2, x3): y5 := tp067v3x (fmc_ident_tcb, 5, 0, x1, x2, x3): y6 := tp067v3x (fmc_ident_tcb, 6, 0, x1, x2, x3): y7 := tp067v3x (fmc_ident_tcb, 7, 0, x1, x2, x3): y8 := tp067v3x (fmc_ident_tcb, 8, 0, x1, x2, x3): fmcFunctionDiffHint ([ tp067v3x, 0, 0, 0, tp067v3x ( fmcFunctionArg1, fmcFunctionArg2, 1, fmcFunctionArg4, fmcFunctionArg5, fmcFunctionArg6 ), tp067v3x ( fmcFunctionArg1, fmcFunctionArg2, 2, fmcFunctionArg4, fmcFunctionArg5, fmcFunctionArg6 ), tp067v3x ( fmcFunctionArg1, fmcFunctionArg2, 3, fmcFunctionArg4, fmcFunctionArg5, fmcFunctionArg6 ) ]): fmcExternalCodePath ("../../doc/RevisedHockSchittkowski/src/tp067v3x.c"): myminfun := -(0.063*y2*y5 - 5.04*x1 - 3.36*y3 - 0.035*x2 - 10*x3): fmcMinimum (myminfun): fmcInequality (i1, y2 - 0): fmcInequality (i2, y3 - 0): fmcInequality (i3, y4 - 85): fmcInequality (i4, y5 - 90): fmcInequality (i5, y6 - 3): fmcInequality (i6, y7 - 1/100): fmcInequality (i7, y8 - 145): fmcInequality (i8, 5000 - y2): fmcInequality (i9, 2000 - y3): fmcInequality (i10, 93 - y4): fmcInequality (i11, 95 - y5): fmcInequality (i12, 12 - y6): fmcInequality (i13, 4 - y7): fmcInequality (i14, 162 - y8): fmcStrongLowerBound (x1, 10^(-5)): fmcStrongLowerBound (x2, 10^(-5)): fmcStrongLowerBound (x3, 10^(-5)): fmcStrongUpperBound (x1, 2000): fmcStrongUpperBound (x2, 16000): fmcStrongUpperBound (x3, 120): fmcInitialValue (x1, 1745): fmcInitialValue (x2, 12000): fmcInitialValue (x3, 110): myownabs := proc (x::algebraic) return (fmc_m_abs (x)): end proc: myabsdevnod0_0 := myownabs (myminfun + 1162.02698005969): myreldevnod0_0 := myownabs (myminfun/1162.02698005969 + 1): myabsdevnod0_1 := myownabs (x1 - 1728.371443241086): myreldevnod0_1 := myownabs (x1/1728.371443241086 - 1): myabsdevnod0_2 := myownabs (x2 - 16000): myreldevnod0_2 := myownabs (x2/16000 - 1): myabsdevnod0_3 := myownabs (x3 - 98.13617652300942): myreldevnod0_3 := myownabs (x3/98.13617652300942 - 1): myabsdevnod1_0 := (1/2)*(myownabs (myabsdevnod0_0 - myabsdevnod0_1) + (myabsdevnod0_0 + myabsdevnod0_1)): myreldevnod1_0 := (1/2)*(myownabs (myreldevnod0_0 - myreldevnod0_1) + (myreldevnod0_0 + myreldevnod0_1)): myabsdevnod1_2 := (1/2)*(myownabs (myabsdevnod0_2 - myabsdevnod0_3) + (myabsdevnod0_2 + myabsdevnod0_3)): myreldevnod1_2 := (1/2)*(myownabs (myreldevnod0_2 - myreldevnod0_3) + (myreldevnod0_2 + myreldevnod0_3)): myabsdevnod2_0 := (1/2)*(myownabs (myabsdevnod1_0 - myabsdevnod1_2) + (myabsdevnod1_0 + myabsdevnod1_2)): myreldevnod2_0 := (1/2)*(myownabs (myreldevnod1_0 - myreldevnod1_2) + (myreldevnod1_0 + myreldevnod1_2)): zmyabsdevmax := myabsdevnod2_0: zmyreldevmax := myreldevnod2_0: fmcEscortFloat (x1, x1): fmcEscortFloat (x2, x2): fmcEscortFloat (x3, x3): fmcEscortFloat ('myminfun', myminfun): fmcEscortFloat ('zmyabsdevmax', zmyabsdevmax): fmcEscortFloat ('zmyreldevmax', zmyreldevmax):