Definition des Medians einer Liste

median(liste):=block(
  [slist],
  slist:sort(liste),
  anz:length(liste),
  erg:if mod(anz,2)=1 then slist[(anz+1)/2] else 
    (slist[anz/2]+slist[anz/2+1])/2
)$

Definition einer Funktion medreg für die Median-Median-Gerade

medreg(liste,var):=block(
  [a_,g_,fl,h_,grg,gra,grb,grc,p1,p2,p3,k_,yi1,yi2,erg],
  a_:sort(liste),
  g_:length(a_),
  fl:floor(g_/3),
  h_:mod(g_,3),
  grg:if h_=0 then [fl,fl+1,2*fl,2*fl+1] 
    elseif h_=1 then [fl, fl+1,2*fl+1,2*fl+2] 
    else [fl+1,fl+2,2*fl+1,2*fl+2],
  gra:create_list(a_[i],i,1,grg[1]),
  grb:create_list(a_[i],i,grg[2],grg[3]),
  grc:create_list(a_[i],i,grg[4],g_),
  p1:[median(makelist(gra[i][1],i,1,length(gra))),
    median(makelist(gra[i][2],i,1,length(gra)))],
  p2:[median(makelist(grb[i][1],i,1,length(grb))),
    median(makelist(grb[i][2],i,1,length(grb)))],
  p3:[median(makelist(grc[i][1],i,1,length(grc))),
    median(makelist(grc[i][2],i,1,length(grc)))],
  k_:(p3[2]-p1[2])/(p3[1]-p1[1]),
  yi1:k_*(-p3[1])+p3[2],
  yi2:k_*(-p2[1])+p2[2],
  erg:expand(k_*var+(2*yi1+yi2)/3),
  return(erg)
)$

Überprüfung mit geeigneten Beispieldaten
(Vergleich hp ... Horsepower mit Verbrauch pro Meile)

hp:[[75,27],[175,12],[135,16],[100,22],[125,19],[85,15],[160,10],[80,25]]$

f(x):=''medreg(hp,x);

wxplot2d([f,[discrete,hp]],
  [x,0,180],[y,0,45],
  [style,[lines,1,6],[points,2,2,2]]);