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

Symbolic: Nur bestimmte Werte einsetzen

 

Dennis4a1
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 08.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2016, 18:07     Titel: Symbolic: Nur bestimmte Werte einsetzen
  Antworten mit Zitat      
Hi,
ich habe eine Matrix A mit symbolischen Variablen (v1, v2, v3) in die ich bestimmte Werte aus einem Struct einsetze:

Code:

%Werte definieren:
W.v1 = 1;
W.v2 = 2;
W.v3 = 1;

%Symbole definieren:
syms v1 v2 v3

%Matrix definieren:
A = [v1, v2; v3, v2];

%Vektoren definieren:
vek_syms = [v1,v2,v3];
vek_Werte = [W.v1, W.v2, W.v3];

%Werte einsetzen:
A_Werte = subs(A, vek_syms, vek_Werte);
 


Nun möchte ich jedoch, dass ein Wert, der in der Variablen no_subs definiert wird, nicht eingesetzt wird.

Meine Idee war die Vektoren entsprechend zu manipulieren:
Code:

no_subs = v3;
vek_syms = [v1,v2,v3];
vek_syms = vek_syms(vek_syms ~= no_subs);
 

Das Funktioniert auch. Doch wie kann ich das mit meinem vek_Werte machen?
Darin sind ja keine Symbole sondern Variablen/Zahlen drin enthalten.
Auf den Wert selber prüfen möchte ich nicht, da Werte doppelt vorkommen können.

Hab bisschen versucht zu String und zurück zu konvertieren, war aber alles nicht Erfolgreich.

Da gibts doch bestimmt ne Einfache und saubere Möglichkeit?!
Private Nachricht senden Benutzer-Profile anzeigen


Dennis4a1
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 08.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2016, 19:37     Titel:
  Antworten mit Zitat      
Ich habs jetzt mit ner hässlichen Schleife hinbekommen:
Code:
%Werte definieren:
W.v1 = 1;
W.v2 = 2;
W.v3 = 1;

%Symbole definieren:
syms v1 v2 v3

%Matrix definieren:
A = [v1, v2; v3, v2];

%Vektoren definieren:
vek_syms = [v1,v2,v3];
vek_Werte = [W.v1, W.v2, W.v3];

%Nicht eingesetzt werden soll...:
no_subs = v3;

%Spalte des Vektors finden:
index = find(vek_syms == no_subs);

A_Werte = A;

for K = 1:length(vek_syms)
    if K ~= index;
        A_Werte = subs(A_Werte, vek_syms(K), vek_Werte(K));
    end
end


Wenn da jemandem was eleganterers einfällt, gerne her damit!
Private Nachricht senden Benutzer-Profile anzeigen
 
Dennis4a1
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 08.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2016, 12:10     Titel:
  Antworten mit Zitat      
Um der Nachwelt nochmal ne Lösung zu bieten:
Eine Substitution - Schleife ist extrem langsam, waren bei mir über 90% der Codelaufzeit (5 Sekunden).

Besser:
Code:

%Nicht eingesetzt werden soll...:
no_subs = v3;

%Spalte des Vektors finden:
nosubs_col = find(vek_syms == no_subs);

%Vektorkomponenten löschen:
vek_syms(nosubs_col) = [];
vek_Werte(nosubs_col) = [];

%Einmalig substituieren:
A_Werte = subs(A_Werte, vek_syms, vek_Werte);
 
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.