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

Variable innerhalb einer Formel ändern

 

Melissa_
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 04.03.2013, 15:00     Titel: Variable innerhalb einer Formel ändern
  Antworten mit Zitat      
Hallo,

ich versuche gerade die Variable innerhalb einer Formel zu ändern.
Leider bin ich absolute Matlab Anfängerin und wäre deshalb dankbar für eure Tipps.
Foglendes:
in einer Formel: z=sqrt( 220-(20-y)^2)
Wie kann ich nun den y-Wert verändern(6 Werte), dass die Formel 6 verschiedene Werte für z ausgibt?
Diese sollte ich wenn möglich vergleichen und das Minimum ausgeben.
Hat irgendjemand eine Idee wie ich das lösen könnte?
Für ein Programmansatz wäre ich dankbar.

Melissa
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: 04.03.2013, 15:04     Titel:
  Antworten mit Zitat      
Hallo,

wenn du das so machst:
Code:
z=sqrt( 220-(20-y).^2)

kannst du y als Vektor definieren und bekommst automatisch einen Vektor der entsprechenden z-Werte.
Die Minimumsuche kannst du dann mit dem Befehl min machen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 04.03.2013, 15:15     Titel:
  Antworten mit Zitat      
Das war die Rätsels Lösung, danke Harald!!! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Melissa_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 04.03.2013, 15:54     Titel:
  Antworten mit Zitat      
Jetzt muss ich nochmal kurz fragen Wink

ist es denn auch möglich im folgenden Programm die x und y variable in einem Raster von -20 bis 20 zu variieren und die jeweiligen z-Werte angezeigt zu bekommen?
Also je ein z-Wert für jede Variablenänderung?

ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
x=10;
y=10;
L=420;
z=sqrt ( L^2-(x-ax).^2-(y-ay).^2);
test = min (z);
disp (test);
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 16:59     Titel:
  Antworten mit Zitat      
Hallo Mel,

Meinst du so?
Code:
ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
x=(-20:20)';
y=(-20:20)';
L=420;
z=sqrt ( L^2-(bsxfun(@minus, ax, x)).^2-(bsxfun(@minus, ay, y)).^2);


Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Melissa_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 04.03.2013, 21:13     Titel:
  Antworten mit Zitat      
Ja genau so, nur würde ich jetzt gerne jeweils das Minimum der z-Werte darstellen. Ich habe es mal so versucht:
(Hab den Bereich verkleinert dass es übersichtlicher wird)

Code:

ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
x=(-2:2)';
y=(-2:2)';
L=420;
z=sqrt ( L^2-(bsxfun(@minus, ax, x)).^2-(bsxfun(@minus, ay, y)).^2);
test=min (z);
disp (test);
 



Damit bekomme ich nun 6 Werte(entsprechend der Anzahl meiner ax und ay Werte), die jeweils das gesamte Minimum aller errechneten z-Werte darstellen.
Ich bräuchte es aber nun dass das von jedem z Wert einzeln geschieht. Sprich jede Möglichkeit aus der x-y Kombination ergibt 6 Werte für z.
Davon bräuchte ich jeweils das Minimum.
Nur leider sind meine Kenntnisse dafür bei weitem nicht ausreichend Wink
Weiß jemand eine Lösung?
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 21:31     Titel:
  Antworten mit Zitat      
Aktuell gilt immer x=y. Du möchtest aber, dass für x=-2 gilt y=-2:2 usw. Richtig verstanden?


Code:
ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
x=(-2:2)';
y=(-2:2)';
L=420;

k=1;
for i_x=-2:2
    for i_y=-2:2
        z(k, :) = sqrt ( L^2-(i_x-ax).^2-(i_y-ay).^2);
        k=k+1;
    end
end


Glaub, das stimmt so; überprüfe es aber besser noch mal.


PS: Du brauchst übrigens nicht disp(test) schreiben. Lass hinter test=min (z) das Semikolon weg, dann wird das Ergebnis im Command Window ausgegeben.

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Melissa_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 04.03.2013, 21:53     Titel:
  Antworten mit Zitat      
Danke schonmal für den Tipp Smile

Letztendlich würde ich gerne die von den z-Werten aufgespannte Fläche in Abhängikeit der x-y Werte im 3dimensionalen Raum x-y-z darstellen.

Zum Einen bräuchte ich dazu eine Möglichkeit quasi die ganze Fläche x-y mit einer Schleife abzudecken (bisher ists ja nur die Diagonale), zum Anderen würde ich das Ergebnis dann wie gesagt gerne durch eine Fläche im Raum darstellen, oder zumindest einer Punkteschar.
Ist das denn überhaupt möglich? Rolling Eyes
(Natürlich wird der Bereich der x und y Variablen dazu dann wieder vergrößert Wink )

Bin für jeden eurer Tipps dankbar

Grüßle Melissa
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 23:35     Titel:
  Antworten mit Zitat      
Die Werte etwas übersichtlicher in z gespeichert:

Code:
ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
L=420;


l=1;
for i_x=-2:2
    k=1;
    for i_y=-2:2
        z(k, :, l) = sqrt ( L^2-(i_x-ax).^2-(i_y-ay).^2);
        k=k+1;
    end
    l=l+1;
end


