WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleichung mit 6 Variablen lösen (Intervalle für Lösungsra

 

Christian11
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2014, 18:14     Titel: Gleichung mit 6 Variablen lösen (Intervalle für Lösungsra
  Antworten mit Zitat      
Hallo,
ich möchte eine Gleichung in matlab lösen und mir als Ergebnis den möglichen Lösungsraum/Lösungsintervall (es gibt ja viele unterschiedliche Kombinationen diese Gleichung zu lösen) für alle Variablen ausgeben lassen.

Wie würde das z.B. bei folgender Gleichung gehen?

60=(a*b)/(c+d+e+f)

Ich wäre wirklich super dankbar, wenn mir jmd. helfen kann!!!
Christian
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.05.2014, 21:33     Titel:
  Antworten mit Zitat      
Hallo,

du kannst die Gleichung nach einer Variable auflösen:

Code:
syms a b c d e f
fsol = solve((a*b)/(c+d+e+f) - 60, f)


Falls das nicht das ist, was du dir vorgestellt hast, bitte eine genauere Beschreibung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2014, 20:50     Titel:
  Antworten mit Zitat      
Hey,
vielen Dank für deine schnelle Antwort. Ist echt stark!!!

Mit fsolve kann ich jedoch nur eine symbolische Umstellung der Gleichung vornehmen. Ich suche eher nach einer graphischen Darstellung der Lösungsmöglichkeiten.

Ich versuche es nochmal mit einem anderen Bsp. Wenn man sich die Gleichung
60=a+b
anschaut, dann gibt es dafür auch unendlich viele Lösungen. Man kann diese Lösungen aber durch eine Funktion mit bspw. a auf der Y-Achse und b auf der X-Achse graphisch darstellen. Das würde mir als Ergebnis sehr gut helfen.

Für die Gleichung 60=(a*b)/(c+d+e+f) kommen jedoch einige Dimensionen mehr hinzu. Nun die Frage, ob man sich dafür trotzdem eine Funktion plotten lassen kann?

Vielen Dank nochmal für eine kurze Hilfe.
Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.05.2014, 21:20     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Für die Gleichung 60=(a*b)/(c+d+e+f) kommen jedoch einige Dimensionen mehr hinzu. Nun die Frage, ob man sich dafür trotzdem eine Funktion plotten lassen kann?

Meines Wissens nicht. Ich habe jedenfalls noch nie einen 6D-Plot gesehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2014, 00:23     Titel:
  Antworten mit Zitat      
Hallo,

danke für die erneut schnelle Antwort.

Was würdest du mir für denn raten in meinem Fall zu tun?

Danke
Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2014, 09:51     Titel:
  Antworten mit Zitat      
Hallo,

es ist schwer für mich, dir da einen Rat zu geben.

Je nach Anwendung kann es sinnvoll sein, beispielsweise a*b und c+d+e als eine Größe aufzufassen.

Letztlich musst du dir überlegen, was du haben möchtest, und sofern es machbar ist (was ich bei einem 6D-Plot bezweifle), können wir dir bei der Umsetzung helfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2014, 14:43     Titel:
  Antworten mit Zitat      
Hallo,

Ich habe mir nochmal Gedanken gemacht. Für meine Anwendung, wäre auch ein 3D-Plott ausreichend.

1) Wie könnte ich einen 3D-Plott für folgende Gleichung erstellen:
60=a*b*c
2) Wie kann ichaußerdem einschränken, dass a die folgenden Werte nicht
annehmen darf:
a. minus Unendlich bis 5
b. 20 bis 30

Würdet mir wirklich nochmals sehr weiterhelfen.
Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2014, 15:33     Titel:
  Antworten mit Zitat      
Hallo,

ein Beispiel:

Code:
a = [5:0.1:100];
idx = a > 20 & a < 30;
b = -100:0.1:100;
[A,B] = meshgrid(a, b);
C = 60./(A.*B);
C(:, idx) = NaN;
surf(a,b,C)
xlabel('a')
ylabel('b')
zlabel('c')
shading interp


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2014, 16:10     Titel:
  Antworten mit Zitat      
Hallo,
ich bin unglaublich positiv überrascht für die schnelle Hilfe. Tausend Dank!!! Eine letzte Frage hätte ich aber noch. Was bedeuten die die einzelnen Code-Zeilen im Detail? Ich bin leider ein absoluter Matlab Neueinsteiger.

a = [5:0.1:100];
--> Hier wird defniniert, dass a nur Werte zwischen 5 und 100 annehmen darf, richtig?
--> Was bedeutet die 0.1?

idx = a > 20 & a < 30;
--> Könnte ich hier auch weitere Einschränkungen für b hinzufügen und diese einfach mit ‚&‘ nacheinander auflisten?

[A,B] = meshgrid(a, b);
--> Wird hier a und b zu A und B umbenannt und warum?

C = 60./(A.*B);
--> ‚C‘ könnte auch kleingeschrieben definiert werden, richtig?
--> Warum steht hinter 60 und A ein Punkt?

C(:, idx) = NaN;
--> Was bedeutet ':' und warum wird es an C übergeben?
--> Warum ist es notwendig C als NaN zu definieren?

surf(a,b,C)
--> Wird hier der Plot gedruckt?

shading interp
--> Welche Bedeutung hat diese Zeile?

Vielen vielen Dank schon im Voraus.
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2014, 16:26     Titel:
  Antworten mit Zitat      
Hallo,

gerade als Neuling solltest du dir die Mühe machen, die Dokumentation der einzelnen Funktionen zu lesen. Zudem solltest du das Getting Started-Kapitel durcharbeiten, um die generelle Syntax von MATLAB zu verstehen.

