Maple-Prozedurbibliothek “Fehler”
Dieses kleine Prozedurpaket ist für eine Automatisierung der Fehlerfortpflanzung zuständig.
Nichts Kompliziertes, aber erleichtert das Rechnen mit Fehlerfortpflanzung ungemein.
Auch hier gilt: Sauber programmiert ist etwas anderes – aber es erfüllt seinen Zweck.
Der Aufruf folgt bei beiden enthaltenden Prozedur nach gleichem Schema:
Aus einem übergebenem Ausdruck und den übergebenen Variablen der fehlerbehafteten Größen wird eine (unapplied-te) Funktion der entsprechenden Fehlerfortpflanzung gegeben.
>test:=Fehler[Fort_stat](x^2+y^2,[x,y]); >test(15,0.03,12,0.002);
Wobei der x-Wert 15 mit einem Fehler von 0,03 und der y-Wert 12 mit einem Fehler von 0,002 ist.
Pretty easy, huh?
Prozeduren:
Downloads: Maple-Worksheet | Kompilierte .m-Datei.
Header:
restart: Fehler:=table():
Fort_stat: Wendet die statistische Fehlerfortpflanzung auf einen Ausdruck an.
Fehler[Fort_stat]:=proc(funk,werte)
###############################################
# Diese Prozedur wendet die (quadratische) Fehlerfortpflanzung für _statistische_ Fehler auf eine beliebige Funktion an.
#
# Die Prozedur erwartet als Übergabeargument:
## 1. "funk" - Die Funktion, für die die Fehlerfortpflanzung durchgeführt werden soll,
## 2. "werte" - Die mit Fehler behafteten Werte.
#
# Im Gegenzug, sozusagen als Ausgleich, gibt die Prozedur zurück:
# Ein bereits als Funktion deklarierter Ausdruck, der in folgender Form angesprochen werden sollte:
## Aufruf(Wert1, Fehler_auf_Wert_1, Wert2, Fehler_auf_Wert2, ... etc ...)
#
# Ein Testaufruf für Fehlerfort_stat könnte sein:
## test:=Fehler[Fort_stat](x^2+y^2,[x,y]);
## test(15,0.03,12,0.002);
# Bugreports bitte an maple-at-andisblog-puenktchen-de
###############################################
local ewerte, fehler, fehler_, used_vars;
if whattype(werte)!='list' then convert(werte,list) end if;
ewerte:=[seq(cat('e',werte[i]), i=1..nops(werte))];
fehler_:=sqrt(add((diff(funk,werte[i])*ewerte[i])^2,i=1..nops(werte)));
used_vars:=zip((x,y)->(x,y),[seq(werte[i],i=1..nops(werte))],[seq(ewerte[i],i=1..nops(werte))]);
fehler:=unapply(fehler_,used_vars);
end proc:
Fort_sys: Wendet die systematische Fehlerfortpflanzung auf einen Ausdruck an.
Fehler[Fort_sys]:=proc(funk,werte)
###############################################
# Diese Prozedur wendet die (absolute) Fehlerfortpflanzung für _systematische_ Fehler auf eine beliebige Funktion an.
#
# Die Prozedur erwartet als Übergabeargument:
## 1. "funk" - Die Funktion, für die die Fehlerfortpflanzung durchgeführt werden soll,
## 2. "werte" - Die mit Fehler behafteten Werte.
#
# Im Gegenzug, sozusagen als Ausgleich, gibt die Prozedur zurück:
# Ein bereits als Funktion deklarierter Ausdruck, der in folgender Form angesprochen werden sollte:
## Aufruf(Wert1, Fehler_auf_Wert_1, Wert2, Fehler_auf_Wert2, ... etc ...)
#
# Ein Testaufruf für Fehlerfort_sys könnte sein:
## test:=Fehler[Fort_sys](2/x+1/y,[x,y]);
## test(42,0.013,23,0.037);
# Bugreports bitte an maple-at-andisblog-puenktchen-de
###############################################
local ewerte, fehler, fehler_, used_vars;
if whattype(werte)!='list' then convert(werte,list) end if;
ewerte:=[seq(cat('e',werte[i]), i=1..nops(werte))];
fehler_:=add(abs((diff(funk,werte[i])*ewerte[i])),i=1..nops(werte));
used_vars:=zip((x,y)->(x,y),[seq(werte[i],i=1..nops(werte))],[seq(ewerte[i],i=1..nops(werte))]);
fehler:=unapply(fehler_,used_vars);
end proc:



