Forum: Compiler & IDEs Mit welchen Tools kann ich aus Matlab übersichtlichen C++ erzeugen?


von Melanie F. (melaniefrank)


Lesenswert?

Hallo,

ich habe mehrere 100 Zeilen Matlab Code für meine Bachelorarbeit 
geschrieben. Mein Professor und Betreuer will nun, dass ich den Code in 
C++ abgebe. Der Matlab Coder generiert mir daraus fast 1200 C++ 
Codezeilen. Der automatisch erzeugte C++ Code ist unübersichtlich und 
nicht zu lesen. Das will mein Betreuer so nicht akzeptieren.

Gibt es andere Tools die besser C++ Code erzeugen?
Wie gehen da professionelle Entwickler bzw. -teams da vor?


Danke vielmals
Melanie

von Dumdi D. (dumdidum)


Lesenswert?

Melanie F. schrieb:
> Wie gehen da professionelle Entwickler bzw. -teams da vor?

Wenn das Ergebnis guter C++ Code werden soll, dann wird der von 
professionellrn Entwicklern selbst geschrieben.

von Stefan F. (Gast)


Lesenswert?

> Gibt es andere Tools die besser C++ Code erzeugen?

Es gibt keine Tools, die gute Programme erzeugen. Das wird zwar immer 
wieder versprochen, aber es ist genau so Unsinn, wie dass Epilier-Geräte 
sanft zur Haut seien oder dass man sich schlank essen kann.

von Melanie F. (melaniefrank)


Lesenswert?

Dumdi D. schrieb:
> Melanie F. schrieb:
>> Wie gehen da professionelle Entwickler bzw. -teams da vor?
>
> Wenn das Ergebnis guter C++ Code werden soll, dann wird der von
> professionellrn Entwicklern selbst geschrieben.

Echt? Ich habe gelesen, dass in grossen Firmen professionelle Entwickler 
Algorithmen in Matlab prototypen und erst dann die Programme in C++ 
schreiben. Müssen die das alles manuell machen?

von Martin B. (ratazong)


Lesenswert?

Ein Tool zur Konvertierung matlab C++ kenne ich nicht. Es gibt aber C++ 
Libraraies, die ziemlich nah an der matlab syntax sind.

IT++ ist ganz nah dran, wird aber nicht mehr weiter gepflegt, leider.

Armadillo ist eine weitere lib. Kannst z.B. mal hier gucken: 
http://arma.sourceforge.net/docs.html

Das macht aber schon etwas Aufwand sich da rein zu lesen.

von Martin B. (ratazong)


Lesenswert?

Melanie F. schrieb:
> Müssen die das alles manuell machen?

Ich kenne das nur so.

von x^2 (Gast)


Lesenswert?

Im Sinne der Frage: Deine 10 Finger. Das Tool ist kostenlos und 
lizenzfrei.

von Martin B. (ratazong)


Lesenswert?

x^2 schrieb:
> Im Sinne der Frage: Deine 10 Finger. Das Tool ist kostenlos und
> lizenzfrei.

Und der Sinn Deiner Antwort ?

von Wolfgang (Gast)


Lesenswert?

Martin B. schrieb:
> Ein Tool zur Konvertierung matlab C++ kenne ich nicht.

Dann guck mal bei MathWorks:
https://www.mathworks.com/products/matlab-coder.html

von Martin B. (ratazong)


Lesenswert?

Wolfgang schrieb:
> Martin B. schrieb:
>> Ein Tool zur Konvertierung matlab C++ kenne ich nicht.
>
> Dann guck mal bei MathWorks:
> https://www.mathworks.com/products/matlab-coder.html

Das war doch der, über dessen output sich der Betreuer beschwert hat. 
Der ist nicht brauchbar. Die Frage war nach einer Alternative.

von Carl D. (jcw2)


Lesenswert?

Martin B. schrieb:
> Wolfgang schrieb:
>> Martin B. schrieb:
>>> Ein Tool zur Konvertierung matlab C++ kenne ich nicht.
>>
>> Dann guck mal bei MathWorks:
>> https://www.mathworks.com/products/matlab-coder.html
>
> Das war doch der, über dessen output sich der Betreuer beschwert hat.
> Der ist nicht brauchbar. Die Frage war nach einer Alternative.

Na es gab doch schon den Hinweis auf Armadillo, wo sogar eine 
"Umsetztabelle" Matlab- nach C++-Konstrukt dabei ist.
Jetzt muß man nur noch die mehrere hundert Zeilen Matlab verstanden 
haben.

von Nop (Gast)


Lesenswert?

Melanie F. schrieb:

> Wie gehen da professionelle Entwickler bzw. -teams da vor?

Die verzichten auf von Menschen lesbares C++ und entwickeln durchgehend 
in Matlab. Das wird einfach aus z.B. Simulink exportiert und sieht kein 
menschliches Auge mehr.

Wenn das nicht geht, beispielsweise aus Gründen der Performance speziell 
für den Einsatz mit embedded, dann entwickelt man den Algorithmus in 
Matlab, fügt an wesentlichen Punkten Daten-Dumps ein und zieht das dann 
in C(++) nochmal manuell hoch. Wo möglich, setzt man dabei vorhandene 
Numerik-Libraries ein. Die Daten-Dumps fügt man an genau denselben 
strategischen Punkten ein wie in der Matlab-Version; das hilft dann sehr 
beim Debuggen. Da muß ja dasselbe wie mit Matlab stehen.

von Melanie F. (melaniefrank)


Lesenswert?

Nop schrieb:
> Melanie F. schrieb:
>
>> Wie gehen da professionelle Entwickler bzw. -teams da vor?
>
> Die verzichten auf von Menschen lesbares C++ und entwickeln durchgehend
> in Matlab. Das wird einfach aus z.B. Simulink exportiert und sieht kein
> menschliches Auge mehr.

Müssen die den C++ Code nicht übersichtlich gestalten? Die wollen 
vielleicht den Code an andere Entwickler weitergeben.


>
> Wenn das nicht geht, beispielsweise aus Gründen der Performance speziell
> für den Einsatz mit embedded, dann entwickelt man den Algorithmus in
> Matlab, fügt an wesentlichen Punkten Daten-Dumps ein und zieht das dann
> in C(++) nochmal manuell hoch.

Was heisst Daten-Dumps? Entschuldige, kenne mich nicht so gut aus mit 
den Compilern.

> Wo möglich, setzt man dabei vorhandene
> Numerik-Libraries ein. Die Daten-Dumps fügt man an genau denselben
> strategischen Punkten ein wie in der Matlab-Version; das hilft dann sehr
> beim Debuggen.

Warum muss man dann Debuggen, wenn der Code automatisch übersetzt ist? 
Das wäre super schwer für mich.

> Da muß ja dasselbe wie mit Matlab stehen.

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Melanie F. schrieb:

> Müssen die den C++ Code nicht übersichtlich gestalten?

Nein.

> Die wollen
> vielleicht an andere Entwickler weitergeben, die den Code lesen und
> vwrarbeiten können.

Nein, entwickelt wird rein in Matlab. Das exportierte C++ ist 
ausschließlich für den Compiler bestimmt, und dem ist die 
Übersichtlichkeit egal.

> Was heisst Daten-Dumps?

Dein Algorithmus wird ja irgendwelche Daten verarbeiten. Also werden an 
relevanten Stellen Zwischenergebnisse vorliegen. Beispielweise, wenn Du 
eine Matrix hast, und da eine LR-Zerlegung gemacht wird, um ein 
Gleichungssystem zu lösen, dann liegen L- und R-Matrix als 
Zwischenergebnis vor, und die kannste ausgeben. An der entsprechenden 
Stelle Deiner künftigen Version in C++ müssen dann bei selben 
Eingabedaten dieselben Zwischenergebnisse stehen. Damit kannst Du Bugs, 
die bei manueller Porterung unvermeidlich sind, leicht eingrenzen.

Ich hab so auch schon von Matlab nach Assembler portiert, geht alles.

von Nop (Gast)


Lesenswert?

Melanie F. schrieb:

> Warum muss man dann Debuggen, wenn der Code automatisch übersetzt ist?

Das muß man nicht, der sollte korrekt laufen. Er ist aber nicht 
übersichtlich, weil er nicht für Menschenaugen bestimmt ist. Wenn Du 
übersichtlich willst, heißt es manuell von Grund auf nachbauen, und das 
wird Fehler beinhalten.

von Melanie F. (melaniefrank)


Lesenswert?

Nop schrieb:
> Melanie F. schrieb:
>
>> Müssen die den C++ Code nicht übersichtlich gestalten?
>
> Nein.
>
>> Die wollen
>> vielleicht an andere Entwickler weitergeben, die den Code lesen und
>> vwrarbeiten können.
>
> Nein, entwickelt wird rein in Matlab. Das exportierte C++ ist
> ausschließlich für den Compiler bestimmt, und dem ist die
> Übersichtlichkeit egal.

Ist das für jede Branche so? Ich kann mir nicht vorstellen, dass in 
jeder Branche nur die ausführbare Datei von Bedeutung ist.

>
>> Was heisst Daten-Dumps?
>
> Dein Algorithmus wird ja irgendwelche Daten verarbeiten. Also werden an
> relevanten Stellen Zwischenergebnisse vorliegen. Beispielweise, wenn Du
> eine Matrix hast, und da eine LR-Zerlegung gemacht wird, um ein
> Gleichungssystem zu lösen, dann liegen L- und R-Matrix als
> Zwischenergebnis vor, und die kannste ausgeben. An der entsprechenden
> Stelle Deiner künftigen Version in C++ müssen dann bei selben
> Eingabedaten dieselben Zwischenergebnisse stehen. Damit kannst Du Bugs,
> die bei manueller Porterung unvermeidlich sind, leicht eingrenzen.
>
> Ich hab so auch schon von Matlab nach Assembler portiert, geht alles.

Wow. Wann bzwm warum warst du gezwungen die C++ Dateien von Matlab 
selbst ohne den Matlab - Coder zu programmieren?

Danke vielmals.

von Stefan F. (Gast)


Lesenswert?

> Ich kann mir nicht vorstellen, dass in
> jeder Branche nur die ausführbare Datei von Bedeutung ist.

Es wird wohl bei jeder Software der Fall sein, dass unterschiedliche 
Anwender sie unterschiedlich anwenden.

Du hast durch die Form deiner Ursprünglichen Anfrage jedoch solche 
pauschalisierenden Antworten provoziert.

Wenn ich frage "Sollte man Gras essen?", werde ich eine ebenso pauschale 
Antwort "Gras soll man nicht essen." bekommen. Und dann frage ich: Was 
ist denn, wenn es nichts andere zu Essen gibt? Oder wenn ich eine Kuh 
wäre? Sollte ich auch dann auf das Essen von Gras verzichten?

