* PR 07-Sep-94. (sg26.3: STB-25) program define _jprfpmm version 3.1 if "$S_E_fp"!="fp" { error 301 } global S_24 global S_25 local expx 0 if "${S_E_xpx}"!="" { local expx $S_E_xpx di in gr _n "X transformed to exp(" /* */ in ye %8.0g `expx' in gr " * X)." } local np 0 parse "$S_E_pwrs", parse(" ,") while "`1'"!="" { if "`1'"=="," { mac shift } local np=`np'+1 local p`np' `1' mac shift } if `np'>2 { exit } local small 1e-6 local X $S_E_x if `np'==1 { if abs(`p1')<`small' { local spb=sign(_b[`X'_1]) } else local spb=sign(`p1'*_b[`X'_1]) if `expx' { local spb=`spb'*sign(`expx') } if `spb'>0 { local pkt "positive" } else local pkt "negative" di in gr _n "Curve m = 1, p = " in ye "`p1'" /* */ in gr " has a `pkt' slope and" /* */ " no maximum or minimum." exit } /* m=2 */ local gamma=_b[`X'_2]/_b[`X'_1] _jprfptp `p1' `p2' `gamma' local xpk $S_26 local x . if abs(`p1')<`small' { if abs(`p2')<`small' { /* (0,0) */ loc fpcal "\$_x*(1+\$_gamma*\$_x)" } else { /* (0,p2) */ loc fpcal "\$_x+\$_gamma*exp(\$_p2*\$_x)" } } else if abs(`p2')<`small' { /* (p1,0) */ loc fpcal "\$_gamma*\$_x+exp(\$_p1*\$_x)" } else { if abs(`p2'-`p1')<`small' { /* (p1,p1) */ loc fpcal "exp(\$_p1*\$_x)*(1+\$_gamma*\$_x)" } else { /* (p1,p2) */ loc fpcal "exp(\$_p1*\$_x)+\$_gamma*exp(\$_p2*\$_x)" } } qui sum `X' local xmin=_result(5) local xmax=_result(6) if `xpk'==. { local x=log(_result(3)) } /* xpk is in log X units */ else local x `xpk' local y1=_b[`X'_1]*(`fpcal') local x=`x'+.1 local y2=_b[`X'_1]*(`fpcal') di in gr _n "Curve (" in ye "`p1'" in gr "," /* */ in ye "`p2'" in gr ") " _cont if `xpk'!=. { if `y2'<`y1' { local pkt "maximum" } else local pkt "minimum" if `expx' { local xpk=`xpk'/`expx' local xmin=log(`xmin')/`expx' local xmax=log(`xmax')/`expx' if `expx'<0 { local temp `xmin' local xmin `xmax' local xmax `temp' } } else local xpk=exp(`xpk') di in gr "has a global `pkt' at `X' = " /* */ in ye %8.0g `xpk' /* */ in gr ". Range of X is [" in ye `xmin' /* */ in gr "," in ye `xmax' in gr "]." global S_24 `xpk' global S_25 `pkt' } else { if `expx'<0 { local temp `y1' local y1 `y2' local y2 `temp' } if `y2'>`y1' { local pkt "positive" } else local pkt "negative" di in gr "has a `pkt' slope and" /* */ " no maximum or minimum for X>0." } end