|
|
Variable von Wertebereich anderer Variable abhängig machen |
|
Backfisch |
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2015, 12:27
Titel: Variable von Wertebereich anderer Variable abhängig machen
|
|
|
|
|
Hallo zusammen,
ich befinde mich noch immer auf dem (noch jungen) Weg der Erleuchtung zu einem besseren Matlabprogrammierer und bin dabei auf die nächste unüberwindbare Hürde gestoßen. Durch die Suchefunktion konnte ich im Forum und auch per Google leider kein anschauliches Beispiel für mein Problem finden.
Es geht darum, dass ich eine Grafik plotten möchte, bei der sich eine Variable abhängig von den Werten einer anderen ändert. Ich habe versucht, dies über eine if-Schleife zu lösen, wobei ich mir nicht mal sicher bin, ob das der richtige Weg ist. Der Code sieht folgendermaßen aus und gibt auch einen Plot aus:
Allerdings sollten sich die angezeigten Linien zu den in der if-Schleife angegebenen x-Werten aufgrund der neuen Werte für D relativ schlagartig ändern, was sie nicht tun.
Ich hoffe, die Frage ist gut verständlich und nicht zu simpel. Für Tipps wäre ich sehr dankbar!
Viele Grüße,
Backfisch
|
|
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 24.03.2015, 13:45
Titel:
|
|
x ist bei dir ein vektor und keine einzelne zahl. ich denke also nicht das der angegebene code das macht was du willst. das kann man schnell mit dem debugger überprüfen. bei der benutzung von length ist darauf zu achten das immer dei größte dimension ausgegeben wird. das spiel bei dir keine rolle aber kann zu problemem bei anderen dingen führen. ich würde immer size mit entsprechender dimensionsangabe benutzen. außerdem denke ich das man deine forschleifen auch vektorisieren kann.
Zitat: |
wobei ich mir nicht mal sicher bin, ob das der richtige Weg ist. |
ohne genau zu wissen was du als egebniss haben willst ist das schwer zu entscheiden.
meinst du sowas?
_________________
richtig Fragen
|
|
|
Backfisch |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.03.2015, 14:36
Titel:
|
|
Hallo Winkow,
erstmal danke für die schnelle Antwort! Der Vorschlag von dir ist genau das, was ich meinte. D soll bei bestimmten Wertebereichen von x einen bestimmten Wert annehmen. Mein Problem ist nun, dass sich in Zeile 24 ("c(index_x, index_t) = C0*(1-x(index_x)/L) + total;")
der Fehler "Subscripted assignment dimension mismatch." eingeschlichen hat. Was habe ich mir darunter vorzustellen? Ich konnte zwar recherchieren, das vermutlich mehr Werte eingespeichert werden sollen, als im Array vorhanden sind, aber wo der Fehler genau liegt, weiß ich leider nicht. Auch der Debugger hat mir dort nicht weitergeholfen. Für Ideen wäre ich sehr dankbar und hoffe, dass die Fragen nicht zu aufdringlich sind.
Viele Grüße,
Backfisch
|
|
|
Knygs |
Forum-Fortgeschrittener
|
|
Beiträge: 58
|
|
|
|
Anmeldedatum: 26.03.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b, 2017a, 2021a
|
|
|
|
|
|
Verfasst am: 27.03.2015, 14:46
Titel:
|
|
|
|
|
Hi Backfisch,
hier mal meine Lösung.
Ich glaube, du willst beim Durchlaufen der Schleife immer beim entsprechenden x ein passendes D haben.
mit
kann das aber nicht funktionieren. Du frägst hier ab, ob x kleiner gleich einem Wert ist und innerhalb der Abfrage, in die Matlab nur springt, wenn es wahr ist, frägst du noch einmal ab ob x größer als der zuvor abgefragte Wert ist. Das ist ein Widerspruch und kann gar nicht funktionieren. Wenn dann müsstest du es noch mit elseif machen, aber dann hast du dadurch, dass x ein Vektor ist trotzdem nicht wirklich ein klares Ergebnis, da alle Werte in x vorkommen, du aber nur ein D hast.
Probiers mal damit. Da spanne ich einen Vektor D enstprechend deinem Vektor x auf und nehme in der Schleife dann genau wie bei x die einzelnen Elemente in D zum Berechnen her.
[/quote]
der "Subscripted assignment dimension mismatch" von oben kommt dadurch zustande, dass du nun für D einen Vektor hast und deswegen in der Berechnung auch wieder einen Vektor bekommst, obwohl du nur einen Skalar brauchst. d.h. du musst, wie ich oben bereits beschrieben habe, genauso wie bei x(index_x) in der schleife auch D(index_x) benutzen.
vg
Edit: wobei Winkow das Aufspannen von D deutlich eleganter macht als ich ;-)
|
|
|
Backfisch |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.03.2015, 12:49
Titel:
|
|
Hallo Knygs,
vielen Dank für deine Antwort! Ich habe deinen Code mal übernommen und im Prinzip ist es genau das, was ich brauchte . Ich schaue, dass ich das, was du geschrieben hast, noch verstehe. Danach wird noch etwas Feintuning meinerseits nötig sein, bis alles passt, aber das bekomme ich hoffentlich alleine hin .
Viele Grüße,
Backfisch
PS: Das Forum ist wirklich der Hammer!
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 30.03.2015, 15:31
Titel:
|
|
man kann die innere schleife auch sehr leicht ersetzen
ich bin mir fast sicher das man die äußeren auch ersetzen kann. hab aber grade keine zeit mehr
_________________
richtig Fragen
|
|
|
Backfisch |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.03.2015, 11:32
Titel:
|
|
Hallo Winkow,
vielen Dank für deine Optimierung des Codes! Jetzt muss ich zwar wieder neue Befehle nachschlagen, aber das kann mir nur von Nutzen sein . Jede Schleife weniger kommt mir auf jeden Fall entgegen.
Viele Grüße,
Backfisch
|
|
|
Backfisch |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.04.2015, 13:53
Titel:
|
|
|
|
|
Hallo Leute,
ich muss das Thema leider nochmal öffnen, da sich etwas Neues ergeben hat.
Jetzt funktioniert zwar der Code, doch es hat sich herausgestellt, dass die Hauptformel nicht ganz richtig ist. Bei
muss das
eigentlich als Faktor vor der Summenfunktion stehen und nicht innerhalb davon. Ich habe erstmal versucht, den entsprechenden Teil einfach vor die Summe zu ziehen, wonach sich Matlab wieder mal mit "Subscripted Assignment Mismatch" gemeldet hat. Ihr hattet mir den Grund dieses Fehlers ja schon genannt, doch ich kann beim besten Willen nicht entdecken, wo der Wurm drin ist. Zusätzlich stelle ich mir gerade die Frage, ob das Summenzeichen überhaupt notwendig ist, da es sich danach ja um ein Produkt handelt, in dem n sowieso schon über den Code
zugewiesen wird. Vielleicht kann mir jemand nochmal erklären, wann ich Punkte vor mathematische Operatoren setzten muss, da die Matlabhilfe da für mich keine Klarheit schafft. Sorry, falls ich nerve, doch so kurz vor dem Ende nicht weiterzukommen macht mich fertig .
Viele Grüße,
Backfisch
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 01.04.2015, 14:26
Titel:
|
|
Zitat: |
vielleicht kann mir jemand nochmal erklären, wann ich Punkte vor mathematische Operatoren setzten muss, da die Matlabhilfe da für mich keine Klarheit schafft. |
aus der matlab doc:
Zitat: |
C = A.*B multiplies arrays A and B element by element and returns the result in C. |
was genau daran ist nicht ganz klar ?
Zitat: |
Ich habe erstmal versucht, den entsprechenden Teil einfach vor die Summe zu ziehen, wonach sich Matlab wieder mal mit "Subscripted Assignment Mismatch" gemeldet hat. |
ja du versuchst ja auch einem ein element eintrag ein 200 elemente vektor zuzusweisen. das geht natürlich nicht.
wie du das machen musst kann ich dir nicht sagen da sich die berechnun natürlich dann total von der obrigen unterscheidet. da müsste ich raten.
welches n willst du denn mit der summe über 200 n multiplizieren? das macht keinen sinn auf den ersten blick
_________________
richtig Fragen
|
|
|
Backfisch |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.04.2015, 12:35
Titel:
|
|
Hallo Winkow,
erstmal vielen Dank, dass du dich noch meinen Fragen stellst . An der Hilfe zu den Punkten vor den Operatoren verstehe ich nicht, wie sich die Aktion von einem Operator ohne Punkt unterscheidet. Wird beim Operator ohne Punkt nur der letzte, bzw. nur ein Wert ausgegeben/gespeichert? Dann wäre die Frage beantwortet . Zu der Formel lade ich gleich am besten ein Foto hoch, da ich die mit dem Formeleditor Erstellte hier nicht einfügen kann. Dann sieht man auf einen Blick, wie die Formel eigentlich sein sollte.
Viele Grüße,
Backfisch
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 07.04.2015, 12:45
Titel:
|
|
Backfisch hat Folgendes geschrieben: |
Wird beim Operator ohne Punkt nur der letzte, bzw. nur ein Wert ausgegeben/gespeichert? |
das eine ist times das andere mtimes
Zitat: |
C = A*B is the matrix product of A and B. If A is an m-by-p and B is a p-by-n matrix, then C is an m-by-n matrix defined by... |
wenn du unter times in der doc guckst ist unten unter see also mtimes
_________________
richtig Fragen
|
|
|
Backfisch |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 28.01.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2015, 10:31
Titel:
|
|
Hallo Winkow,
danke für den Hinweis. Ich werde mich wohl erst nochmal eingehend mit Matrizenrechnung beschäftigen müssen, bevor ich eine Lösung zum Thema finde. Deine Tipps werden dabei auf jeden Fall sehr hilfreich sein, danke!
Ich schließe das Thema also vorerst und wende mich nochmal vertrauensvoll ans Forum, wenn sich was neues ergibt .
Viele Grüße,
Backfisch
|
|
|
|
|
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 - 2025
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.
|
|