von A. S. (Gast)


Lesenswert?

Melanie F. schrieb:
> Der automatisch erzeugte C++ Code ist unübersichtlich und
> nicht zu lesen. Das will mein Betreuer so nicht akzeptieren

WAS will er nicht akzeptieren? Garnichts?

Viele Teile des Codes lassen sich von Dir sehr wohl beeinflussen, von 
sinnvoller Benamung bis zu sinnvoller Gruppierung der Module.

Gib mal ein konkretes Beispiel, was er akzeptiert und was er nicht 
akzeptiert. Notfalls vorherige Studenten fragen.

Generell zu sagen, automatisch generierter Code muss manuell neu 
geschrieben werden, ist weltfremd. Generell jeden Müll mit Parametern a 
la c1...c99 zu erlauben, ebenfalls.

von Nop (Gast)


Lesenswert?

Melanie F. schrieb:

> Ist das für jede Branche so? Ich kann mir nicht vorstellen, dass in
> jeder Branche nur die ausführbare Datei von Bedeutung ist.

Der C++-Code ist unwesentlich, sondern nur ein weiterer Zwischenschritt 
zum ausführbaren Programm. Der relevante Quellcode ist also nicht C++, 
sondern Matlab. Änderungen macht man in der Praxis deswegen auch nicht 
im C++-Code, so daß der auch nicht wartbar sein muß.

Meistens ist die Entwicklungszeit hier das Kritische, und die hält man 
so kurz wie möglich. Time to market und so.

> Wow. Wann bzwm warum warst du gezwungen die C++ Dateien von Matlab
> selbst ohne den Matlab - Coder zu programmieren?

Nicht C++, sondern gleich Assembler - das konnte Matlab nicht. Außerdem 
war es aus Performancegründen nötig, den Assemblercode im Hinblick auf 
die Eigenarten des Ziel-Prozessors zu optimieren. Richtig mit Takte 
zählen, Pipelines beachten und sowas.

Im Widerspruch zu dem, was ich gerade mit Entwicklungszeit gesagt habe, 
war das ein Teil, bei dem die Beschränkungen der Hardware kein anderes 
Vorgehen erlaubt hätten. Bauteilkosten im Endprodukt und so.

von ~Mercedes~ (Gast)


Lesenswert?

Achim meinte:

> Generell zu sagen, automatisch generierter Code muss manuell neu
> geschrieben werden, ist weltfremd.

Nja, die Hasen hier haben schon recht.
Refactoring ist zwar machbar, aber eklig.

@Melanie, hast Du mal versucht, Deinen Quelltext
von einem UML - Proggy einlesen zu lassen?

mfg

von Yalu X. (yalu) (Moderator)


Lesenswert?

Was der Betreuer genau von dir erwartet, hängt davon ab, wo genau der
Schwerpunkt der Arbeit liegen soll:

Geht es primär darum, mathematische Zusammenhänge zu erarbeiten und
daraus einen Algorithmus herzuleiten, sollte IMHO der reine Matlab-Code
zum Nachweis der Funktion des Algorithmus ausreichen.

Geht in der Arbeit eher darum, einen bekannten Algorithmus in Software
(konkret: C++-Software) umzusetzen, möchte sich dein Betreuer vermutlich
von deinen Fähigkeiten bzgl. systematischen Vorgehens und Strukturierung
der Software überzeugen. Das kann er aber nicht, wenn du automatisch
generierten Code ablieferst, egal wie hoch dessen Qualität ist.

Vielleicht möchte der Betreuer deinen Code selber benutzen und
weiterentwickeln, wobei ihn aber die Matlab-Abhängigkeit stört. In
diesem Fall wäre vermutlich auch automatisch generierter Code in
Ordnung, aber er muss eben von einer Qualität sein, die eine
Weiterentwickung ermöglicht.

von Dumdi D. (dumdidum)


Lesenswert?

Ein Tool was lesbaren C++ Code erzeugt ist fast sinnlos. Was man nicht 
moechte sind verschiedene Quellen des Sourcecodes. D.h. wenn ein bug 
behoben.werden muss, dann darf man den nicht im C++ Code beheben, ausser 
man will bewusst die Konvertierung von Matlab nach.C++ fuer die.Zukunft 
verhindern. D.h. falls die 'Wahrheit' der Matlab Code ist, dann muss der 
auch den richtigen c++ code ohne dass da jemand noch ran muss erzeugen.

von Melanie F. (melaniefrank)


Lesenswert?

~Mercedes~ schrieb:
> Achim meinte:
>
>> Generell zu sagen, automatisch generierter Code muss manuell neu
>> geschrieben werden, ist weltfremd.
>
> Nja, die Hasen hier haben schon recht.
> Refactoring ist zwar machbar, aber eklig.
>
> @Melanie, hast Du mal versucht, Deinen Quelltext
> von einem UML - Proggy einlesen zu lassen?
>
> mfg

Okay. UML hab ich nicht ausprobiert. danke schau ich mir an.

Braucht ihr (Mercedes) auch keine automatisch erzeugten C++ Programme 
die lesbar und wiederverwendbar sind?

Wie geht ihr da vor?

von Melanie F. (melaniefrank)


Lesenswert?

Yalu X. schrieb:

> Vielleicht möchte der Betreuer deinen Code selber benutzen und
> weiterentwickeln, wobei ihn aber die Matlab-Abhängigkeit stört. In
> diesem Fall wäre vermutlich auch automatisch generierter Code in
> Ordnung, aber er muss eben von einer Qualität sein, die eine
> Weiterentwickung ermöglicht.

Ja, er meinte dass er den C++ Code braucht. Matlab war eigebtlich nr da 
zur Verifikation.

von Melanie F. (melaniefrank)


Lesenswert?

Dumdi D. schrieb:
> Ein Tool was lesbaren C++ Code erzeugt ist fast sinnlos. Was man nicht
> moechte sind verschiedene Quellen des Sourcecodes. D.h. wenn ein bug
> behoben.werden muss, dann darf man den nicht im C++ Code beheben, ausser
> man will bewusst die Konvertierung von Matlab nach.C++ fuer die.Zukunft
> verhindern. D.h. falls die 'Wahrheit' der Matlab Code ist, dann muss der
> auch den richtigen c++ code ohne dass da jemand noch ran muss erzeugen.

Okay verstehe. Und was ist wenn man den Code an andere Teams weitergibt 
als eine mögliche C++ Lösung? Mein Betreuer möchte mit C++ 
weiterarbeiten und in sein Programm einsetzten. Er meinte, er müsste 
vielleicht in Zukunft den Code anpassen.

von Christopher J. (christopher_j23)


Lesenswert?

Melanie F. schrieb:
> Okay verstehe. Und was ist wenn man den Code an andere Teams weitergibt
> als eine mögliche C++ Lösung? Mein Betreuer möchte mit C++
> weiterarbeiten und in sein Programm einsetzten. Er meinte, er müsste
> vielleicht in Zukunft den Code anpassen.

Dann muss er bzw. du das Programm eben in C++ schreiben. Wenn es nur ein 
paar hundert Zeilen sind, dann sollte das ja auch in absehbarer Zeit 
machbar sein. Generierten Code als Basis für weitere Arbeiten zu nehmen 
halte ich für äußerst fragwürdig bzw. ich persönlich würde solchen Code 
meiden wie der Teufel das Weihwasser.

von Dumdi D. (dumdidum)


Lesenswert?

Melanie F. schrieb:
> erzeugten C++ Programme die lesbar und wiederverwendbar sind?

Was waere denn an den unlesbaren nicht wiederverwendbar?

von Melanie F. (melaniefrank)


Lesenswert?

Dumdi D. schrieb:
> Melanie F. schrieb:
>> erzeugten C++ Programme die lesbar und wiederverwendbar sind?
>
> Was waere denn an den unlesbaren nicht wiederverwendbar?

Wiederverwendbar schon stimmt. Aber der Code ist leider nur schwer zu 
modifizieren oder seinen Bedürfnissen anzupassen. Das war der Grund 
weshalb wir bzw. ich den Code nochmal in schön in C++ schreiben soll.

von Stefan F. (Gast)


Lesenswert?

Kannst du mal ein Beispiel von diesem schlechtem Code zeigen?

von ~Mercedes~ (Gast)


Lesenswert?

@Melanie,

Dein Problem ist, das, wenn Du den C++ Code erst
einmal refacturiert hast dieser vollkommen vom
Matlab gelöst ist.
Wenn Du also jetzt in Matlab eine Verbesserung machst
muß der ganze C++ Code wieder refacturiert werden, was
massig Zeit erfordert und neue Fehler ins Projekt
bringt.

Ich kenn Matlab nicht, habe aber aus der Diskussion entnommen,
das der C++ - Generator von dem Teil unflexibel ist.

Nun gebe es vielleicht einen Trick:
Benutze den Umweg über UML, um den C++ Generator vom UML
Programm zu "vergewaltigen".
Dort kannst Du eventuell einstellen, das jeweils nur eine Klasse
pro C++ Datei rein soll, Du kannst die Formatierung des Quelltextes
einstellen, die Headerdateien werden automatisch mit erstellt u.s.w.

Und Du kannst in UML die Bezieheungen der von Mathlab erstellten Klassen
erkennen, virtuelle Funktionen / Schnittstellen u.s.w.

Wenn Du jetzt die Namen der Symbole, Funktionen und Klassen
in Matlab sprechend benennst werden diese in UML übernommen
und samt Deiner Metriken dann in die neue C++ - Datei.

mfg

von bruh (Gast)


Lesenswert?

Also in der Automobilbranche nutzt man TargetLink.

von Michael (Gast)


Lesenswert?

Hallo Melanie,

Melanie F. schrieb:
> Gibt es andere Tools die besser C++ Code erzeugen?
> Wie gehen da professionelle Entwickler bzw. -teams da vor?

Ich schreibe meinen C++-Code einfach selbst. Matlab benutze ich nicht.

Wenn du uns schon den automatisch erzeugten C++-Code nicht zeigen 
willst, dann beschreibe doch einmal, was dieser Algorithmus eigentlich 
genau bezwecken soll.

Ist der so komplex, dass man dafür solch eine "Zauberkiste" wie Matlab 
braucht?


Viele Grüße,

Michael

von ~Mercedes~ (Gast)


Lesenswert?

@Melanie:

Ich hab einen besseren Vorschlag:

Du ziehst Dir deine höchsten Hig-Heels an die Du
auftreiben kannst und trittst Deinem Ausbilder
damit kräftig auf die Füße, damit dieser dir
Targetlink besorgt.

