Fehler

0
Kommentare

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:

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>