So erhält man (für die Bsp-Daten) eine 5x6x5-Matrix.
Die Spalten (6 an der Zahl; 5x5=25 mal; also 150 z-Werte) sind die z-Werte in Abh. von x und y. Die Zeilen (erste 5) sind y-Werte von -2 bis 2. Die dritte Dimension der Matrix sind dann die x-Werte ebenfalls von -2 bis 2

Kann sein, dass ich das alles missverstehe, bin schon n bissl müde. Ist das, was du brauchst?

Für den Graph, schau dir mal mesh/surf an (ich frage mich gerade, ob man statt der Schleifen auch [x,y]=meshgrid() verwenden könnte, geh jetzt aber lieber erst mal unter die dusche Razz )

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.03.2013, 00:18     Titel:
  Antworten mit Zitat      
Mit meshgrid, weniger Schleifendurchläufen:

Code:
ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
[x, y] = meshgrid(-2:2);
L=420;

for ii = 1:6
    z(:,:,ii) = sqrt ( L^2-(x-ax(ii)).^2-(y-ay(ii)).^2);
end

z_min = min(z,[],3)
mesh(x,y,z_min)


Jetzt erhält man eine 5x5x6 Matrix mit Zeilen = x, Spalten = y und 3. Dimension = z



Edit: Komplett ohne Schleife. yaaayyyy

Code:
ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
ax = permute(ax, [3 1 2]);
ay = permute(ay, [3 1 2]);
[x, y] = meshgrid(-2:2);
L=420;

z = sqrt ( L^2-(bsxfun(@minus, ax, x)).^2-((bsxfun(@minus, ay, y))).^2);

z_min = min(z,[],3);
mesh(x,y,z_min)
Private Nachricht senden Benutzer-Profile anzeigen
 
Melissa_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 05.03.2013, 13:46     Titel:
  Antworten mit Zitat      
Ja, so hab mich mir das vorgestellt, danke Seban, hast dir ja echt ne Menge Gedanken gemacht Wink

Ich hab jetzt mal ein bißchen an der Version mit der Schleife rumgebastelt.
Nun stehe ich vor dem nächsten Problem Mad
Ich habe zusätzlich eine zweite Variable für L eingeführt, also ein Lmax und ein Lmin. Mein Programm sieht dann so aus:
Code:

ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
[x, y] = meshgrid(-2:2);
Lmax=420;
Lmin=298;
 
for ii = 1:6
    z1(:,:,ii) = sqrt ( Lmax^2-(x-ax(ii)).^2-(y-ay(ii)).^2);
    z2(:,:,ii) = sqrt ( Lmin^2-(x-ax(ii)).^2-(y-ay(ii)).^2);
end
 
z_min1 = min(z1,[],3)
z_min2 = min(z2,[],3)

mesh(x,y,z_min1);
hold on;
mesh(x,y,z_min2);

 


Ich dachte mit der Hold on Funktion kann ich beide Diagramme in einer Grafik abbilden, leider ist das nicht der Fall.
Lasse ich es einzeln zeichnen, nehme also die mesh Funktion für eins der beiden raus, zeichnet mir das Programm mein gewünschtes Bild. Mache ich es aber mit beinden Funktionen, stellt es mir nur 2 Ebenen da...
Weiß jemand wo der Fehler liegen könnte?
Und dann noch was. Ich würde den Bereich nun gerne erweitern, also von [-2:2] bis auf [-300:300]. Wäre super wenn mir jemand weiter helfen könnte

Melissa
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.03.2013, 20:22     Titel:
  Antworten mit Zitat      
Hallo,

Die 2 Ebenen sind das, was du suchst, die Skalierung ist bloß ungünstig. Für bspw. Lmin=418 siehst man das gut. Du kannst aber bspw mit subplot 2 Plots in einer figure darstellen

Melissa_ hat Folgendes geschrieben:
Und dann noch was. Ich würde den Bereich nun gerne erweitern, also von [-2:2] bis auf [-300:300]. Wäre super wenn mir jemand weiter helfen könnte

Du musst nur '-2:2' durch '-300:300' ersetzen. ABER: Die z werden iwann komplex und mesh mag keine komplexen Zahlen.

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Melissa_
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 01.03.13
Wohnort: BaWü
Version: ---
     Beitrag Verfasst am: 05.03.2013, 20:34     Titel:
  Antworten mit Zitat      
Halli Hallo Wink

Ich hatte das mit dem vergrößern des Bereichs bisher immer in dem oberen der beiden Programme versucht, da ists anscheinend nicht so einfach.
In dem unteren aber, das ohne Schlefe arbeitet ists wirklich kein Problem.
Ich versuch jetzt mal in das Programm die Lmin Variable rein zu basteln.
Code:


ax=[39.9 -39.9 39.8 79.9 -79.9 -39.8];
ay=[-69 -69 69 0 0 69];
ax = permute(ax, [3 1 2]);
ay = permute(ay, [3 1 2]);
[x, y] = meshgrid(-2:2);
L=420;

z = sqrt ( L^2-(bsxfun(@minus, ax, x)).^2-((bsxfun(@minus, ay, y))).^2);

z_min = min(z,[],3);
mesh(x,y,z_min)

 

Danke schonmal für deine Hilfe, ich hoffe dass ichs so nun hinbekomme Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.