Oder hast Du etwa geflunkert und Du solltest Dein
Proggy doch in C++ schreiben? :-P

mfg

von Bernd K. (prof7bit)


Lesenswert?

Melanie F. schrieb:
> Wie gehen da professionelle Entwickler bzw. -teams da vor?

Wenn in Matlab programmiert werden soll dann schauen sich alle nur den 
Matlab code an und arbeiten damit. Der erzeugte Zwischencode in C++ ist 
ein flüchtiger Zwischenschritt zum fertigen Produkt den keiner je liest, 
aus der einen Maschine raus, direkt in die andere Maschine rein, wo man 
bestenfalls mal kurz reinschaut wenn man den vagen Verdacht hat daß was 
schief läuft, ansonsten uninteressant und kann danach sofort wieder 
gelöscht werden (er kann ja bei Bedarf aus den Matlab Quellen jederzeit 
wieder erzeugt werden).

Wenn in C++ programmiert werden soll schauen sich alle nur den C++ code 
an und arbeiten damit. Der erzeugte Assemblercode ist nur ein flüchtiger 
Zwischenschritt zum fertigen Produkt den keiner je liest, aus der einen 
Maschine raus, direkt in die andere Maschine rein, wo man bestenfalls 
mal kurz reinschaut wenn man den vagen Verdacht hat daß was schief 
läuft, ansonsten uninteressant und kann danach sofort wieder gelöscht 
werden (er kann ja bei Bedarf aus den C++ Quellen jederzeit wieder 
erzeugt werden).

Wenn der Betreuer sagt daß in C++ programmiert werden soll...

Kannst Du ein Muster erkennen?

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Beschreibe doch, falls Du Hilfe wünschst, Dein Problem.

Fehlt Dir Erfahrung mit C++?
Fehlt Dir Erfahrung beim anschaulichen beschreiben in Matlab, so dass 
das Resultat zwar funktioniert aber wie Spaghetticode?
Geht evt auch C, falls das einfacher wäre?
Willst/musst Du den Code in Matlab weiterentwickeln?
Reicht es vielleicht schon, wenn Du die Matlab-anweisungen mit 
Einkommentieren lässt? Und den erzeugten Overhead minimiert?

Also ich bekomme einigermaßen lesbaren Code direkt aus Matlab vom 
Mathematiker, nachdem wir einen Praktiker zur Codegenerierung 
zwischengeschaltet haben.

von x^2 (Gast)


Lesenswert?

~Mercedes~ schrieb:
> Du ziehst Dir deine höchsten Hig-Heels an die Du
> auftreiben kannst und trittst Deinem Ausbilder
> damit kräftig auf die Füße, damit dieser dir
> Targetlink besorgt.

Man braucht doch nur mit dem MATLAB(R) Diploma Mill Package(TM) die 
Bachelor Arbeit automatisch erzeugen lassen. Einfach im Dialog schnell 
noch Name und Matrikelnummer einklickern und auf Generate klicken. Das 
soll ihr der Betreuer besorgen. Bzgl. der Matrikelnummer müßte er noch 
helfen, falls sie die vergessen hat, wofür ist Betreuung da?

von x^2 (Gast)


Lesenswert?


von ~Mercedes~ (Gast)


Lesenswert?

> Man braucht doch nur mit dem MATLAB(R) Diploma Mill Package(TM) die
> Bachelor Arbeit automatisch erzeugen lassen. Einfach im Dialog schnell
> noch Name und Matrikelnummer einklickern und auf Generate klicken. Das
> soll ihr der Betreuer besorgen. Bzgl. der Matrikelnummer müßte er noch
> helfen, falls sie die vergessen hat, wofür ist Betreuung da?

Huch, das wußte ich nicht. ;-O
Nur, wie soll ein Igel ein richtiger Igel
werden, wenn er die Hasen noch nicht einmal
zum Wettlauf auffordert, weil er die
Ausschreibung nicht rausrücken will? :--O

mfg

von Melanie F. (melaniefrank)


Lesenswert?

~Mercedes~ schrieb:
> @Melanie:
>
> Ich hab einen besseren Vorschlag:
>
> Du ziehst Dir deine höchsten Hig-Heels an die Du
> auftreiben kannst und trittst Deinem Ausbilder
> damit kräftig auf die Füße, damit dieser dir
> Targetlink besorgt.
>
> Oder hast Du etwa geflunkert und Du solltest Dein
> Proggy doch in C++ schreiben? :-P
>
> mfg

Targetlink schau ich mir an. Ich sollte zuerst den Sift Algorithmus und 
Varianten in Matlab programmieren. Wenn alles funkioniert nach C++ 
portieren. Nur das portieren dauert wohl lange

Danke für die Antwort

von Melanie F. (melaniefrank)


Lesenswert?

Achim S. schrieb:
> Beschreibe doch, falls Du Hilfe wünschst, Dein Problem.
>
> Fehlt Dir Erfahrung mit C++?

Genau. Matlab Programme sind einfacher uu schreiben. Da sind ja die 
meisten Datenstrukturen und Fubktionen vorhanden.Die Visualisierung ist 
einfach.


> Fehlt Dir Erfahrung beim anschaulichen beschreiben in Matlab, so dass
> das Resultat zwar funktioniert aber wie Spaghetticode?

Nein.
> Geht evt auch C, falls das einfacher wäre?

Glaube nicht. Betreuer will C++.

> Willst/musst Du den Code in Matlab weiterentwickeln?

Ich denke nicht.Matlab war nur zr Verifikation da.


> Reicht es vielleicht schon, wenn Du die Matlab-anweisungen mit
> Einkommentieren lässt? Und den erzeugten Overhead minimiert?
>
> Also ich bekomme einigermaßen lesbaren Code direkt aus Matlab vom
> Mathematiker, nachdem wir einen Praktiker zur Codegenerierung
> zwischengeschaltet haben.

Hmmmm, wolltet ihr also den C++ Code auch weiterbenutzen?

von Melanie F. (melaniefrank)


Lesenswert?

Bernd K. schrieb:
> Melanie F. schrieb:
>> Wie gehen da professionelle Entwickler bzw. -teams da vor?
>
> Wenn in Matlab programmiert werden soll dann schauen sich alle nur den
> Matlab code an und arbeiten damit. Der erzeugte Zwischencode in C++ ist
> ein flüchtiger Zwischenschritt zum fertigen Produkt den keiner je liest,
> aus der einen Maschine raus, direkt in die andere Maschine rein, wo man
> bestenfalls mal kurz reinschaut wenn man den vagen Verdacht hat daß was
> schief läuft, ansonsten uninteressant und kann danach sofort wieder
> gelöscht werden (er kann ja bei Bedarf aus den Matlab Quellen jederzeit
> wieder erzeugt werden).
>
> Wenn in C++ programmiert werden soll schauen sich alle nur den C++ code
> an und arbeiten damit. Der erzeugte Assemblercode ist nur ein flüchtiger
> Zwischenschritt zum fertigen Produkt den keiner je liest, aus der einen
> Maschine raus, direkt in die andere Maschine rein, wo man bestenfalls
> mal kurz reinschaut wenn man den vagen Verdacht hat daß was schief
> läuft, ansonsten uninteressant und kann danach sofort wieder gelöscht
> werden (er kann ja bei Bedarf aus den C++ Quellen jederzeit wieder
> erzeugt werden).

Ich habe gelesen, dass z.B. bei der Programmierung von Steuergeräten in 
der Automobilbranche, gerade da wo es um die Stückzahl geht,
die Assembler Programme modifiziert.

>
> Wenn der Betreuer sagt daß in C++ programmiert werden soll...

Hat er gesagt. Aber es hieß zunächst den Algorithmus in Matlab 
programmieren, damit man die Ergebnisse schnell überprüfen kann.

>
> Kannst Du ein Muster erkennen?

von Dumdi D. (dumdidum)


Lesenswert?

Melanie F. schrieb:
> Hat er gesagt. Aber es hieß zunächst den Algorithmus in Matlab
> programmieren, damit man die Ergebnisse schnell überprüfen kann.

Dann ist doch alles klar. Setz Dich zwei Monate hin und mach das. Falls 
Du gar kein C++ kannst: was hatte der Betreuer denn geantwortet, als Du 
ihm das am Anfang mitgeteilt hattest.

von Dr. Sommer (Gast)


Lesenswert?

Melanie F. schrieb:
> Genau. Matlab Programme sind einfacher uu schreiben. Da sind ja die
> meisten Datenstrukturen und Fubktionen vorhanden

Auch für C++ gibt es umfangreiche Mathematik Libraries, wie z.B. 
"Eigen". Das einzige "Problem" ist, dass man die explizit herunterladen 
und einbinden muss. Damit sollte der C++ Code kaum länger als Matlab 
Code werden.

von Martin B. (ratazong)


Lesenswert?

Dr. Sommer schrieb:
> Auch für C++ gibt es umfangreiche Mathematik Libraries, wie z.B.
> "Eigen". Das einzige "Problem" ist, dass man die explizit herunterladen
> und einbinden muss. Damit sollte der C++ Code kaum länger als Matlab
> Code werden.

Das kann ich so bestätigen, das wird nicht länger.

Das Einbinden kann jedoch komplex werden, je nach Abhängigkeiten der 
Libs und OS.
Open source OS sind da meist einfacher.

Unter Ubuntu z.B. musst Du für IT++ oder Armadillo nur die Paketsourcen 
über synaptic einbinden, schon hast Du es zur Verfügung. Unter windows 
wird es da  meist hakeliger.

von ~Mercedes~ (Gast)


Lesenswert?

Referenziert die entstandene Matlab - C++ Source eigendlich
matlabeigene Bibliotheken oder ist sie total eigenständig?

mfg

von Eric B. (beric)


Lesenswert?

Melanie F. schrieb:
> Ich habe gelesen, dass z.B. bei der Programmierung von Steuergeräten in
> der Automobilbranche, gerade da wo es um die Stückzahl geht,
> die Assembler Programme modifiziert.

Das war vor 20 Jahren. Seit mindestens 10 Jahre programmiert man auch da 
in Matlab/Simulink, C/C++ oder sogar Java.

von Nop (Gast)


Lesenswert?

Eric B. schrieb:

> Das war vor 20 Jahren. Seit mindestens 10 Jahre programmiert man auch da
> in Matlab/Simulink, C/C++ oder sogar Java.

Damals(tm) gabs's sogar Härtefälle, wo der Sourcecode mitunter nicht 
mehr aufzufinden war und man dann direkt das Hexfile in Maschinencode 
editiert hat.

