Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Programm schreiben, welches Gleichungen löst





Frage

Hallo Leute, ich würde gerne mit Hilfe von Javascript ein Programm schreiben, welches per Klick automatisch lineare Gleichungen löst. Nun meine Frage: Gibt es dafür schon ensprechende Scripts? Wenn ja, wo? Dann habe ich noch eine Frage, ich beschäftige mich erst seit kurzem mit Javascript ist es mir daher schon möglich so ein Programm selber zu schreiben? Wenn ja, wie bzw. womit fange ich zuerst an? Was muss ich mir vorher überlegen? Ich würde mich sehr freuen, wenn ihr mir Tipps bzw. helfen könnt! Danke auf jedenfall schon im Vorhinein für eure Antworten!

Antwort 1 von rfb

um hier nicht Äpfel und Birnen durcheinanderzubringen - was genau meinst du mit Linearer Gleichung (siehe http://de.wikipedia.org/wiki/Lineare_Gleichung)
Nenn am besten eine typische Beispielaufgabe.

Zitat:
Gibt es dafür schon ensprechende Scripts?
sicher - musste bloß googeln.

Zitat:
ist es mir daher schon möglich so ein Programm selber zu schreiben?
Ja!

Zitat:
womit fange ich zuerst an? Was muss ich mir vorher überlegen?
überleg dir genau, wie du von Hand sowas löst, versuch daraus was allgemeines zu formulieren.

Antwort 2 von JavaAsk

@rfb

Danke für deine Antwort!
Ich habe jetzt beschlossen, dass ich so ein Programm selber schreiben möchte und daher nicht danach googlen werde.

Mein Ziel ist es nun mit den mir vorhanden Kenntnissen, mein erstes kleines Programm zu schreiben, welches unter anderem solche leichten Gleichungen löst:

Bsp: x+6=16-5 /-6
x=5

Du siehst, es handelt sich dabei um ganz einfach Gleichungen, später wenn ich ein wenig besser Programmieren kann, werde ich mich an andere Gleichungen herantrauen!

Wie soll ich nun anhand dieser Beispielgleichung etwas allgemeines formulieren!?
Ich wäre dir bzw. euch sehr dankbar, wenn du mir bzw ihr mir noch mehr bzw. konkreter Hinweise geben könntet!

Antwort 3 von rfb

Zitat:
etwas allgemeines
nun ja, wie stellst du "-6" allgemein dar.

Überleg dir welche Variablen dein Programm braucht (input), wie es sie verarbeitet, und wie es sie wieder ausgeben soll (output)

Bei JavaScript ergibt sich zudem das Problem der Verknüfung mit HTML

Beispiel:

<html lang="de">
<head>
<title>Addition</title>
<script type="text/javascript">
function addiere() {
var a,b,x;
a=parseFloat(document.getElementById("a").value);
b=parseFloat(document.getElementById("b").value);
x=a+b;
document.getElementById("erg").value=x;
}
</script>
</head><body>
<form action="javascript:addiere()">
<input type="text" value="0" id="a"> + <input type="text" value="0" id="b"> = <input type="text" value="0" id="erg"><br>
<input type="submit" value="Rechne">
</form>
</body></html>

(parseFloat wird benötigt um aus den Eingaben Kommazahlen zu machen, da die sonst als Text interpretiert werden und das Programm dann nur Murks macht)

Antwort 4 von guest1

ich würde in jedem Fall raten, mal die verschiedenen Formen der Geradengleichung zu betrachten ...

... die da heißen:

Normalform, Punkt-Richtungsform, Zwei-Punkte-Form und - obwohl weniger verbreitet - Hessesche Normalform.

Antwort 5 von CaroS

Hallo JavaAsk,

gestatte ein kritische Bemerkung: Die angegebene Beispielgleichung:
x+6=16-5, Umformung: -6, Lösung: x=5 ist sicherlich linear, keine Frage.
Aber so, wie Du sie angegeben hast, ist sie nicht in der optimalen Form, wie man sie an ein Programm übergeben könnte, denn die rechte Seite lässt sich noch zusammenfassen: 16 - 5 = 11 und damit x + 6 = 11.

Obwohl auch das noch nicht optimal ist ( - ich denke da eher an x - 5 = 0, manche Leute sagen Normalform dazu), könnte man diese Gleichung ja nun von Deinem Programm lösen lassen.

Das wirft aber folgende Frage auf: Wenn Du vor hast, Deinem Programm alle möglichen linearen Gleichungen vorzusetzen, bei denen lineare und absolute Glieder noch nicht zusammengefasst sind, dann musst Du einiges mehr an Programmieraufwand vor allem in diesen Teil Deines Programms hineinstecken, in die Zusammenfassung der Glieder. Mit x+6=16-5 ist es ja nicht getan, man könnte stattdessen ebenso gut auch x+6=(16-9+2*13)/3 schreiben - das ist genau dieselbe lineare Gleichung, nur ein ganz klein wenig komplizierter ausgedrückt. Und es geht natürlich noch viel, viel komplizierter ...

Da sind die Grenzen nach oben völlig offen, wenn man nicht von vornherein die Bedingung stellt, dass alle linearen und alle absoluten Glieder zusammengefasst (und auf eine Seite gebracht) werden müssen.

Stellt und erfüllt man aber diese Bedingung(en), d. h. rechnet man die ganze rechte Seite (16-9+2*13)/3 = 11 selbst aus (und fasst diese 11 auch noch mit der 5 auf der linken Seite zusammen), dann fragt man sich vielleicht, wozu man dann noch ein Programm braucht bzw. welchen Sinn so ein Programm dann hätte.

Tatsache ist, dass an einer linearen Gleichung nun mal nicht viel dran ist, das war schon zu Gauss´ Zeiten so und daran hat sich auch mit der Erfindung von Rechentechnik nichts geändert. Eine lineare Gleichung hat die allgemeine Form a * x + b = 0 und die Lösung x = (-b) / a, mehr ist es nicht.

Wer nun auf c * x + d = e * x + f besteht, dem sei gesagt, dass sich die linearen Glieder c * x und e * x ebenso zusammenfassen lassen wie die absoluten Glieder d und f: (c -e) * x + (d - f) = 0 ergibt genau wieder die allgemeine Form a * x + b = 0 mit c - e = a und d - f = b.

Worin besteht nun aber der Sinn Deines Programms? Was tut es (überwiegend)? Worum geht es?
Wenn ich an Dein Beispiel x+6=16-5 denke, dann wird Dein Programm wohl vor allem Zahlenrechnung betreiben: die 5 von der 16 subtrahieren, (16-9+2*13)/3 ausrechnen und lauter solche Dinge, bevor es dann ganz am Schluss auch mal eine Lösung berechnen darf. Die Lösung ist wie gesagt x = (-b) / a, eine schlichte Division, völlig unspektakulär. Bis das Programm an diesen Punkt kommt, muss es sich wohl zum allergrößten Teil mit der Identifizierung und Zusammenfassung der linearen und der absoluten Glieder der Gleichung rumschlagen, d. h. mit Textverarbeitung und primitiver Zahlenrechnung. Ist das der Sinn Deines Programms?

Gruß,
CaroS

Antwort 6 von JavaAsk

Hallo Leute,

ich möchte mich für eure Antworten bedanke. Ich habe hier mal einen Link, wo man sehr gut erkennen kann, welches Script ich gerne schreiben würde - und wie dies funktionieren sollte:
http://www.mathepower.com/gleichungen.php

Mir ist nun anhand eurer Antworten klar geworden, dass man sich als erster darüber Gedanken machen muss, welche Möglichkeiten es gibt um die Gleichung zu lösen - sprich die einzelnen Verfahren.

Nun habe ich ja bereits oben einen Link angegeben, dort sieht man, wenn man auf Gleichung berechnen geht - die entsprechende Lösung. Mir ist dabei aufgefallen, dass das Programm den Input (Gleichung, welche vom Anwender eingegeben wird) durch das Programm sukzessive in die einzelnen Bestandteile zerlegt. Mir ist jedoch noch mit meinen doch sehr geringen Kenntnissen nicht klar, wie man alle möglichen Gleichungen, in eine klare Formulierung bringen soll!? Oder reicht es beispielsweise, wenn ich nur mit diesen Ausdrücken - versuche ein Programm zu schreiben: x = (-b) / a Ist das die Lösung für mein Problem?

@CaroS
Ich weiß, dass ich bei meiner Beispielsgleichung einen Rechenweg ausgelassen habe, trotzdem danke für den Hinweis!
Beschäftigst du dich eigentlich selber auch mit Programmierung?

Antwort 7 von CaroS

Hallo JavaAsk,

zu der Frage " ... selber auch mit Programmierung?": Gelegentlich ja. Ich schreibe auch manchmal was in diesem Forum, überwiegend zu Excel.

Ansonsten finde ich den Link zu mathepower nicht nur sehr interessant, er erklärt auch einiges. Nämlich dass das, was ich für weniger interessant gehalten habe, hier wohl im Mittelpunkt des Interesses steht.

Ein paar Bemerkungen zu Deiner Frage, wie´s ungefähr geht. Der erste und wichtigste Schritt ist wohl, den Input richtig zu analysieren, d. h. Zeichen für Zeichen einzulesen und zu bewerten, was jedes Zeichen einzeln oder zusammen mit anderen zu bedeuten hat. Dadurch werden letztendlich die Glieder (Terme), mit denen anschließend gerechnet wird, identifiziert und in eine hierarchische Struktur eingesetzt, die den Vorrang von Operationen berücksichtigt und die Anwendung weiterer Regeln (wie Kommutativ-, Assoziativ- und Distributivgesetze) ermöglicht. Dann wird diese Struktur schrittweise und relativ schematisch abgearbeitet (d. h. - ausgerechnet und zusammengefasst). Das Rechnen selbst ist dabei sicherlich die geringste Schwierigkeit. Die Hauptarbeit nach jedem Rechenschritt dürfte die Darstellung der geänderten Gleichung sein.

Insgesamt sehe ich die Problematik so, dass der weitaus größte Teil der Arbeit und der Schwierigkeit im Ausdenken und Erstellen eines funktionierenden Algorithmus liegt und weniger in der programmiertechnischen Umsetzung in der einen oder anderen Programmiersprache. Aber interessant ist es ganz sicher, so etwas mal zu versuchen.

Viel Spaß dabei!
CaroS

Antwort 8 von nighty

hi caros :)

bin beeindruckt,ich liebe deine beschreibungen :))

gruss nighty

p.s
mathe war mein lieblingsfach zur schulzeit :))

stand zur zeit aber 5-6 klasse grrr leider ,
hab zu wenig noch damit zu tun, alles wohl verlernt :((

Antwort 9 von JavaAsk

@CaroS

Ich danke dir noch einmal für deine ausführliche Beschreibeng, ich werde mich einmal an dieses Problem herantrauen, bezweifle aber, dass ich es schaffen werde! Ich denke, dass ich für die obige Aufgabe noch ein wenig mehr an Javascript-Erfahrung benötigen werde.

Ich wollte dich noch fragen, wie du programmieren gelernt hast!? Im Selbststudium oder ist es beruflich bedingt - wenn du überhaupt schon arbeitest!?

Antwort 10 von Solo

Hi, sollte es dir nicht gelingen ein funktionierendes Programm zu schreiben. Dann kannst du auf Appomatox zurückgreifen.

http://www.pcfreunde.de/download/detail-619/appomatox.html

MfG

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: