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

Einzelne Elemente einer Matrix verändern

 

champagnemomi
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.07.17
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 18.07.2017, 08:42     Titel: Einzelne Elemente einer Matrix verändern
  Antworten mit Zitat      
Hallo goMATLAB-Forum,

ich habe folgendes Probleme:
Innerhalb einer Funktion werden Eingabeparameter definiert. Nun möchte ich, dass unabhängig davon welche Daten diese Eingabeparameter haben, diese innerhalb der Funktion um einen bestimmten Prozentsatz ihrer Größe bzw. wenn das jeweilige Elemente nicht bekannt ist um einen bestimmten Wert erhöht wird.
Ich habe dies mit einer for-Schleife versucht, allerdings tut diese nicht das mit den Eingabeparametern, was sie soll bzw. beeinflusst diese gar nicht.
Die Eingabeparameter werden über das Comman-Window eingegeben, wo auch die Größe der Matrix (es handelt sich dabei um einen Spaltenvektor) initialisiert wird.

Der Code-Ausschnitt sieht folgendermaßen aus:

Code:

Eingangsgroesse=real(Eingabeparameter)

for k=1:length(Eingabeparameter)
                    if Eingabeparameter(k)>0
                        Eingabeparameter(k)=Eingabeparameter(k)+0,5*Eingabeparameter(k)
                    elseif Pi_inp==0
                        Eingabeparameter(k)=Eingabeparameter(k)-0,3
                    else
                        Eingabeparameter(k)=Eingabeparameter(k)
                    end
                end
 


Ich hoffe ich habe mich verstänflich ausgedrückt.
Der Umgang mit MATLAB ist für mich noch ziemliches Neuland und ich bin für jede Anmerkung von Euch dankabr.

Danke sehr Wink
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.07.2017, 17:49     Titel: Re: Einzelne Elemente einer Matrix verändern
  Antworten mit Zitat      
Hallo champagnemomi,

Zitat:
Nun möchte ich, dass unabhängig davon welche Daten diese Eingabeparameter haben, diese innerhalb der Funktion um einen bestimmten Prozentsatz ihrer Größe bzw. wenn das jeweilige Elemente nicht bekannt ist um einen bestimmten Wert erhöht wird.

Das ist noch nicht klar.

Zitat:
Ich habe dies mit einer for-Schleife versucht, allerdings tut diese nicht das mit den Eingabeparametern, was sie soll bzw. beeinflusst diese gar nicht.

Was soll sie denn genau tun?

Code:
Eingangsgroesse=real(Eingabeparameter)

Das sieht so aus, als wäre "Eingabeparameter" komplex. Danach verwendet Du aber nicht "Eingangsgroess", sondern weiterhin "Eingabeparameter". Ist das gewollt?

Code:
Eingabeparameter(k)=Eingabeparameter(k)

Das ist sinnfrei und Zeitverschwendung.

Code:
Eingabeparameter(k)=Eingabeparameter(k)+0,5*Eingabeparameter(k)

"0,5"??? Meinst Du "0.5"? Das Komma macht aus dem Code etwas komplett anderes, Dezimal-Trenner ist der Punkt.

Wie wäre dies ohne Schleife:
Code:
X = real(Eingabeparameter);
match = (X > 0);
X(match) = X(match) * 1.5;
if Pi_inp == 0
  X(~match) = X(~match) - 0.3;
end

Etwas kurzes wie "X" ist dann sinnvoll, wenn es leichter lesbar ist. Für die meisten Berechnungen ist es nicht wichtig, ob die Zahl nun die "Eingangsgröße" oder der "Eingabeparameter" ist. Wenn man hier also Tippfehler vermeiden kann und das Programm übersichtlicher macht, ist ein Name mit 1 bis 8 Buchstaben hilfreich. Allerdings ist "X" nicht so wirklich smart. ;-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
champagnemomi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.07.17
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 19.07.2017, 09:31     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank erstmal für deine Antwort.