von Eric B. (beric)


Lesenswert?

Nop schrieb:
> Eric B. schrieb:
>
>> Das war vor 20 Jahren. Seit mindestens 10 Jahre programmiert man auch da
>> in Matlab/Simulink, C/C++ oder sogar Java.
>
> Damals(tm) gabs's sogar Härtefälle, wo der Sourcecode mitunter nicht
> mehr aufzufinden war und man dann direkt das Hexfile in Maschinencode
> editiert hat.

Das muss wohl eher 30 Jahre her gewesen sein, mit 40 Jahren alten 
Sourcecode ;-)

von x^2 (Gast)


Lesenswert?

Eric B. schrieb:
> oder sogar Java.

Nee, is klar. Am besten das Airbag-Steuergerät, damit der GC in den ms 
nach der Kollission erstmal den Speicher aufräumt...

von Dr. Sommer (Gast)


Lesenswert?

Es gibt GCs mit deterministischem Laufzeit-Verhalten, und man kann Java 
auch ganz ohne GC nutzen.

von Nop (Gast)


Lesenswert?

x^2 schrieb:

> Nee, is klar. Am besten das Airbag-Steuergerät, damit der GC in den ms
> nach der Kollission erstmal den Speicher aufräumt...

Wieso, garbage collection muß nach einem Unfall doch eh gemacht werden. 
^^

von N. N. (clancy688)


Lesenswert?

So wie ich Melanies Beschreibung der Situation lese, war das Projekt 
zweistufig vorgesehen:

1) Implementierung zur Verifizierung in MATLAB mit MATLAB Code
2) Nach erfolgreicher Verifizierung tatsächliche Implementierung eines 
C++ Produktionscodes

Und zwischen 1 und 2 will Melanie jetzt "abkürzen" weil nicht noch mal 
den Code in einer neuen Sprache neu schreiben müssen...

Kann ich verstehen, aber ich seh da keine Lösung außer sich hinzusetzen 
und halt den Code in C++ runter zu schreiben. Am Ende lernst du dabei 
noch was. ;)

Ich weiß nicht was dein Betreuer alles als Bestandteil deiner 
Bachelorthesis sieht, aber ich kann mir gut vorstellen, dass einer der 
Punkte halt die Implementierung dieses Algorithmus oder was auch immer 
in C++ war. Das dann mit MATLAB Code zu machen ist am Ziel vorbei... ^^

Ich glaub der springende Punkt ist die Aussage deines Betreuers, dass er 
den Code später noch verändern will. An der Stelle fliegt der 
Code-Generator aus dem Fenster, es sei denn, dein Betreuer editiert die 
Datenbasis, welche die Grundlage für den generierten Code ist (in deinem 
Fall M-Code, und den will er ja scheinbar nicht anrühren).
In generiertem Code händisch rumzufuhrwerken ist... ungut. Don't do it. 
Es gibt Ausnahmen, sprich generierter Code den man an bestimmten Stellen 
editieren darf und soll (Rhapsody macht das beispielsweise), aber das 
sind dann z.B. nur Funktionsimplementierungen.


Zur Frage wie das die Industrie macht:

M-Code für Steuergeräte, Ogottogott... ja, da wird MATLAB/Simulink 
genutzt. In Simulink wird dann die gewünschte Funktion modelliert und 
mittels eines Code-Generators C-Code generiert. Der landet dann im 
Steuergerät. Aber in einer Hochsprache coden und dann in eine andere 
Hochsprache übersetzen ist irgendwie... ein seltsames Konzept.

C++ ist generell eher weniger in Benutzung. C ist die Sprache der Wahl. 
Wobei sich das mit Einführung von Adaptive AUTOSAR ändern wird.

: Bearbeitet durch User
von x^2 (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Es gibt GCs mit deterministischem Laufzeit-Verhalten, und man kann
> Java
> auch ganz ohne GC nutzen.

Java als Sprache wurde dafür aber nicht entworfen und ist für besagte 
Anwendung auch nicht geeignet. Das merkt man schon daran, dass:

a) Es keine Sprachkonstrukte für manuelles Speichermanagement gibt.
b) Der Zugriff auf das zu Grunde liegende OS und Hardware nicht sehr 
leichtgängig ist, ich würde fast sagen, nur unter Mühen geht (JNI).
c) Java im Gegensatz zu C eine eher strikte Spezifikation hat (z.B. 
bzgl. Datentypen). Die Sicherstellung dieser kostet Performance, da 
selten optimal auf der jeweiligen Plattform.
d) Vieles was guter Java Stil ist, zu Lasten von Performance geht (z.B. 
defensive copying)


Nop schrieb:
> Wieso, garbage collection muß nach einem Unfall doch eh gemacht werden.
> ^^

Das stimmt :)

von Murkser (Gast)


Lesenswert?

x^2 schrieb:
> Java als Sprache wurde dafür aber nicht entworfen und ist für besagte
> Anwendung auch nicht geeignet. Das merkt man schon daran, dass:
>
> a) Es keine Sprachkonstrukte für manuelles Speichermanagement gibt.
> b) Der Zugriff auf das zu Grunde liegende OS und Hardware nicht sehr
> leichtgängig ist, ich würde fast sagen, nur unter Mühen geht (JNI).
> c) Java im Gegensatz zu C eine eher strikte Spezifikation hat (z.B.
> bzgl. Datentypen). Die Sicherstellung dieser kostet Performance, da
> selten optimal auf der jeweiligen Plattform.

Es gibt eine "Realtime Specification for Java":
https://www.aicas.com/cms/rtsj

Und das schon als Standard des Java Community Process seit 2001.

Schaut auch mal hier: 
https://www.ibm.com/developerworks/library/j-devrtj1/index.html

Genug mit OT.

von Melanie F. (melaniefrank)


Lesenswert?

~Mercedes~ schrieb:
> Referenziert die entstandene Matlab - C++ Source eigendlich
> matlabeigene Bibliotheken oder ist sie total eigenständig?
>
> mfg

Referenziert nichts. Also arbeitet völlig unabhängig von Matlab.

Gut es scheint, dass ich die Software leserlich in C++ schreiben muss.

Danke der Mühe.

von x^2 (Gast)


Lesenswert?

Murkser schrieb:
> Es gibt eine "Realtime Specification for Java":
> https://www.aicas.com/cms/rtsj
>
> Und das schon als Standard des Java Community Process seit 2001.
>
> Schaut auch mal hier:
> https://www.ibm.com/developerworks/library/j-devrtj1/index.html

Und die läuft dann auf nem Mikrocontroller. Mit 64kB Flash und 16kB RAM. 
Für Linux gibts auch nen Real-Time Patch seit Anno Tobak. Und trotzdem 
baut keiner Airbag Steuergeräte mit Embedded Linux.

>
> Genug mit OT.

von Bernd K. (prof7bit)


Lesenswert?

x^2 schrieb:
> Und trotzdem
> baut keiner Airbag Steuergeräte mit Embedded Linux.

Vermutlich weil es vollkommener Overkill wäre für sowas simples.

Andererseits, in der Automobilbranche scheinen nicht mehr alle 
Entscheidungsfindungsprozesse vernunftgesteuert abzulaufen, also nur 
noch ne Frage der Zeit bis selbst die Kofferrauminnenbeleuchtung "smart" 
wird, 200MB Firmware hat und 10 Sekunden zum Booten braucht.

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Bernd K. schrieb:
> Andererseits, in der Automobilbranche scheinen nicht mehr alle
> Entscheidungsfindungsprozesse vernunftgesteuert abzulaufen, also nur
> noch ne Frage der Zeit bis selbst die Kofferrauminnenbeleuchtung "smart"
> wird, 200MB Firmware hat und 10 Sekunden zum Booten braucht.

Vielleicht nicht für die Kofferraumbeleuchtung aber für die 
Reifendrucksensoren. Dazu gibts dann das passende Embeded Linux 
Framework

> Azure Sphere OS: This OS is purpose-built to offer unequalled security
> and agility. Unlike the RTOSes common to MCUs today, our defense-in-depth
> IoT OS offers multiple layers of security. It combines security
> innovations pioneered in Windows, a security monitor, and a custom
> Linux kernel to create a highly-secured software environment and a
> trustworthy platform for new IoT experiences.

https://azure.microsoft.com/en-us/blog/introducing-microsoft-azure-sphere-secure-and-power-the-intelligent-edge/

MfG Klaus

von Murkser (Gast)


Lesenswert?

x^2 schrieb:
> Und die läuft dann auf nem Mikrocontroller. Mit 64kB Flash und 16kB RAM.
> Für Linux gibts auch nen Real-Time Patch seit Anno Tobak. Und trotzdem
> baut keiner Airbag Steuergeräte mit Embedded Linux.

Das wurde auch nicht behauptet. Es ging darum, daß gesagt wurde, daß mit 
Java keine real-time Anwendungen möglich sind. Es geht, wenn man will 
und die Real-Time Specification nutzt. (Bitte merken, daß real-time 
nicht unbedingt gleich kleiner Microcontroller heißt - (soft) real-time 
gibt es auch im Data Center).

Aber Du hast Recht, daß dies nichts für sehr kleine Microcontroller ist. 
Anwendungen für RT Java gibt es aber im Bankensektor - dort wird es 
tatsächlich für latenzkritische Anwendungen genutzt (egal, ob das jetzt 
gut oder schlecht ist...).

von Markus F. (mfro)


Lesenswert?

Murkser schrieb:
> Anwendungen für RT Java gibt es aber im Bankensektor - dort wird es
> tatsächlich für latenzkritische Anwendungen genutzt (egal, ob das jetzt
> gut oder schlecht ist...).

Banken (und Versicherungen) gehen ja auch nur mit anderer Leute Geld um.

"Normale" Unternehmen müssen meist ihr eigenes dafür nehmen, da ist man 
dann gerne ein wenig vorsichtiger und versucht Dinge richtig zu machen 
...

von Bernd K. (prof7bit)


Lesenswert?

Markus F. schrieb:
> Murkser schrieb:
>> Anwendungen für RT Java gibt es aber im Bankensektor - dort wird es
>> tatsächlich für latenzkritische Anwendungen genutzt (egal, ob das jetzt
>> gut oder schlecht ist...).
>
> Banken (und Versicherungen) gehen ja auch nur mit anderer Leute Geld um.
>
> "Normale" Unternehmen müssen meist ihr eigenes dafür nehmen, da ist man
> dann gerne ein wenig vorsichtiger und versucht Dinge richtig zu machen