Code:


Zitat:
--> Was bedeutet die 0.1?

Das ist die Schrittweite, mit der ausgewertet wird. Du kannst Variablen im Workspace doppelklicken, um sie dir anzusehen.

Zitat:
Könnte ich hier auch weitere Einschränkungen für b hinzufügen und diese einfach mit ‚&‘ nacheinander auflisten?

Ja.

Zitat:
Wird hier a und b zu A und B umbenannt und warum?

Ich habe mir mal angewöhnt, Vektoren mit Klein- und Matrizen mit Großbuchstaben zu bezeichnen. Das ist aber nicht zwingend.

Zitat:
‚C‘ könnte auch kleingeschrieben definiert werden, richtig?

Ja.

Zitat:
Warum steht hinter 60 und A ein Punkt?

Der Punkt gehört zu dem * bzw. dem / und bedeutet, dass die Operationen komponentenweise statt als Matrixoperationen ausgeführt werden sollen.
http://www.mathworks.com/help/relea.....vs-matrix-operations.html

Zitat:
--> Was bedeutet ':' und warum wird es an C übergeben?
--> Warum ist es notwendig C als NaN zu definieren?

Das ist logische Indizierung (logical indexing). Die C-Werte, die zu nicht erlaubten A-Werten gehören, werden nachträglich auf NaN (not a number, ungültiger Wert) gesetzt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2014, 09:36     Titel:
  Antworten mit Zitat      
Hallo zusamen,

erst mal nochmals vielen Dank für die vergangene Hilfe, die mich schon ein großes Stück voran gebracht hat. Ich bräuchte nun aber nochmal eure Hilfe. Neben der ersten Gleichung ' 60=a*b*c ' soll nun auch ein zweite Gleichung ' 80 = a+b+c ' gelten.

1) Wie kann ich in Matlab nun beide Gleichungen an den Plott übergeben?
2) Wie könnte ich anstatt der 60 das Intervall 60 bis 100 in die Gleichung eintragen?

Würde mich nochmal super über eine Hilfe freuen.
Besten Dank schon mal.
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2014, 10:36     Titel:
  Antworten mit Zitat      
Hallo,

warum kann ich bzgl. meiner Frage 1 nicht folgenden Code verwenden kann. Wäre euch über eine Hilfe nochmal super super dankbar!
Grüße
Christian

Code:
sol = solve('C=(a*b)/x','C=y-a-b');
pretty(sol.C);
subs(sol.x,{x,y},{60,80})

a = [0:1.0:100];
b = [0:1.0:100];
idx = b> 40 & b < 60;

[A,B] = meshgrid(a,b);


C(:, idx) = NaN;
mesh(a,b,C)

xlabel('b')
ylabel('a')
zlabel('c')
shading interp
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2014, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

da man die Antwort an die Frage anpasst, ist es ideal, wenn sich die Frage nicht ändert.

Man kann numerische und symbolische Berechnungen nicht einfach durcheinandermischen.

Vorschlag:
Code:
syms a b c
sol = solve(60==a*b*c,80==a+b+c, b, c);

B = matlabFunction(sol.b(1));
C = matlabFunction(sol.c(1));

a = 0:0.1:100;
b = B(a);
c = C(a);
b(imag(b)~=0) = NaN;
c(imag(c)~=0) = NaN;
plot3(a,b,c)

Eventuelle weitere Bedingungen einbauen, indem man die Daten auf NaN setzt. Genau wie hier kann man auch den zweiten Lösungszweig plotten (sol.b(2)).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 09.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2014, 19:54     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen vielen Dank für deine Hilfe und entschuldige bitte die Verwirrung mit den Fragen!

Ich kann deine Code bis auf 2 Punkte nachvollziehen:

1) Mit b(imag(b)~=0) = NaN werden ja nur Elemente durch NAN ersetzt, die nahe Null sind. Ein beispielhaftes Element 3i würde demnach nicht ersetzt werden. Da dies weder NaN noch ein numerischer Wert ist würde mich interessieren, wie der Plot mit diesen Elementen umgeht?

2) Wieso skaliert Matlab die Achsen, trotz des Hinzufügens von ‚XLim‘, ‚YLim‘, ‚ZLim‘, immer noch beliebig:


Code:

syms a b c
sol = solve(60==a*b*c,80==a+b+c, b, c);

B = matlabFunction(sol.b(1));
C = matlabFunction(sol.c(1));

x = 0:0.1:100;
b = B(x);
c = C(x);
 
b(imag(b)~=0) = NaN;
c(imag(c)~=0) = NaN;
 
set(gca,'XLim',[0,100]);
set(gca,'YLim',[0,100]);
set(gca,'ZLim',[0,100]);
 
plot3(x,b,c);
 
xlabel('x')
ylabel('b')
zlabel('c')
shading interp
 


Grüße,
Christian
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2014, 20:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Mit b(imag(b)~=0) = NaN werden ja nur Elemente durch NAN ersetzt, die nahe Null sind.

Nein, alle Elemente, deren Imaginärteil ungleich 0 ist.

Zitat:
Da dies weder NaN noch ein numerischer Wert ist würde mich interessieren, wie der Plot mit diesen Elementen umgeht?

Probiers aus, und du bekommst die Warnung, dass beim Plotten der Imaginärteil ignoriert wurde.

Zitat:
Wieso skaliert Matlab die Achsen, trotz des Hinzufügens von ‚XLim‘, ‚YLim‘, ‚ZLim‘, immer noch beliebig

Weil plot3 die Skalierung ändert. Sinnvollerweise muss man die Skalierung nach dem Plotten anpassen.

Schön sieht das mit der neuen Skalierung allerdings nicht aus.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.