MLTutorBeispielerstellung

Aus Physik
Zur Navigation springen Zur Suche springen

Allgemeine Fragen und Antworten zum Adaptieren der Übungsbeispiele

  • Soll jedes Beispiel einer Übung ein eigenes Projekt sein? Wenn nicht sollen wir die Benennung so wie auf Angabe für Referenzprogramm übernehmen?
    • JA, jedes Beispiel als eigenes Projekt; Referenzprogramm heißt immer main.m. Das gilt nur für ein eventuell notwendiges Script. Funktionen werden gleich benannt wie in der Angabe, und ein Projekt kann mehr als eine Funktion enthalten.
  • Wie werden Funktionen getestet?
    • Es wird eine Referenzfunktion geschrieben und beide Funktionen werden aufgerufen. Danach werden die Variablen verglichen.
  • Ist Laden von Übungsdaten noch notwendig?
    • NEIN
  • Haben wir eine Möglichkeit Plots zu vergleichen?
    • JA; Es muss ein Linehandle vorhanden sein, mit dem der Zugriff auf die Daten der Figure ermöglicht wird.
  • Wie werden Variablen gesetzt?
    • ENTWEDER es wird ganz klar gefordert welche Werte den Variablen zugewiesen werden müssen,
    • ODER es werden Variablen im Praescript definiert und in der Angabe wird mitgeteilt, dass diese Variablen existieren.
  • ist es noch möglich (sinnvoll?) input zu verwenden
    • Eher nicht (Außer dort wo noch Freiheiten bestehen oder wenn die nächste Frage mit JA beantwortet werden kann)
  • Kann man beim Ausführen eines Skriptes input umgehen bzw. Werte vordefinieren, die dann verwendet werden?
    •  ??
  • Können wir die korrekte Handhabung von rand überprüfen (Ob die Skalierung auf das gewünschte Intervall tatsächlich richtig durchgeführt wurde)?
    •  ??
  • Was passiert wenn jemand "clear all" in seinem Script stehen hat? Ist ja ansich lobenswert wenn man es verwendet, nur wird dann die Initialisierung durch ml_test1_before.m gelöscht.
    •  ??
  • Soll die Abgabe generel mit Regulären Ausdrücken überprüft werden? Etwa wenn etwas ohne for Schleifen programmiert werden sollte.
    •  ??

Beispiel2

Projektverzeichnissname: andrej.sommer2005.aufgabe2a
Weis nicht ob es so gedacht war, aber jedenfalls die erste aufgabe mit Testscript:

Nur eine Anmerkung: Das Überprüfen des Ergebnisses vom Studenten übernimmt das MLTutor-Programm, aber im Prinzip läuft es genau so ab, wie du es geschrieben hast. Wenn du selber die Überprüfung übernehmen willst, dann kannst du natürlich gerne deine eigene Routine schreiben, aber im ml_test1_check.m würde bei diesem Test nur

V2,F2,R2,r2 

drinnenstehen, damit das Programm weiß, welche Variablen überprüft werden sollten. Im XML-File, dass man dazu erstellt, kann man dann definieren, mit welcher Genauigkeit der Check abläuft und ähnliches. --Camhy 15:39, 3 Nov 2005 (CET)

Ich bin total dagegen, dass jemand eigene Überprüfungsroutinen schreibt. Das gehört total zum mlTutor und hat überhaupt nichts mit den Beispielen selbst zu tun. Bitte unbedingt nur die Syntax von David verwenden. Wenn irgendetaws für den gewünschten Test nicht ausreicht, dann unbedingt als Anregung an David und mich leiten. Dann müssen wir uns auf Seite des mlTutor darum kümmern. --Winny 16:40, 8 Nov 2005 (CET)

Die Variablen würden dann beim Scriptausführen als Text ausgegeben werden um vom ml_tutor weiterverarbeitet zu werden? --Golubkov 13:03, 10 November 2005 (CET)


regpol.m

function [V,F,R,r]=regpol(typ,a)

switch lower(typ(1))
     case 't'
		V=a^3/12*sqrt(2);
		F=a^2*sqrt(3);
		R=a/4*sqrt(6);
		r=a/12*sqrt(6);
     case 'w'
		V=a^3;
		F=6*a^2;
		R=a/2*sqrt(3);
		r=a/2;
	case 'o'
		V=a^3/3*sqrt(2);
		F=2*a^2*sqrt(3);
		R=a/2*sqrt(2);
		r=a/6*sqrt(6);
	case 'd'
		V=a^3/4*(15+7*sqrt(5));
		F=3*a^2*sqrt(5*(5+2*sqrt(5)));
		R=a/4*(1+sqrt(5))*sqrt(3);
		r=a/4*sqrt((50+22*sqrt(5))/5);
	case 'i'
		V=5*a^3/12*(3+sqrt(5));
		F=5*a^2*sqrt(3);
		R=a/4*sqrt(2*(5+sqrt(5)));
		r=a/2*sqrt((7+3*sqrt(5))/6);
end

ml_test1_after.m

typ = 'W';
a=2;
[V2,F2,R2,r2] = regpol(typ,a);

ml_test1_check.m

switch lower(typ(1))
     case 't'
		V=a^3/12*sqrt(2);
		F=a^2*sqrt(3);
		R=a/4*sqrt(6);
		r=a/12*sqrt(6);
     case 'w'
		V=a^3;
		F=6*a^2;
		R=a/2*sqrt(3);
		r=a/2;
	case 'o'
		V=a^3/3*sqrt(2);
		F=2*a^2*sqrt(3);
		R=a/2*sqrt(2);
		r=a/6*sqrt(6);
	case 'd'
		V=a^3/4*(15+7*sqrt(5));
		F=3*a^2*sqrt(5*(5+2*sqrt(5)));
		R=a/4*(1+sqrt(5))*sqrt(3);
		r=a/4*sqrt((50+22*sqrt(5))/5);
	case 'i'
		V=5*a^3/12*(3+sqrt(5));
		F=5*a^2*sqrt(3);
		R=a/4*sqrt(2*(5+sqrt(5)));
		r=a/2*sqrt((7+3*sqrt(5))/6);
end

variable_names = {'V','F','R','r'};
variable_student = {V2,F2,R2,r2};
variable_tutor = {V,F,R,r};

for j=[1:numel(variable_names)]
	if check(variable_student{j},variable_tutor{j})
		disp([variable_names{j},' richtig berechnet']);
	else
		disp([variable_names{j},' falsch berechnet']);
	end
end

Mit der check.m funktion

check.m

function result = check(a,b)
	if abs(a-b) < 10*eps()
		result = 1;
	else
		result = 0;
	end