Java ist ne ziemlich typsichere Sprache, viel typsicherer als C++ oder 
gar C. Das kann durchaus ein Argument sein wenn man Software schreiben 
will die eine minimale Anzahl von Bugs haben und zuverlässig 
funktionieren soll.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Bernd K. schrieb:
> Java ist ne ziemlich typsichere Sprache
Naja...
1
class A {
2
}
3
4
class B extends A {
5
  public static void test () {
6
    System.out.println("A::test");
7
  }
8
}
9
10
class C extends A {
11
}
12
13
class Main {
14
  public static void main (String [] args) {
15
    B [] arrB = new B [1];
16
    A [] arrA = arrB;
17
    arrA [0] = new C ();
18
    arrB [0].test ();
19
  }
20
}

Mehr Beispiele:
https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html
http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#Why%20does%20the%20compiler%20sometimes%20issue%20an%20unchecked%20warning%20when%20I%20invoke%20a

Weil Java Generics über Type Erasure implementiert sind, kann man damit 
nur wesentlich schlechter typsichere API's schreiben als in C++.

von Stefan F. (Gast)


Lesenswert?

Das ist eine interessante Lücke, hätte ich so gar nicht für möglich 
gehalten.

von Dr. Sommer (Gast)


Lesenswert?

Gibt noch einige weitere, wenn man genau hinschaut. Insbesondere gibt es 
öfters mal Situationen wo man eine "Unchecked" Warnung bekommt und nicht 
loswerden kann (außer sie abzuschalten mit "Suppress"). Das sind dann 
die Stellen, wo die Java-Typsicherheit versagt.
Wenn man in C++ ganz auf reinterpret_cast und unions verzichtet (was 
zumindest auf Anwendungsebene sehr wohl möglich ist), bleiben an 
Typ-Unsicherheit nur noch Fälle übrig, die in Java auch nicht besser 
sind. Java hat nur den Vorteil, dass es Typen zur Laufzeit prüft, was 
aber auch ein Performance-Nachteil ist.

von Melanie F. (melaniefrank)


Lesenswert?

Lu R. schrieb:
> So wie ich Melanies Beschreibung der Situation lese, war das Projekt
> zweistufig vorgesehen:
>
> 1) Implementierung zur Verifizierung in MATLAB mit MATLAB Code
> 2) Nach erfolgreicher Verifizierung tatsächliche Implementierung eines
> C++ Produktionscodes
>

Ja genau so hat er mir das beschrieben.

> Und zwischen 1 und 2 will Melanie jetzt "abkürzen" weil nicht noch mal
> den Code in einer neuen Sprache neu schreiben müssen...
>

Genau.
> Kann ich verstehen, aber ich seh da keine Lösung außer sich hinzusetzen
> und halt den Code in C++ runter zu schreiben. Am Ende lernst du dabei
> noch was. ;)
>

Ja stimmt.

> Ich weiß nicht was dein Betreuer alles als Bestandteil deiner
> Bachelorthesis sieht, aber ich kann mir gut vorstellen, dass einer der
> Punkte halt die Implementierung dieses Algorithmus oder was auch immer
> in C++ war. Das dann mit MATLAB Code zu machen ist am Ziel vorbei... ^^
>

Das wollte er so. Zur Verifikation eben.

> Ich glaub der springende Punkt ist die Aussage deines Betreuers, dass er
> den Code später noch verändern will. An der Stelle fliegt der
> Code-Generator aus dem Fenster, es sei denn, dein Betreuer editiert die
> Datenbasis, welche die Grundlage für den generierten Code ist (in deinem
> Fall M-Code, und den will er ja scheinbar nicht anrühren).
> In generiertem Code händisch rumzufuhrwerken ist... ungut. Don't do it.

Warum? Ich meine erbraucht doch letztlich nur den C++ Code.


> Es gibt Ausnahmen, sprich generierter Code den man an bestimmten Stellen
> editieren darf und soll (Rhapsody macht das beispielsweise), aber das
> sind dann z.B. nur Funktionsimplementierungen.

Was genau ist Rhapsody?

>
>
> Zur Frage wie das die Industrie macht:
>
> M-Code für Steuergeräte, Ogottogott... ja, da wird MATLAB/Simulink
> genutzt. In Simulink wird dann die gewünschte Funktion modelliert und
> mittels eines Code-Generators C-Code generiert. Der landet dann im
> Steuergerät. Aber in einer Hochsprache coden und dann in eine andere
> Hochsprache übersetzen ist irgendwie... ein seltsames Konzept.

Aber Matlab und C sind doch Hochsprachen.

>
> C++ ist generell eher weniger in Benutzung. C ist die Sprache der Wahl.
> Wobei sich das mit Einführung von Adaptive AUTOSAR ändern wird.

Was wird sich da bei Autosar genau vwrändern?

von Dr. Sommer (Gast)


Lesenswert?

Melanie F. schrieb:
> In generiertem Code händisch rumzufuhrwerken ist... ungut. Don't do it.
>
> Warum? Ich meine erbraucht doch letztlich nur den C++ Code.
C++ ist nicht gleich C++. Wenn der Code komisch strukturiert ist ist 
dessen Bearbeitung extrem lästig, und generierten Code händisch 
verunstalten macht es nur noch schlimmer. Kein Tool wird dir guten, 
sauberen, wartbaren C++ -Code ausspucken. Dafür gibt's nur brain.exe ...

Melanie F. schrieb:
> Aber Matlab und C sind doch Hochsprachen.
Aber die lassen sich keineswegs 1:1 zueinander abbilden. Die meisten 
Hochsprachen unterscheiden sich derart, dass man die kaum ineinander 
übersetzen kann, und wenn doch ist das Ergebnis chaotisch und schlecht 
wartbar. So etwas geht höchstens bei den .net Sprachen, die sind sich 
semantisch sehr ähnlich.
Es ist zwar beispielsweise möglich, beliebigen C-Code mit trivialen 
Änderungen als C++ zu übernehmen, aber das Ergebnis nutzt halt überhaupt 
nicht die ganzen Vorteile, die C++ bietet. Durch neu Schreiben würde der 
Code dann kompakter, lesbarer, wartbarer. Aber das nimmt dir kein Tool 
ab.

von Analog OPA (Gast)


Lesenswert?

Melanie F. schrieb:
> Echt? Ich habe gelesen, dass in grossen Firmen professionelle Entwickler
> Algorithmen in Matlab prototypen und erst dann die Programme in C++
> schreiben.

Das wird bei uns so gemacht, ja.

>Müssen die das alles manuell machen?
Nein, müssen sie nicht. In den Fällen, wo man effizienten Code möchte, 
schreiben die  das neu, anders oder fangen gar nicht erst mit MATLAB an.

Es gibt aber noch einen Aspekt, den Ich direkt ungefiltert von unserer 
QK weitergebe:

Dein Betreuer hat etwas Wesentliches nicht kapiert: Wenn er den Strang 
MATLAB-CODE automatisch nutzen will, dann DARF man den Code nicht 
verändern. Denn sonst bringt man wieder eine Fehlerquelle rein und die 
Verifikation der Software in MATLAB war nutzlos. Sie muss dann anhand 
weiterere Test-Cases in C++ mit dem neuen Code widerholt werden.

Am Besten, Du erklärst das mal Deinem Betreuer. Dann fragst Du ihn, 
warum er nicht VOR der Aufgabenstellung definiert hat, wie das Ergebnis 
abzuliefern ist. Denn dann hätte man gleich in C++ angefangen.

Bei uns ist das wie gesagt so, dass  man in MATLAB die großen Mengen an 
Code erzeugt, sofern sich das machen lässt und sinnvoll ist. Für andere 
Zwecke werden nur Algorithmen abstrakt abgebildet (hier die Physik der 
Maschinentechnik und Mechanik) und dann alles sinnvoll gecoded. 
Entsprechend viel oder weniger wird in das Modell reingesteckt.

von Melanie F. (melaniefrank)


Lesenswert?

Dr. Sommer schrieb:
> Melanie F. schrieb:
>> In generiertem Code händisch rumzufuhrwerken ist... ungut. Don't do it.
>>
>> Warum? Ich meine erbraucht doch letztlich nur den C++ Code.
> C++ ist nicht gleich C++. Wenn der Code komisch strukturiert ist ist
> dessen Bearbeitung extrem lästig, und generierten Code händisch
> verunstalten macht es nur noch schlimmer. Kein Tool wird dir guten,
> sauberen, wartbaren C++ -Code ausspucken. Dafür gibt's nur brain.exe ...


Wäre denn so ein Tool sinnvoll, der sauberen C++ Code gerneriert?
>
> Melanie F. schrieb:
>> Aber Matlab und C sind doch Hochsprachen.
> Aber die lassen sich keineswegs 1:1 zueinander abbilden. Die meisten
> Hochsprachen unterscheiden sich derart, dass man die kaum ineinander
> übersetzen kann, und wenn doch ist das Ergebnis chaotisch und schlecht
> wartbar. So etwas geht höchstens bei den .net Sprachen, die sind sich
> semantisch sehr ähnlich.
> Es ist zwar beispielsweise möglich, beliebigen C-Code mit trivialen
> Änderungen als C++ zu übernehmen, aber das Ergebnis nutzt halt überhaupt
> nicht die ganzen Vorteile, die C++ bietet. Durch neu Schreiben würde der
> Code dann kompakter, lesbarer, wartbarer. Aber das nimmt dir kein Tool
> ab.

Ich habe mich mal die Tage auch an den anderen Instituten schlau 
gemacht, die wollen so ein Tool entwickeln, aber leider sind sie noch 
nicht so weit. Matlab Funktionen nach sauberen C++ Code. Wäre doch ganz 
nett, oder?

von Dr. Sommer (Gast)


Lesenswert?

Melanie F. schrieb:
> Wäre denn so ein Tool sinnvoll, der sauberen C++ Code gerneriert?

Wenn du es schaffst ein Programm zu entwickeln das intelligent genug ist 
um guten C++ Code zu generieren kannst du dir den Nobel Preis holen, und 
danach kommt die technische Singularität. Nach heutigem Stand der 
Forschung ist das nicht möglich.

von Melanie F. (melaniefrank)


Lesenswert?

Analog OPA schrieb:
> Melanie F. schrieb:
>> Echt? Ich habe gelesen, dass in grossen Firmen professionelle Entwickler
>> Algorithmen in Matlab prototypen und erst dann die Programme in C++
>> schreiben.
>
> Das wird bei uns so gemacht, ja.
>
>>Müssen die das alles manuell machen?
> Nein, müssen sie nicht. In den Fällen, wo man effizienten Code möchte,
> schreiben die  das neu, anders oder fangen gar nicht erst mit MATLAB an.
>
> Es gibt aber noch einen Aspekt, den Ich direkt ungefiltert von unserer
> QK weitergebe:
>
> Dein Betreuer hat etwas Wesentliches nicht kapiert: Wenn er den Strang
> MATLAB-CODE automatisch nutzen will, dann DARF man den Code nicht
> verändern. Denn sonst bringt man wieder eine Fehlerquelle rein und die
> Verifikation der Software in MATLAB war nutzlos. Sie muss dann anhand
> weiterere Test-Cases in C++ mit dem neuen Code widerholt werden.

