Teilerrelation

Kommentar Maxima
„*“/* RELATION = TEILMENGE DER PRODUKTMENGE */;
„*“/* Eingabe der Mengen */; A:{3,4,8};
B:{4,16};
„*“/* Berechnung der Produktmenge */; AXB:cartesian_product(A,B);
„*“/* Relation x ist ein Teiler von y */; R:subset(AXB,lambda([e],is(mod(e[2],e[1])=0)))
/* lambda ist eine anonyme Funktion,
e steht für das eingelesene Paar */;
Advertisements

Geplanter Inhalt

Grundlagen,
Funktionen,
Listen,
Lineare Algebra,
Boolesche Algebra,
Statistik,
Wahrscheinlichkeitsrechnung;
Finanzmathematik,
Geometrie und Trigonometrie,
Analysis.

Vollkommene Zahlen

Hier bin ich auf vollkommene Zahlen gestoßen: http://youtu.be/bk_Kjpl2AaA

Hier habe ich nachgelesen: http://de.wikipedia.org/wiki/Vollkommene_Zahl

Dieses Programm werden wir brauchen:

for a:1 thru 10000 do block(
T[a]:[],
for i:1 thru a do if mod(a,i)=0 then T[a]:append(T[a],[i]),
n:length(T[a]),
if sum(T[a][i],i,1,n-1)=T[a][n] then disp(a,"ist eine 
vollkommene Zahl","")
);

Maxima Onlinehttp://maxima-online.org/?inc=r-341553497

Mit verbesserter Ausgabehttp://maxima-online.org/?inc=r-820343253

Sein oder nicht Sein

Aufgabe:
Tautologien sind immer wahr!

Man zeige: „Be or not to be“ ist eine Tautologie!
http://de.wikipedia.org/wiki/Sein_oder_Nichtsein,_das_ist_hier_die_Frage

Programmcode:
Version 1

n(u):=1-u;
o(x,y):=x+y-x*y;
bnb(x,y):=o(x,n(x));
bnb(1,1);
bnb(1,0);
bnb(0,1);
bnb(0,0);

Version 2

n(u):=1-u;
o(u,v):=u+v-u*v;
bnb(x):=o(x[1],n(x[1]));
W:{1,0};
WT:reverse(listify(cartesian_product(W,W)));
Result:map(bnb,WT);
[transpose(WT),transpose(Result)];

Version 3

n(u):=not u;
o(u,v):=u or v;
bnb(x):=o(x[1],n(x[1]));
W:{true,false};
WT:reverse(listify(cartesian_product(W,W)));
Result:map(bnb,WT);
[transpose(WT),transpose(Result)];

Maxima-Online: http://maxima-online.org/?inc=r-202349713

Verbesserter Algorithmus: http://maxima-online.org/?inc=r-1341626167

Mit Boolescher Algebra: http://maxima-online.org/?inc=r-197911884

Implikation und Äquivalenz

Hintergrund:

Die Aussagenlogik ist ein Teilgebiet der Logik, das sich mit Aussagen und deren Verknüpfung befasst, ausgehend von Elementaraussagen, denen ein Wahrheitswert (wahr oder falsch)  zugeordnet wird. Der Wahrheitswert einer zusammengesetzten Aussage lässt sich ohne zusätzliche Informationen aus den Wahrheitswerten ihrer Teilaussagen bestimmen.

Man berechne die Implikation mit Listenverarbeitung
(Abbildung aus einem Skriptum des Jahres 2003)

Implikation

Programmcode:

imp(a,b):= not a or b;
A:{true,false};
W:listify(cartesian_product(A,A));
f(x):=imp(x[1],x[2]);
ERG:map(f,W);
WT:[transpose(W),transpose(ERG)];

Erläuterungen dazu:

1. imp(a,b) ist eine benutzerdefinierte Funktion in zwei Variablen
2. eine Aussage kann wahr oder falsch sein
3. cartestian_product(A,B) ist die Produktmenge AxA, listify macht
   aus der Menge eine Liste
4. Funktion mit einem geordneten Paar als Argument
5. map erzeugt das elementweise Ergebnis der Implikation
6. mit transpose entsteht eine spaltenweise Darstellung

Maxima-Online: http://maxima-online.org/?inc=r2019918161

Aufgabe: Man ändere bzw. ergänze die Implikation auf Äquivalenz eqv(a,b):=imp(a,b) and imp(b,a);

Programmcode:

imp(a,b):= not a or b;
eqv(a,b):=imp(a,b) and imp(b,a);
A:{true,false};
W:listify(cartesian_product(A,A));
f(x):=imp(x[1],x[2]);
g(x):=eqv(x[1],x[2]);
ERG1:map(f,W);
ERG2:map(g,W);
WT:[transpose(W),transpose(ERG1)];
WT:[transpose(W),transpose(ERG2)];

Maxima-Online: http://maxima-online.org/?inc=r234229047

Ein Kryptogramm lösen

Gegebenes Kryptogramm:

EINS + EINS = ZWEI

Wenn man die Buchstaben durch passende Ziffern ersetzt, erhält man eine richtige Rechnung. Verschiedene Buchstaben müssen verschiedene Ziffern sein.

Quelle: http://de.wikipedia.org/wiki/Kryptogramm

Programmcode:

for e:0 thru 9 do
for i:0 thru 9 do
for n:0 thru 9 do
for s:0 thru 9 do
for w:0 thru 9 do
for z:0 thru 9 do
block(
ev(Buchstaben:[e,i,n,s,w,z]),
if 2*(1000*e+100*i+10*n+s)=1000*z+100*w+10*e+i then
if cardinality(setify(Buchstaben))= length(Buchstaben) then
print(Buchstaben)
);

Man beachte, dass die Verwendung der Mächtigkeit einer Menge (cardinality) hier vorteilhaft verwendet werden konnte,.

Maxima Online: http://maxima-online.org/?inc=r1496736207
mit Ausgabe von EINS und ZWEI: http://maxima-online.org/?inc=r-792513137

Zur Funktionsweise des Programms siehe: https://casmaxima.wordpress.com/2014/04/02/ein-spanisches-online-maxima/

 

Gesetze von De Morgan (Mengenlehre)

Entwurf für ikonischen Beweis:

dm

de_Morgan_1_links de_Morgan_1_rechts

Programmcode:
Beweis erstes Gesetz von de Morgan (PDF-Merkblatt)

H:{1,2,3,4};
A:{2,3};
B:{3,4};
V:union(A,B);
D_H_V:setdifference(H,V);
L1:setdifference(H,union(A,B));
D_H_A:setdifference(H,A);
D_H_B:setdifference(H,B);
R1:intersect(D_H_A,D_H_B);
is(L1=R1);

Maxima Online: http://maxima-online.org/?inc=r-397989842

Ziffernsumme einer dreistelligen Zahl

Eine Aufgabenstellung bei www.edhelper.com lautete in deutscher Übersetzung:
(g1) Die Ziffernsumme einer dreistelligen Zahl ist 18
(g2) Die Hunderterstelle ist um 6 größer als das 2fache der Zehnerstelle
(g3) Die Einerstelle ist um 6 größer als das 3fache der Zehnerstelle
Die dreistellige Zahl ist gesucht.

Programmcode:

g1:H+Z+E=18;
g2:H-6=2*Z;
g3:E-6=3*Z;
l:solve([g1,g2,g3],[H,Z,E]);
Zahl:100*H+10*Z+E,l;

Ausführung mit Maxima Online: http://maxima-online.org/?inc=r-144388483

Übungsauftrag:

Zweiergruppen:
Formuliere derartige Aufgabenstellungen für frei gewählte dreistellige Zahlen (mit unterschiedlichen Ziffern).
Das andere Gruppenmitglied soll deine Aufgabenstellungen lösen.

Aufgabe für Fortgeschrittene:

Auch ohne Computer ist nicht schwer, herauszufinden, wie viele dreistellige Zahlen es gibt. Mit Computer ist es auch interessant: http://maxima-online.org/?inc=r-673670430 . Aber, wie viele dreistellige Zahlen mit unterschiedlichen Ziffern gibt es? Die Kombinatorik liefert schnell eine Antwort.
Ich hätte gerne, dass der Computer diese Zahlen aufschreibt.

Der Programmcode dazu:

H:setify(makelist(i,i,1,9));
Z:setify(makelist(i,i,0,9));
E:Z;
zahlenmenge:cartesian_product(H,Z,E);
zahlenliste:listify(zahlenmenge);
verschiedene_ziffern:sublist(zahlenliste,lambda([x],
cardinality(setify(x))=3));
length(verschiedene_ziffern);

Anmerkung: cardinality(M) ist die Mächtigkeit der Menge M. Die Mächtigkeit einer Menge, ist die Anzahl ihrer Elemente. Die Zahl 199 als Liste ist [1,9,9]. Wenn man die Liste zu einer Menge verwandelt, erhält man {1,9}. Da eine Menge eine Zusammenfassung von wohlunterschieden Objekten unserer Anschauung oder unseres Denkens ist, dürfen keine Ziffern mehrfach vorkommen. Die Umwandlung einer Liste x in eine Menge erfolgt mit setify(x).  Die lambda-Funktion berücksichtigt in der Teilliste (sublist) also nur dreistellige Zahlen mit lauter verschiedenen Ziffern.Liste_in_Menge_1

Ausführung mit Maxima Online: http://maxima-online.org/?inc=r-1271358832

Es geht natürlich auch ohne Maxima:

Matthias Praunegger von http://www.d4e.at hat mir dieses Programm (mit einem anderen Algorithmus) geschickt:

matthias