v : VAR nat
maxdepth : VAR nat
expr : VAR RealExpr
box : VAR ProperBox
dirvar : VAR DirVar
dirvars : VAR DirVarStack
M,M1,M2 : VAR IntervalMinMax
out : VAR Output
precision : VAR posreal
prune,ge : VAR ExitPred
le : VAR LocalExitPred
select : VAR DirVarSelector
acc : VAR IntervalMinMax
evaluate(box,expr) : IntervalMinMax = LET X = Eval(expr,box),
Lb = Lbbox(box),
Ub = Ubbox(box),
P1 = Eval(expr,Lb),
P2 = Eval(expr,Ub),
(lb_max,lb_box) = IF ub(P1) < ub(P2) THEN (ub(P1),Lb) ELSE (ub(P2),Ub) ENDIF,
(ub_min,ub_box) = IF lb(P1) > lb(P2) THEN (lb(P1),Lb) ELSE (lb(P2),Ub) ENDIFIN
(# mm := X,
lb_max := lb_max,
lb_box := lb_box,
ub_min := ub_min,
ub_box := ub_box
#)
branch(v,expr) : [RealExpr,RealExpr] = (expr,expr)
denorm(dirvar,M) : IntervalMinMax = M
combine(v,M1,M2) : IntervalMinMax = LET M_lb = IF M1`lb_max < M2`lb_max THEN M1 ELSE M2 ENDIF,
M_ub = IF M1`ub_min > M2`ub_min THEN M1 ELSE M2 ENDIFIN
(# mm := Safe2(Union)(mm(M1),mm(M2)),
lb_max := M_lb`lb_max,
lb_box := M_lb`lb_box,
ub_min := M_ub`ub_min,
ub_box := M_ub`ub_box #)
var_varsel(expr:RealExpr,box:ProperBox,both:bool,
Mb:listn[Interval](length(box)))
(v:below(length(box))) : VarSel = LET X = nth(box,v),
lb = IF both THEN lb(Eval(expr,setnth(Mb,v,LAMBDA(x:Interval): [| lb(X) |]))) ELSE 0 ENDIF,
ub = IF both THEN ub(Eval(expr,setnth(Mb,v,LAMBDA(x:Interval): [| ub(X) |]))) ELSE 0 ENDIF,
lbub = Eval(expr,setnth(Mb,v,LAMBDA(x:Interval):X)) IN
(# thisvar := v,
lb := lb,
ub := ub,
lbub := lbub
#)
max_varsel(vs1,vs2:VarSel) : VarSel = IF size(vs1`lbub) > size(vs2`lbub) THEN vs1 ELSE vs2 ENDIF
IMPORTING structures@for_iterate
both, dir : VAR bool
mindir_maxvar_aux(both:bool)(dirvars,acc,box,expr) : DirVar = IF length(box) <= 1 THEN left(0) ELSE LET Mb = Midbox(box),
vs = iterate_left(0,length(box)-1,var_varsel(expr,box,both,Mb),max_varsel) IN
(vs`lb < vs`ub,vs`thisvar) ENDIF
maxdir_maxvar(dirvars,acc,box,expr) : DirVar = LET (dir,v) = mindir_maxvar(dirvars,acc,box,expr) IN
(NOT dir,v)
altdir_maxvar(dirvars,acc,box,expr) : DirVar = LET (dir,v) = mindir_maxvar_aux(FALSE)(dirvars,acc,box,expr) IN
(even?(length(dirvars)),v)
dir_maxvar(dir)(dirvars,acc,box,expr) : DirVar = LET v = mindir_maxvar_aux(FALSE)(dirvars,acc,box,expr)`2 IN
(dir,v)
max_rec(n:posnat,m:real,v:below(n),
i:subrange(1,n),b:Box | n = length(b)+i) : RECURSIVE below(n) = IF null?(b) THEN v ELSELET mm = size(car(b)) IN IF mm > m THEN max_rec(n,mm,i,i+1,cdr(b)) ELSE max_rec(n,m,v,i+1,cdr(b)) ENDIF ENDIF MEASURE b BY <<
max_aux(box) : nat = IF length(box) <= 1 THEN 0 ELSE max_rec(length(box),size(car(box)),0,1,cdr(box)) ENDIF
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.