Okay verstehe.


>
> Am Besten, Du erklärst das mal Deinem Betreuer. Dann fragst Du ihn,
> warum er nicht VOR der Aufgabenstellung definiert hat, wie das Ergebnis
> abzuliefern ist. Denn dann hätte man gleich in C++ angefangen.

Ja das war am Anfang mir nicht so klar. Er will ja den Code auch nicht 
sofort verändern meinte er, sondern eventuell später. Möglicherweise 
will er später nur gewisse Funktionen innerhalb des C++ Codes 
austauschen will und alles andere bleibt gleich!

>
> Bei uns ist das wie gesagt so, dass  man in MATLAB die großen Mengen an
> Code erzeugt, sofern sich das machen lässt und sinnvoll ist. Für andere
> Zwecke werden nur Algorithmen abstrakt abgebildet (hier die Physik der
> Maschinentechnik und Mechanik) und dann alles sinnvoll gecoded.
> Entsprechend viel oder weniger wird in das Modell reingesteckt.

Das verstehe ich nicht ganz. Was meinst du mit für andere Zwecke 
abgebildet und was meknst dubmit sinnvoll coden? Sorry der Nachfragen.

Danke eurer Unterstützung. Es hilft mir sehr mich da gut zu 
positionieren.

von Melanie F. (melaniefrank)


Lesenswert?

Dr. Sommer schrieb:
> Melanie F. schrieb:
>> Wäre denn so ein Tool sinnvoll, der sauberen C++ Code gerneriert?
>
> Wenn du es schaffst ein Programm zu entwickeln das intelligent genug ist
> um guten C++ Code zu generieren kannst du dir den Nobel Preis holen, und
> danach kommt die technische Singularität. Nach heutigem Stand der
> Forschung ist das nicht möglich.

Okay verstehe, aber gäbe es so etwas ( beim anderen Institut entwickeln 
die anscheinend dran), wäre es denn nützlich oder sinnvoll ausser in der 
Industrie auch sinnvolm oder nur in meinem Fall?

von ~Mercedes~ (Gast)


Lesenswert?

@Melanie:

Ich würd vor dem Neuschreiben in C++ mir das Ganze
in UML ansehen.

Was macht der SIFT - Algorithmus eigendlich?
Wozu ist er da?
Ist der Algo ein Staatsgeheimnis, was sich keine anedre
mal ansehen könnte? ;-P

Melanie fragte:
> Was genau ist Rhapsody?

Ist quasi vereinfacht ein UML - Tool der Nachichtentechnik,
der Nachfolger von Telelogic "Tau".
Benutzt wird es zum Beispiel zum Protokolldesign.

mfg

von Melanie F. (melaniefrank)


Lesenswert?

~Mercedes~ schrieb:
> @Melanie:
>
> Ich würd vor dem Neuschreiben in C++ mir das Ganze
> in UML ansehen.
>
> Was macht der SIFT - Algorithmus eigendlich?
> Wozu ist er da?
> Ist der Algo ein Staatsgeheimnis, was sich keine anedre
> mal ansehen könnte? ;-P

kein Staatsgeheimnis. Sondern inder Bildverarbeitung ein bekannter 
Algorithmus zur Extraktion von lokalen Bildmerkmalen.


>
> Melanie fragte:
>> Was genau ist Rhapsody?
>
> Ist quasi vereinfacht ein UML - Tool der Nachichtentechnik,
> der Nachfolger von Telelogic "Tau".
> Benutzt wird es zum Beispiel zum Protokolldesign.
>
> mfg

von Dr. Sommer (Gast)


Lesenswert?

Melanie F. schrieb:
> wäre es denn nützlich oder sinnvoll ausser in der Industrie auch
> sinnvolm oder nur in meinem Fall?

Ich finde Code Generierung im Allgemeinen nicht so dolle, besonders wenn 
man beabsichtigt das Ergebnis manuell zu bearbeiten. Man müsste schauen 
wie gut das Tool letztlich ist. Dass so etwas immer eine Krücke ist 
sollte klar sein, automatisches Programmieren ist halt ein Wunschtraum.

von Dumdi D. (dumdidum)


Lesenswert?

Melanie F. schrieb:
> Danke eurer Unterstützung. Es hilft mir sehr mich da gut zu
> positionieren.

Du positionierst Dich gerade bei 2- bis 3+ wenn Du nicht bald anfaengst 
C++ Code selber zu schreiben.
Mit dem Betreuer in der jetzigen Phase das Thema zu diskutieren (ohne 
das aus der Bearbeitung neue Erkenntnisse gekommen sind) kann sehr sehr 
leicht nach hinten losgehen

von ~Mercedes~ (Gast)


Lesenswert?

Dumdi - Dum meinte:

> Mit dem Betreuer in der jetzigen Phase das Thema zu diskutieren (ohne
> das aus der Bearbeitung neue Erkenntnisse gekommen sind) kann sehr sehr
> leicht nach hinten losgehen

Objekterkennung von 3 D Punktwolken ;-P
@Melanie:

Gehe bitte noch mal in Dich:
Was unterscheidet den Code, den Du in Matlab erstellt
hast, von anderen Arbeiten im Internet?
Was will Dein Betreuer sonst von Dir?
Warum besteht er darauf, daß gerade Dein Matlab - Modell
"C++ - isiert" wedrden soll?

Ergo:
Was unterscheidet Dein Proggy, Deine Aufgabenstellung
von Anderen, deren C++ - Code im Netz steht??
Wo soll Dein Code verwendet werden? Im Computerspiel?
Oder beim Roboterarm? ;-P

mfg

von A. S. (Gast)


Lesenswert?

Melanie F. schrieb:
> . Es hilft mir sehr mich da gut zu positionieren.

Hast Du eigentlich inzwischen Mal versucht, deinen Matlab-Code und 
deinen Coder auf Lesbarkeit zu optimieren? Hast Du Deinen Betreuer Mal 
konkret befragt, was er bemängelt?

Wenn Du kein C++-Experte bist, aber dir beim Coder Hilfe holst und 
deinen Matlab-Code sinnvoll strukturiert (z.b. nicht a1...z99 als 
Symbole), dann ist der automatische Code besser als ein gefrickelter, 
und sinnvoller (da weiterhin auch Matlab) sowieso.

von A. S. (Gast)


Lesenswert?

OT: wir hatten hier einen Matlab-Code, dessen zentrale Funktion im 
embedded Gerät mit 100(!) Parametern aufgerufen wurde. Mehr als 90 davon 
typspezifische Konstanten, die auch in einer Struktur hatten gruppiert 
werden können... Aber nein, es wurden brav 100 Elemente in Code gehackt 
und auf den Stack gelegt.

von ~Mercedes~ (Gast)


Lesenswert?

Dum - Di meinte:

> Du positionierst Dich gerade bei 2- bis 3+ wenn Du nicht bald anfaengst
> C++ Code selber zu schreiben.

Hm.

Wenn ich Melanie wäre, würde ich jetzt die
von Mercedes oben angeführten Punkte klären.

Ich würde mir Quelltexte, die mein Prof geschrieben
hat beschaffen, um seine Metrik und seine Vorlieben
herausfinden.

Ich würde im Netz kursierende C++ Quellen studieren,
sie in UML einlesen und mit dem vom Matlab generierten
Code vergleichen zu können.
Dann würde ich die High - Heels und den Lederrock
mit der Vorzugsfarbe meines Profs anziehen.

Das heißt, den Matlab - Quelltext mit dem Gelernten
und der Metrik des Profs neu zu schreiben / zu refactorisieren!

Man muß sich vorstellen:
C++ - Quelltext im Stil des Prof. an den Prof. ;-D

mfg

von Dumdi D. (dumdidum)


Lesenswert?

~Mercedes~ schrieb:
> Wenn ich Melanie wäre, würde ich jetzt die
> von Mercedes oben angeführten Punkte klären.

Du sprichst von Dir in der 3ten Person? Schon doof wenn man bei mehreren 
Nicks den Ueberblick verliert, oder wie ist das zu verstehen?

von A. S. (Gast)


Lesenswert?

~Mercedes~ schrieb:
> Wenn ich Melanie wäre, würde ich jetzt die
> von Mercedes oben angeführten Punkte klären.

Aha... Wenigstens ist da keine Rede mehr von UML.

von ~Mercedes~ (Gast)


Lesenswert?

Dumdi meinte:

> Du sprichst von Dir in der 3ten Person? Schon doof wenn man bei mehreren
> Nicks den Ueberblick verliert, oder wie ist das zu verstehen?

Quatsch.
Ich hab mich nur in Melanies Lage versetzt,
was ich an ihrer Stelle machen würde.
Ich kann mich ja heute noch zurücklehnen
(bin 15 Jahre alt).
Aber in ein paar Jahren wird es mir ähnlich wie
Melanie gehen, das wurde mir bei dem Ganzen bewußt.

Also nix gegen Melanie oder euch Anderen! :-O

Achim meinte:

> Aha... Wenigstens ist da keine Rede mehr von UML.

Ja, UML ist scheiße (sorry).
Aber, gerade wenn man sich in gröeren, fremden Quellen
umsehen muß, erleichtert es den Überblick ungemein.
Man braucht UML ja nicht zu heiraten! ;-P

mfg

von A. S. (Gast)


Lesenswert?

~Mercedes~ schrieb:
> bin 15 Jahre alt

Respekt!

von N. N. (clancy688)


Lesenswert?

~Mercedes~ schrieb:
> Melanie fragte:
>> Was genau ist Rhapsody?
>
> Ist quasi vereinfacht ein UML - Tool der Nachichtentechnik,
> der Nachfolger von Telelogic "Tau".
> Benutzt wird es zum Beispiel zum Protokolldesign.
>
> mfg

Na ja, nicht "nur" UML. UML-Modellierungstools gibts viele. Ist halt ein 
weiteres Codegenerierungstool mit der UML als Input... Man modelliert 
seine Applikation in UML, implementiert einige Dinge händisch, andere 
modelliert man mit State- oder Flowcharts... und am Ende purzelt 
fertiger Code inklusive Framework raus.

