Forum: PC-Programmierung C++ Matrizenmultiplikation mit Variablen statt Zahlen


von Bartosz B. (bartosz)


Lesenswert?

Hallo, ich bin ein C-Neuling und habe gerade mit Visual Studio 17 ein 
Programm geschrieben, welches eine 2x2- mit einer 2x3-Matrix 
multipliziert, mit Falk.

Beispiel:
1    3
2    4
und
0    2    4
1    3    0
wird
3    11   4
4    16   8
das kommt auch raus.

Der Benutzer gibt die Dimensionen der Matrices vorher ein und dann die 
Werte. Die Werte sind (natürlich) vom Typ double. Es wird ebenso 
geprüft, ob die Spaltenanzahl von Mat1 == Zeilenanzahl von Mat2 ist. 
Soweit ist alles klar.

Gibt es eine Möglichkeit zu coden, um unbekannte Variablen einzugeben, 
sodass
1    3
2    4
*
0    2    4
1    3    z
=
3    11   3*z+4
4    16   4*z+8  in der Konsole steht?



Nur so aus Interesse.

Danke

von J. W. (nuernberger)


Lesenswert?

So was gibt's schon.
z.B.
https://www.mathworks.com/help/symbolic/mtimes.html

Eigentlich nicht üblich, wenn man schon gelöste Probleme noch mal löst.

von Heiko L. (zer0)


Lesenswert?

J. W. schrieb:
> Eigentlich nicht üblich, wenn man schon gelöste Probleme noch mal löst.

Echt jetzt?

von Sven B. (scummos)


Lesenswert?

Denkanstoß: du könntest als Typ std::string nehmen statt double, dann 
statt multiplizieren immer die strings mit * zwischendrin 
aneinanderhängen, und am Schluss (oder zwischendrin) alles evaluieren 
was geht. Das geht natürlich eleganter, aber im Grunde genommen wird es 
auf irgendetwas ähnliches hinauslaufen.

von Schon gelöste Probleme (Gast)


Lesenswert?

Mathlab als Lösung? In diesem Fall wäre das Open-Source Programm Maxima 
passender.

Einfach mal anschauen, mit welchen Strategien Maxima das Thema anpackt. 
Isaak Newton sagte: Wir haben weiter gesehen, weil wir auf den Schultern 
von Giganten standen.

von Rolf M. (rmagnus)


Lesenswert?

Heiko L. schrieb:
> J. W. schrieb:
>> Eigentlich nicht üblich, wenn man schon gelöste Probleme noch mal löst.
>
> Echt jetzt?

Nö. Dinge nochmal zu lösen, die schon mal gelöst worden sind, ist das 
Grundprinzip der freien Marktwirtschaft.

von Bernd K. (prof7bit)


Lesenswert?

Für Python gibts SymPy.

Ich könnte mir vorstellen daß es mehr Spaß macht mit solchen Sachen in 
ner dymamischen Sprache wie Python rumzuspielen als mit dem störrischen 
und spröden C++ auf so einem Terrain rumzuackern. Nur so ein 
Bauchgefühl.

von Sven P. (Gast)


Lesenswert?

Die Eigen-Bibliothek dürfte sowas haben.

von Arno (Gast)


Lesenswert?

Möglich ist es, aber - wie schon hier anklingt - nichts, was man mal 
eben programmiert. Zum Glück haben das schon verschiedene Leute getan 
und du kannst auf deren Arbeit aufbauen :)

Vor Jahren habe ich mal in C++ mit GinaC symbolisch gerechnet: 
https://ginac.de/

MfG, Arno

von Schmalspur-Informatiker (Gast)


Lesenswert?

Arno schrieb:
> nichts, was man mal
> eben programmiert.

Eigentlich schon.

Genau sowas war Früher™ im Informatik-Grundstudium, Vorlesung 
"Compilerbau I" eine der früheren Übungsaufgaben.... Noch vor 
flex/bison/yacc, gleich als zweite praktische Anwendung eines 
handgeklöppelten Top-Down-Parsers.

Man muss sich halt erst Gedanken zur Grammatik machen, diese 
niederschreiben, und dann kann man ohne groß Nachzudenken den Quelltext 
raustippen. Und wem das stupide Tippen zuviel ist, der nimmt einen 
Code-Generator dafür.


Schwierig wird's später, wenn du die Formeln lösen willst, nach X 
auflösen, umformen...

Das wurde dann in den Compilerbau-Vorlesungen nur noch oberflächlich 
angekratzt.

von Bartosz B. (bartosz)


Lesenswert?

Dankeschön soweit!
Ich werde die verschiedenen Vorschläge umsetzen und mich melden.
Heute Nacht, wenn ich von der Arbeit zurück bin, werde ich als Erstes 
das mit den std::string (Sven B.s Vorschlag) machen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.