.match_minimize.MAD
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 39 56bdfe65a697
permissions -rw-r--r--
.

#======================================================================
#                    . M A T C H _ M I N I M I Z E . M A D 
#                    doc: Tue Aug 22 18:31:22 2006
#                    dlm: Wed Aug 23 23:15:13 2006
#                    (c) 2006 A.M. Thurnherr
#                    uE-Info: 39 26 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================

# sum of absolute deviations

#======================================================================

sub MM_usage(@)
{
	@MM_fname = @_;

	croak("match-minimize usage: -m SAD(<field>[,...])\n")
		unless (@MM_fname > 0);
	for (my($fi)=0; $fi<@MM_fname; $fi++) {
		$MM_fnr[$fi]  =  &fnr($MM_fname[$fi]);
		$MM_wfnr[$fi] = &wfnr($MM_fname[$fi]);
		&IS_init($MM_wfnr[$fi],$MM_cwfnr);			# prepare interpolation
	}
	for (my($r)=0; $r<@ants_; $r++) {
		for (my($fi)=0; $fi<@MM_fname; $fi++) {
			croak("$0: $MM_fname[$fi] must be numeric\n")
				unless numberp($ants_[$r][$MM_fnr[$fi]]) &&
					   numberp($ants_[$r][$MM_wfnr[$fi]]);
		}
	}
}

#======================================================================

sub MM_eval(@)
{
	&MW_warp(@_);
	
	my($sad) = my($nad) = 0;
	for (my($r)=0; $r<@ants_; $r++) {
		my($xi) = &bSearch($MW_cwfnr,$ants_[$r][$MW_cfnr]);
		next unless defined($xi);
		$nad++;
		for (my($fi)=0; $fi<@MM_fnr; $fi++) {
			my($wv) = &IS_interpolate(\@wf_,$MW_cwfnr,$ants_[$r][$MW_cfnr],$xi,$MM_wfnr[$fi]);
			$sad += abs($ants_[$r][$MM_fnr[$fi]] - $wv);
		}
	}
	return $sad/$nad;
}

#======================================================================

1;