Achim S. schrieb:
> OT: wir hatten hier einen Matlab-Code, dessen zentrale Funktion im
> embedded Gerät mit 100(!) Parametern aufgerufen wurde. Mehr als 90 davon
> typspezifische Konstanten, die auch in einer Struktur hatten gruppiert
> werden können... Aber nein, es wurden brav 100 Elemente in Code gehackt
> und auf den Stack gelegt.

Kommt mir bekannt vor. Wir bekamen mal Beschwerde von unserem Basis-SW 
Lieferanten dass unsere Software den Stack platzen lässt. Mit 
freundlichem Hinweis auf das verursachende Modul. Also mal reingeguckt 
was unsere Funktionsentwickler (in der Regel Thermodynamiker ohne 
"echte" Programmiererfahrung) da so gemacht haben.
Okay, das Modul war letztendlich eine gigantische C-Funktion von 10k 
Zeilen die so aus MATLAB rauspurzelt. Das Teil schmeißt schon 
zweihundert Zeilen lokale Variablen auf den Stack. Kurz überschlagen - 
ne, an der Stelle müsste es noch passen. Weitergeguckt... oh, da hat der 
Entwickler ein "größeres" Submodul als Funktionsaufruf implementiert. 
Wie viele lokale Variablen deklariert sich das denn? Oh, auch ein paar 
hundert Zeilen, okaaaay...

Melanie F. schrieb:
> Was wird sich da bei Autosar genau vwrändern?

Das aktuelle AUTOSAR ist ziemlich statisch. Ist halt so wenn man 
hauptsächlich auf uCs unterwegs ist. Aber mittlerweile geht der Trend in 
der Automobilindustrie zu Domain-Steuergeräten, Großrechner mit 
gewaltiger Rechenkraft. Irgendwo muss ja der Saft herkommen um die Flut 
an Fahrassistenz- und Entertainment-Daten zu verarbeiten.
AUTOSAR Adaptive ist damit einfach nur der Schritt hin zu 
mikroprozessorbasierten POSIX-Systemen, der Versuch Statik raus und 
Flexibilität in die Software reinzubringen. Weg von der alten 
verbindungsorientierten Denke hin zu Services. Und dazu gehört auch, 
dass der Kram dann in C++ implementiert wird, nicht mehr in C.

https://vector.com/congress/files/presentations/VeCo16_06_29Nov_Reithalle_Fuerst_BMW.pdf 
Folien 10 und 11~

von ~Mercedes~ (Gast)


Lesenswert?

LuRu meinte:

> Okay, das Modul war letztendlich eine gigantische C-Funktion von 10k
> Zeilen die so aus MATLAB rauspurzelt. Das Teil schmeißt schon
> zweihundert Zeilen lokale Variablen auf den Stack.

Genau deshalb muß Melanie sich ja auch die Gewohnheiten
ihres Profs anschauen!

Wie verwaltet er seine Variablen / Konstanten?
Als Private in den Klassen, oder in ner zentralen Struktur
wo dann mit Referenzen zugegeriffen wird?

Benutzt er lieber Referenzen oder steht er auf Zeiger,
und so weiter und sofort!

Melanie braucht ne 1++ ( oder ++1 )  ;--D

mfg

von Cem B. (bassos)


Lesenswert?

Lu R. schrieb:
> ~Mercedes~ schrieb:
>> Melanie fragte:
>>> Was genau ist Rhapsody?
>>
>> Ist quasi vereinfacht ein UML - Tool der Nachichtentechnik,
>> der Nachfolger von Telelogic "Tau".
>> Benutzt wird es zum Beispiel zum Protokolldesign.
>>
>> mfg
>
> Na ja, nicht "nur" UML. UML-Modellierungstools gibts viele. Ist halt ein
> weiteres Codegenerierungstool mit der UML als Input... Man modelliert
> seine Applikation in UML, implementiert einige Dinge händisch, andere
> modelliert man mit State- oder Flowcharts... und am Ende purzelt
> fertiger Code inklusive Framework raus.
>
> Achim S. schrieb:
>> OT: wir hatten hier einen Matlab-Code, dessen zentrale Funktion im
>> embedded Gerät mit 100(!) Parametern aufgerufen wurde. Mehr als 90 davon
>> typspezifische Konstanten, die auch in einer Struktur hatten gruppiert
>> werden können... Aber nein, es wurden brav 100 Elemente in Code gehackt
>> und auf den Stack gelegt.
>
> Kommt mir bekannt vor. Wir bekamen mal Beschwerde von unserem Basis-SW
> Lieferanten dass unsere Software den Stack platzen lässt. Mit
> freundlichem Hinweis auf das verursachende Modul. Also mal reingeguckt
> was unsere Funktionsentwickler (in der Regel Thermodynamiker ohne
> "echte" Programmiererfahrung) da so gemacht haben.
> Okay, das Modul war letztendlich eine gigantische C-Funktion von 10k
> Zeilen die so aus MATLAB rauspurzelt. Das Teil schmeißt schon
> zweihundert Zeilen lokale Variablen auf den Stack. Kurz überschlagen -
> ne, an der Stelle müsste es noch passen. Weitergeguckt... oh, da hat der
> Entwickler ein "größeres" Submodul als Funktionsaufruf implementiert.
> Wie viele lokale Variablen deklariert sich das denn? Oh, auch ein paar
> hundert Zeilen, okaaaay...
>

Ich glaube das ist genau das wo doch so ein übersichtlicher 
Codegenerator genutzt hätte, oder?


> Melanie F. schrieb:
>> Was wird sich da bei Autosar genau vwrändern?
>
> Das aktuelle AUTOSAR ist ziemlich statisch. Ist halt so wenn man
> hauptsächlich auf uCs unterwegs ist. Aber mittlerweile geht der Trend in
> der Automobilindustrie zu Domain-Steuergeräten, Großrechner mit
> gewaltiger Rechenkraft. Irgendwo muss ja der Saft herkommen um die Flut
> an Fahrassistenz- und Entertainment-Daten zu verarbeiten.
> AUTOSAR Adaptive ist damit einfach nur der Schritt hin zu
> mikroprozessorbasierten POSIX-Systemen, der Versuch Statik raus und
> Flexibilität in die Software reinzubringen. Weg von der alten
> verbindungsorientierten Denke hin zu Services. Und dazu gehört auch,
> dass der Kram dann in C++ implementiert wird, nicht mehr in C.


Ich werde mir das genauer anschauen. In unserem Institut versuchen wir 
gerade so einen Matlab nach C++ Generator zu schreiben. Die Typsysteme 
beider Sprachen passen nicht wirklich. Wäre so etwas für eure Arbeit 
nützlich ?


>
> 
https://vector.com/congress/files/presentations/VeCo16_06_29Nov_Reithalle_Fuerst_BMW.pdf
> Folien 10 und 11~

Grüsse
Cem

von A. S. (Gast)


Lesenswert?

Cem B. schrieb:
> Ich glaube das ist genau das wo doch so ein übersichtlicher
> Codegenerator genutzt hätte, oder?

Nein. Das Problem hierbei ist der Matlab-Code. Und genauso wenig, wie 
ein Generator aus schlechtem Spaghetti-C++Code einen strukturierten 
C++-Code machen kann, kann er es aus Spaghetti-Matlab-Code

von ~Mercedes~ (Gast)


Lesenswert?

Achim meinte:

> Nein. Das Problem hierbei ist der Matlab-Code. Und genauso wenig, wie
> ein Generator aus schlechtem Spaghetti-C++Code einen strukturierten
> C++-Code machen kann, kann er es aus Spaghetti-Matlab-Code

Hat Matlab eigendlich vernünftige Klassen / Objakte
für Matritzen und für nen Baum zur Verfügung, oder
muß Mela das auch alles aus Einzelbefehlen zusammensetzen?

mfg

von Jan K. (jan_k)


Lesenswert?

Matlab ist eine Abkürzung von matrixlaboratory. Alles ist da eine Matrix 
;)
Und ja, man kann auch objektorientiert programmieren und sehr viele 
Toolboxen sind mittlerweile klassenbasiert.

Mal ernsthaft, setz dich doch mal erst damit auseinander, bevor du hier 
von UML und co redest...

Man kann den Matlab Coder bzw. Embedded Coder relativ weitreichend 
konfigurieren und normalerweise gibt es auch nicht die oben 
angesprochenen Variablen a1...z99 oder so.
Aber die Qualität des generierten Codes hängt eben auch vom Matlab Code 
ab. Auch in Matlab kann man in Funktionen oder Klassen kapseln und 
sollte das auch tun. Generierter Code wird normalerweise nicht mehr 
editiert.
Ausnahmen sind vllt, wenn nicht ein komplettes Projekt sondern einzelne 
Teile kompiliert werden. Die Funktionen selber werden nicht mehr 
angefasst, du kannst sie aber selbst integrieren.

Wenn du die Funktionen in C++ selbst baust, kannst du diesen Code auch 
in Matlab einbinden. Mit nur geringem Aufwand. Damit kannst du super 
validieren, dass Matlab und c++ das selbe macht.

von ~Mercedes~ (Gast)


Lesenswert?

Jan meinte:

> Mal ernsthaft, setz dich doch mal erst damit auseinander, bevor du hier
> von UML und co redest...

Ich bin ja gerade dabei. ;-P

Läßt Matlab es zu, das man z.B. eine mathematische Gleichung
oder Formel einzugeben, und sich dann nur von der Formel C++
Quelle ausgeben zu lassen, etwa für eine Library?
Oder noch besser von einem in Matlab geschriebenen AVL Baum?

mfg

von Cem B. (bassos)


Lesenswert?

Achim S. schrieb:
> Cem B. schrieb:
>> Ich glaube das ist genau das wo doch so ein übersichtlicher
>> Codegenerator genutzt hätte, oder?
>
> Nein. Das Problem hierbei ist der Matlab-Code. Und genauso wenig, wie
> ein Generator aus schlechtem Spaghetti-C++Code einen strukturierten
> C++-Code machen kann, kann er es aus Spaghetti-Matlab-Code

Naja der Matlab-Coder kann aus den Spaghetti-Matlab Code noch 
schlechteren C++ Code machen. Wie gesagt der Matlab Coder produziert ca. 
10 × mal mehr C++ Codezeilen als der ursprüngliche Matlab-Code. Melanie 
kann ja genau deshalb den produzierten C++ Code niht nutzen.

von Cem B. (bassos)


Lesenswert?

Jan K. schrieb:
> Matlab ist eine Abkürzung von matrixlaboratory. Alles ist da eine Matrix

Alles ist ein homogener Container - aka multidimensionales Array ... 
z.B. a = rand (3, 4, 2).
Matrix ist ein spezialfall.

