|
|
Excel -> Matlab, Gleichungssystem lösen |
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 10:36
Titel: Excel -> Matlab, Gleichungssystem lösen
|
|
Hallo,
ich habe ein spezielles Problem in Excel, bei welchem ich ein Gleichungssystem in VBA erzeuge und ausgebe. Es ist im Grunde zwar linear, aber die Gleichungen haben eine "unschöne" Form. D.h. es wäre ein großer Aufwand das ganze umzuformen und mittels Koeffizientenmatrix und Störvektor zu lösen.
Deswegen wollte ich mal den Spreadsheet Link von Matlab nutzen und das GLS mit Matlab lösen. Leider finde ich kaum brauchbare Dokumentation darüber. Ich kann jetzt z.B. die Gleichungen als Matrix an Matlab übergeben, allerdings werden diese als String erkannt und ich kann folglich keine Funktion darauf anwenden.
Weiß jemand, ob es eine entsprechende Seite oder Literatur gibt, die genau dieses Problem behandelt oder kann mir vielleicht so helfen?
Vielen Dank schon einmal für Antworten!
|
|
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 05.07.2015, 11:10
Titel:
|
|
ohne beispiel daten und code ist es sehr schwer vorschläge zu machen.
es gibt zb die funktion
str2func
oder auch
matlabFunction
. für konkretere vorschläge bräuche man dann schon auch beispiel. sihe am besten auch den thread aus meiner signatur dazu
_________________
richtig Fragen
|
|
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 11:40
Titel:
|
|
Die originalen Gleichungen haben dann z.B. die Form:
Zu Testzwecken verwende ich aber die Excel-Datei im Anhang (eventuell geht hier der Verweis auf das Excel Add-In von Matlab verloren, falls das jemand auf seinem PC öffnen möchte). Der Code steht im Modul1.
D.h. ich versuche mich mal am System
a+b+c==5
a-5-c==0
6*b+3.5*a==2.32
Dieses kann ich mit Mlputmatrix() an Matlab übergeben, aber wie gesagt nur als String. In Matlab stehen die Gleichungen dann in der Matrix var und die Variablen in sys.
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 05.07.2015, 11:44
Titel:
|
|
hmm also lauffähige beispiele sind immer besser. damit man damit arbeiten kann. sihe am besten auch den thread aus meiner signatur.
so kann man zb dein "originalen Gleichungen" lösen.
_________________
richtig Fragen
|
|
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 12:33
Titel:
|
|
Ich habe leider nichts lauffähiges
Im Anhang habe ich nochmal 2 Bilder um mein (vorläufig erstes) Problem zu beschreiben.
Beim ersten Bild habe ich die Gleichungen direkt in die Konsole geschrieben und die Lösung funktioniert problemlos. Beim zweiten Bild schreibe ich die Gleichung über Excel in den Workspace von Matlab. Das sind dann aber offenbar Strings mit denen Matlab nichts anfangen kann.
Beschreibung: |
|
Download |
Dateiname: |
2.jpg |
Dateigröße: |
44.88 KB |
Heruntergeladen: |
420 mal |
Beschreibung: |
|
Download |
Dateiname: |
1.jpg |
Dateigröße: |
22.92 KB |
Heruntergeladen: |
497 mal |
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 05.07.2015, 12:42
Titel:
|
|
dann musst du wohl noch ein bisschen nachbearbeitung bei sys machen. wenn du die variable in matlab hast sollte es kein problem sein code zu posten der die variable erstellt. oder von mir aus auch die variable hochzuladen.
_________________
richtig Fragen
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.07.2015, 12:55
Titel:
|
|
Hallo,
warum stellst du denn den Code als Screenshot und nicht als Code zur Verfügung? Damit man das ausführen kann, was du zeigst, muss man sich mühsam den Code zusammenstückeln.
Falls sys kein Cell Array von Strings ist wie in meinem Beispiel, müsstest du sagen, was es ist.
Grüße,
Harald
|
|
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 13:38
Titel:
|
|
Ok, mit sys({:}) funktioniert es. Sys ist vom Typ "Cell", von Hand eingegeben (also nicht mit Strings) ist die Matrix vom Typ "Sym", da liegt das Problem.
Was genau macht {:}? Habe nicht viel Ahnung von Matlab
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 05.07.2015, 13:42
Titel:
|
|
|
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 14:11
Titel:
|
|
Ok, vielen Dank!
Jetzt habe ich die Lösung im Vektor Loesung, welcher vom Typ "Struct" ist. Wie bekomme ich jetzt die Lösung zurück in den Excel Workspace?
In VBA habe ich zum Lesen ja die Funktionen MLGetMatrix und MLGetVar zur Verfügung, aber wie kann ich diese auf "Loesung" anwenden, bzw. was muss ich mit "Loesung" in Matlab noch machen, damit die Werte übergeben werden?
Folgendes liefert z.B. "NONEXIST!" zurück:
Wenn ich das noch hinbekomme, wäre ich wunschlos glücklich
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.07.2015, 15:20
Titel:
|
|
Hallo,
es gibt ja auch keine Variable lsg.a. Da wäre es doch naheliegend, lsg.a in eine Variable zu schreiben und diese dann zurückzuholen?
Grüße,
Harald
|
|
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 16:23
Titel:
|
|
Ok, ich bin jetzt fast schon am Ziel.
Folgender VBA-Code gibt mir die Lösung in das Tabellenblatt aus:
Jetzt sollte das ganze auch dynamisch funktionieren, d.h ich möchte auf die Elemente der Structure "lsg" in der Form "lsg(i)" zugreifen können und dabei
1) den Feldnamen (im Beispiel für lsg.a -> Name = "a") und
2) den Wert der Variablen zurückgegeben bekommen.
Könntet ihr mir hierbei noch helfen?
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 05.07.2015, 16:31
Titel:
|
|
kenn mich damit nicht aus aber kannst du nicht ne matlab funktion schreiben die das macht? for schleife und
fieldnames
_________________
richtig Fragen
|
|
|
kaktus018 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2015, 16:46
Titel:
|
|
Gibt es in Matlab keinen direkten Weg per Index auf die einzelnen Felder zuzugreifen?
Z.B.
lsg.a hat den Wert 1.5
lsg(1) gibt "1.5"
lsg(1).fieldname gibt "a"
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.07.2015, 17:14
Titel:
|
|
Hallo,
eine Möglichkeit wäre eine MATLAB-seitige Umwandlung in ein Cell Array mit
struct2cell
Grüße,
Harald
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|