Zitat:
Zitat:
Nun möchte ich, dass unabhängig davon welche Daten diese Eingabeparameter haben, diese innerhalb der Funktion um einen bestimmten Prozentsatz ihrer Größe bzw. wenn das jeweilige Elemente nicht bekannt ist um einen bestimmten Wert erhöht wird.

Das ist noch nicht klar.


Ich versuche es mal verständlicher zu formulieren:
Die Eingabeparameter haben eine bestimmte Größe. Bei den Eingabeparamtern handelt es sich um einen Spaltenvektor. Ich möchte halt, dass einzelne Elemente (erstmal nur eins) nacheinander um einen bestimmten Wert vergrößert werden, d.h. innerhalb der Funktion soll nicht mit dem eigentlichen Eingabeparameter gerechnet werden, sondern mit dem veränderten.
Bsp.: Eingabeparameter=[0; 2; 3; 4], veränderter Eingabeparameter=[0.3; 2; 3; 4]

Zitat:
Zitat:
Ich habe dies mit einer for-Schleife versucht, allerdings tut diese nicht das mit den Eingabeparametern, was sie soll bzw. beeinflusst diese gar nicht.

Was soll sie denn genau tun?


Ich wollte, dass die for-Schleife jedes Element des Spaltenvektors einmal vergrößert (die übrigen Eingabeparameter sollen aber ihren ursprünglichen Wert haben) und mit diesem veränderten Spaltenvektor einmal die Funktion ausführt.
Für das obige Beispiel würde die Funktion dann viermal ausgeführt werden.


Zitat:
Code:
Eingangsgroesse=real(Eingabeparameter)
Funktion ohne Link?

Das sieht so aus, als wäre "Eingabeparameter" komplex. Danach verwendet Du aber nicht "Eingangsgroess", sondern weiterhin "Eingabeparameter". Ist das gewollt?


Es geht halt darum, dass der nur der Realteil verändert werden soll. Der Imaginärteil soll immer der eigentlichen Eingabe entsprechen.

Zitat:
Code:
Eingabeparameter(k)=Eingabeparameter(k)
Funktion ohne Link?

Das ist sinnfrei und Zeitverschwendung.


Ok.

Zitat:
Code:
Eingabeparameter(k)=Eingabeparameter(k)+0,5*Eingabeparameter(k)
Funktion ohne Link?

"0,5"??? Meinst Du "0.5"? Das Komma macht aus dem Code etwas komplett anderes, Dezimal-Trenner ist der Punkt.


Danke für die Anmerkung. Das passiert mir öfter Very Happy

Ich glaube ohne Schleife wird das ganze nicht funtionieren. Da die die einzelnen Elemente nacheinander verändert werden sollen.


Ich hoffe diesmal ist meine Beschreibung etwas verständlicher.


Vielen Dank und liebe Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.07.2017, 16:57     Titel:
  Antworten mit Zitat      
Hallo champagnemomi,

Zitat:
Code:
Eingangsgroesse=real(Eingabeparameter)
Funktion ohne Link?

Das sieht so aus, als wäre "Eingabeparameter" komplex. Danach verwendet Du aber nicht "Eingangsgroess", sondern weiterhin "Eingabeparameter". Ist das gewollt?


Zitat:
Es geht halt darum, dass der nur der Realteil verändert werden soll.

Das macht Dein Code aber nicht. Du extrahierst zunächst nur den Real-Teil, verändern tust Du danach aber die Original-Daten. Was bedeutet dann genau "Eingabeparameter(k)>0"? Meinst Du "abs(Eingabeparameter(k))>0" oder "real(Eingabeparameter(k))>0"?

Zitat:
Ich glaube ohne Schleife wird das ganze nicht funtionieren. Da die die einzelnen Elemente nacheinander verändert werden sollen.

Man kann sie aber auch einfach alle gleichzeitig verändern, oder?

Jetzt probiere die Ideen mal in den Code einzufügen und poste ihn wieder, falls es weitere Probleme gibt.

Gruß, Jan
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.