> ;)
> Und ja, man kann auch objektorientiert programmieren und sehr viele
> Toolboxen sind mittlerweile klassenbasiert.
>
> Mal ernsthaft, setz dich doch mal erst damit auseinander, bevor du hier
> von UML und co redest...
>
> Man kann den Matlab Coder bzw. Embedded Coder relativ weitreichend
> konfigurieren und normalerweise gibt es auch nicht die oben
> angesprochenen Variablen a1...z99 oder so.
> Aber die Qualität des generierten Codes hängt eben auch vom Matlab Code
> ab. Auch in Matlab kann man in Funktionen oder Klassen kapseln und
> sollte das auch tun. Generierter Code wird normalerweise nicht mehr
> editiert.
> Ausnahmen sind vllt, wenn nicht ein komplettes Projekt sondern einzelne
> Teile kompiliert werden. Die Funktionen selber werden nicht mehr
> angefasst, du kannst sie aber selbst integrieren.

Jan nutzt du den Matlab-Coder professionell? Wenn ja habt ihr ein 
Workflow, wo die C++ Ausgabe an weitere Teams oder Mitarbeiter 
weitergegebwn wird?

>
> Wenn du die Funktionen in C++ selbst baust, kannst du diesen Code auch
> in Matlab einbinden. Mit nur geringem Aufwand. Damit kannst du super
> validieren, dass Matlab und c++ das selbe macht.

von Cem B. (bassos)


Lesenswert?

~Mercedes~ schrieb:
> Jan meinte:
>
>> Mal ernsthaft, setz dich doch mal erst damit auseinander, bevor du hier
>> von UML und co redest...
>
> Ich bin ja gerade dabei. ;-P
>
> Läßt Matlab es zu, das man z.B. eine mathematische Gleichung
> oder Formel einzugeben, und sich dann nur von der Formel C++
> Quelle ausgeben zu lassen, etwa für eine Library?

Matlab ist ein Numerik und kein Algebra Tool. Das bedeutet du würdest 
numerische Algorithmen für dein mathematisches Problem in Matlab 
schreiben und ausführen. Also deine Matlab Algorithmen werden nach C++ 
übersetzt.

Es gibt andere Tools wie Maple oder Toolboxen von Matlab die es erlauben 
Gleichungen zu vereinfachen.


> Oder noch besser von einem in Matlab geschriebenen AVL Baum?
>
> mfg

von A. S. (Gast)


Lesenswert?

Cem B. schrieb:
> Wie gesagt der Matlab Coder produziert ca.
> 10 × mal mehr C++ Codezeilen als der ursprüngliche Matlab-Code. Melanie
> kann ja genau deshalb den produzierten C++ Code niht nutzen.

Der 10-fach höhere Code kommt doch daher, dass eine einzeilige 
Rechenoperation (beispielsweise die Multiplikation zweiter Matritzen) in 
viele C-Zeilen umgesetzt werden muss.

Das ist nicht das ursächliche Problem der TO, da sie es weder von Hand 
besser kann NOCH der Betreuer die Matritzenrechnung optimieren will.

von Dr. Sommer (Gast)


Lesenswert?

Achim S. schrieb:
> Der 10-fach höhere Code kommt doch daher, dass eine einzeilige
> Rechenoperation (beispielsweise die Multiplikation zweiter Matritzen) in
> viele C-Zeilen umgesetzt werden muss.

Aber warum wird nicht einfach 1 Funktion zur Matrix Multiplikation 
implementiert (oder aus einer Library wie "Eigen" genommen), und dann 
aufgerufen? Ein Aufruf ist auch nur eine Zeile.

von Cem B. (bassos)


Lesenswert?

Achim S. schrieb:
> Cem B. schrieb:
>> Wie gesagt der Matlab Coder produziert ca.
>> 10 × mal mehr C++ Codezeilen als der ursprüngliche Matlab-Code. Melanie
>> kann ja genau deshalb den produzierten C++ Code niht nutzen.
>
> Der 10-fach höhere Code kommt doch daher, dass eine einzeilige
> Rechenoperation (beispielsweise die Multiplikation zweiter Matritzen) in
> viele C-Zeilen umgesetzt werden muss.
>
> Das ist nicht das ursächliche Problem der TO, da sie es weder von Hand
> besser kann NOCH der Betreuer die Matritzenrechnung optimieren will.

Das stimmt der Betreuer möchte die Matrizenrechnung nicht weiter 
optimieren. Aber wenn du dir mal eine C++ Ausgabe von Matlab-Coder 
angesehen hast, dann siehst du dass eine Unmenge an neuen Variablen 
dazugekommen sind, viele der  Matlab-Funktionen nicht wiederzuerkennen 
sind, die schöne Matrix-Schreibweise in skalaren Code umgewandelt worden 
ist. Das hat den Nachteil, dass der C++ Code vollkommen unübersichtlich 
ist.

Melanies Betreuer, so verstehe ich das, möchte zu einem späteren 
Zeitpunkt eine C++ Funktion durch eine andere ersetzen oder editieren. 
Womöglich soll der C++ Code in ein bestehenden C++ Framework eingebettet 
werden. Genau aus diesem Grund sind wir ja auch gerade dabei so ein Tool 
zu entwickeln.

von Cem B. (bassos)


Lesenswert?

Dr. Sommer schrieb:
> Achim S. schrieb:
>> Der 10-fach höhere Code kommt doch daher, dass eine einzeilige
>> Rechenoperation (beispielsweise die Multiplikation zweiter Matritzen) in
>> viele C-Zeilen umgesetzt werden muss.
>
> Aber warum wird nicht einfach 1 Funktion zur Matrix Multiplikation
> implementiert (oder aus einer Library wie "Eigen" genommen), und dann
> aufgerufen? Ein Aufruf ist auch nur eine Zeile.

Naja so arbeitet eben der Matlab-Coder nicht. Er übersetzt eine Zeile 
wie z.B.
1
 A = rand(3,4); B = A * A';
 nicht einfach in eine C++ Zeile sondern macht daraus mehr als 50 Zeilen 
C++ Code mit mehr als zwei Variablen.

Intelligent wäre, wenn er daraus eine C++ Zeile generiert und z.B. dafür 
die Eigen-Bibliothek einbindet und nutzt. Und genau daran arbeiten wir 
gerade.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Cem B. schrieb:
> Er übersetzt eine Zeile wie z.B.
>
>  A = rand(3,4); B = A * A';
>
> nicht einfach in eine C++ Zeile sondern macht daraus mehr als 50
> Zeilen C++ Code mit mehr als zwei Variablen.

Heißt das, dass 10 Matrixmultiplikationen in einem Matlab-Programm ca.
10·50=500 C++-Zeilen ergeben?

Wie sieht es bei komplexeren Algorithmen aus, also bspw. bei der
Berechnung der Inversen oder der Eigenwerte einer Matrix? Wird dafür
ebenfalls "flacher" C++-Code (ohne die Verwendung von Funktionen)
generiert? Das müsste ja dann den C++-Code regelrecht explodieren
lassen.

von Cem B. (bassos)


Lesenswert?

Yalu X. schrieb:
> Cem B. schrieb:
>> Er übersetzt eine Zeile wie z.B.
>>
>>  A = rand(3,4); B = A * A';
>>
>> nicht einfach in eine C++ Zeile sondern macht daraus mehr als 50
>> Zeilen C++ Code mit mehr als zwei Variablen.
>
> Heißt das, dass 10 Matrixmultiplikationen in einem Matlab-Programm ca.
> 10·50=500 C++-Zeilen ergeben?
>

Nein so wieder nicht. Die Matrixmultiplikation wird möglicherweise nur 
einmal mit For-Schleifen implementiert und dann entsprechend aufgerufen. 
Ich bin mir aber nicht sicher und werde das nochmal recherchieren.

> Wie sieht es bei komplexeren Algorithmen aus, also bspw. bei der
> Berechnung der Inversen oder der Eigenwerte einer Matrix? Wird dafür
> ebenfalls "flacher" C++-Code (ohne die Verwendung von Funktionen)
> generiert? Das müsste ja dann den C++-Code regelrecht explodieren
> lassen.

Ja genau.
Ich schau mal, dass ich euch ein Beispielprogramm für beispielsweise x1 
= A\b1; x2 = A\b2; (löst die Gleichungssysteme für Ax1 = b1, Ax2 = b2.) 
gebe.  Dann sieht man ja ob mehrere C- bzw. C++-Funktionen generiert.

von ~Mercedes~ (Gast)


Lesenswert?

Tja, dann sieht es fast danach aus, das der Prof
Melanie ärgern will.
Denn er müßte ja wissen, wie schwierig die ganze Sache ist.

Vielleicht erwartet er von ihr die Aussage
"es geht nicht!"?

mfg

von A. S. (Gast)


Lesenswert?

~Mercedes~ schrieb:
> Tja, dann sieht es fast danach aus, das der Prof
> Melanie ärgern will.
> Denn er müßte ja wissen, wie schwierig die ganze Sache ist.

Es gibt doch von Melanie überhaupt keine Info, was der Betreuer 
überhaupt anmeckert oder wie ihr Code (Matlab und C++) aussieht, also ob 
es an ihr oder an Matlab liegt.

Sie hat bis auf regelmäßige "ich verstehe" nichts mehr beigetragen. Da 
ist es sehr gewagt, dem Professor Bosheit zu unterstellen.

von Nop (Gast)


Lesenswert?

Cem B. schrieb:

> Naja so arbeitet eben der Matlab-Coder nicht. Er übersetzt eine Zeile
> wie z.B. A = rand(3,4); B = A * A';  nicht einfach in eine C++ Zeile
> sondern macht daraus mehr als 50 Zeilen
> C++ Code mit mehr als zwei Variablen.

Wieso macht der das eigentlich nicht mit Templates, wenn man schon C++ 
zur Verfügung hat?

von ~Mercedes~ (Gast)


Lesenswert?

Achim meinte:

> Es gibt doch von Melanie überhaupt keine Info, was der Betreuer
> überhaupt anmeckert oder wie ihr Code (Matlab und C++) aussieht, also ob
> es an ihr oder an Matlab liegt.

> Sie hat bis auf regelmäßige "ich verstehe" nichts mehr beigetragen. Da
> ist es sehr gewagt, dem Professor Bosheit zu unterstellen.

Ich hab doch dem Prof keine Bosheit unterstellt! ;--O
Ich würde es auch nicht wagen!!

Vielleicht ist Melanie aber so gut, das der Prof ihr einen
kleines trap eingebaut hat?
Oder möchte er Melanie zum formatierten Matlab - programmieren
anregen?

Wir weden es wohl nicht erfahren...

mfg

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.