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

Berechnung wieder zurück in den Vektor schreiben

 

Monchicha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 13:00     Titel: Berechnung wieder zurück in den Vektor schreiben
  Antworten mit Zitat      
Moini zusammen,

ich habe eine Frage, die ich irgendwie nicht so formulieren kann, dass ich über google etc. was passendes find. Vllt kann mir ja hier geholfen werden?

Folgendermaßen siehts aus:
Ich hab einen Vekter mit 300 Zeilen. Jetzt will ich aus immer 50 Zeilen den Minimumwert rauslesen und von diesem dann entweder den Eigenwert oder den Wert eines anderen Vektors abziehen. Das ganze funktioniert an sich ganz gut, nur will ich das Ergebnis am liebsten wieder zurück in den Ausgangsvektor schreiben. Wie genau definier ich das dann? Also, was muss ich für meine ??? schreiben? Die min-Fkt würde mir ja den Wert und nicht die Position angeben?

hier mal mein Code soweit:
Code:
for k=1:length(vstd.anfang)
    if    Data2(k) > min(Data1(vstd.anfang(k):vstd.ende(k)))& min(Data1(vstd.anfang(k):vstd.ende(k)))>0;
        Data1(???)=min(Data1(vstd.anfang(k):vstd.ende(k))) -min(Data1(vstd.anfang(k):vstd.ende(k)));
    elseif Data2(k)<min(Data1(vstd.anfang(k):vstd.ende(k)))& min(Data1(vstd.anfang(k):vstd.ende(k)))>0;
      Data1(???)=min(Data1(vstd.anfang(k):vstd.ende(k))) - Data1(k);
end


Grüße!


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 13:18     Titel:
  Antworten mit Zitat      
ich kann leider aus deinem code nicht nachvollzihene was da gemacht wird da er nicht lauffähig ist und ich auch keine informationen über vstd.anfang und ende hab. kannst du das nochmal genauer erklären? vieleicht kleines beispiel? gegebeneer eingang gewünschter ausgang etc.
min giebt übrigens über den 2. ausgabe parameter auch den index wieder.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Monchicha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 16:36     Titel:
  Antworten mit Zitat      
Hallo Winkow!

Ich habe das ganze jetzt mal mit künstlichen Daten geschrieben, vielleicht kannst du es dann besser nachvollziehen (Meine Schleife aus dem ersten Post ist auch etwas verwirrend, wenn man die Daten und den Sinn dahinter nicht kennt, aber das tut ja grad nix zur Sache Wink):

Code:
clc;
close all;
clear all;

Data1=rand(300,1)*10;

x.anfang=[1:10:300]';
x.ende=[10:10:300]';
Data2=1*ones(length(x.anfang), 1);

datare = zeros(length(Data2),1);
for k=1:length(x.anfang)
    if    Data2(k) > min(Data1(x.anfang(k):x.ende(k)));
        datare(k)=min(Data1(x.anfang(k):x.ende(k))) -min(Data1(x.anfang(k):x.ende(k)));
    elseif Data2(k)<min(Data1(x.anfang(k):x.ende(k)));
      datare(k)=min(Data1(x.anfang(k):x.ende(k))) - Data1(k);
    end
end


In diesem Code hab ich die Ergebnisse aus der Schleife im neuen Vektor "datare" gespeichert. Ich würde aber die Ergebnisse gerne direkt an die jeweilige Position von Data1 schreiben lassen. Geht das irgendwie?
ich danke!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 16:56     Titel:
  Antworten mit Zitat      
das geht schon irgendwie ^^ was meinst du denn mit der "jeweiligen position ind Data1"? die position den min wertes in dem bereich?
kleine anmerkung:
lass das clear all weg. ich könnte dir jetzt erklären warum aber das wird hier in jedem 2. post erklärt in dem forum ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 17:07     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
das geht schon irgendwie ^^ was meinst du denn mit der "jeweiligen position ind Data1"? die position den min wertes in dem bereich?



Ganz genau! ich möchte quasi den Vektor durch die Berechnung verändern und das Ergebnis nach der Subtraktion an die Position setzen, an der die Subtraktion vorgenommen wurde. Ich vermute ja, das geht irgendwie mit Data1(min(???))=..., aber komme nicht drauf Wink

Zitat:
kleine anmerkung:
lass das clear all weg. ich könnte dir jetzt erklären warum aber das wird hier in jedem 2. post erklärt in dem forum ^^


Oh, danke für die Anmerkung! Das wusste ich noch nicht und werds gleich mal nachrecherchieren hier! Danke!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 17:12     Titel:
  Antworten mit Zitat      
Code:
Data1=rand(300,1)*10;
Data1r=reshape(Data1,10,[]);
Data2=ones(30,1);
[mini idx]=min(Data1r,[],1);
for k=1:30
     if    Data2(k) > mini(k)
       Data1((k-1)*10+idx(k))=0;
     else
      Data1((k-1)*10+idx(k))=mini(k) - Data1(k);
     end
end


ich hab jetzt mal rumgespielt.dein code oben macht an manchen stellen keinen sinn .. denn must du dann noch selber reinbringen.:

Zitat:
Code:
min(Data1(x.anfang(k):x.ende(k))) -min(Data1(x.anfang(k):x.ende(k)));

endweder verlese ich mich oder das ist immer 0
Zitat:
Code:
elseif Data2(k)<min(Data1(x.anfang(k):x.ende(k)));

du lässt den fall =1 raus... ich weis nicht ob das gewollt ist aber dich denke nicht.. darum hab ich das duch else ersetzt.
Zitat:
Code:
datare(k)=min(Data1(x.anfang(k):x.ende(k))) - Data1(k);

data1 hat 300 elemente k geht aber nur bis 30. denke du meinst da auch was anderes.

Zitat:
Code:
Data2=1*ones(length(x.anfang), 1);

1 * ones ist unnütz Smile
grüße winkow
ps mann kan das ganze bestimmt auch mit logischer indizierung lösen aber is mir grade nicht eingefallen Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Monchicha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 17:27     Titel:
  Antworten mit Zitat      
Zitat:
dein code oben macht an manchen stellen keinen sinn

Da hast du absolut Recht, aber der Originalcode ist recht lang und dazu bräuchte ich dann auch andere random-Daten. Im Original funktioniert er und macht Sinn, ich wollte hier nur ein kleines Beispiel darlegen, um herauszufinden, wie ich meine Berechnung zurück in den Vektor führen kann (also, das Ergebnis). Wink

Zitat:
endweder verlese ich mich oder das ist immer 0

Das ist richtig und so gewollt (im Original Wink)!

Code:
du lässt den fall =1 raus... ich weis nicht ob das gewollt ist aber dich denke nicht.. darum hab ich das duch else ersetzt.

Danke! Das ist mir gar nicht aufgefallen, werd ich direkt ändern!!

Zitat:
data1 hat 300 elemente k geht aber nur bis 30. denke du meinst da auch was anderes.

Jap, nämlich Data2(k) Very Happy

Code:
1 * ones ist unnütz Smile

Recht haste!

So, und jetzt werd ich mal versuchen, deine Code nachzuvollziehen und in meinen Originalcode einzubauen!
Ich danke dir schonmal herzlichst. Dein Code macht zumindest für diese Dummywerte genau das, was ich mir wünsche, ich hoffe, ich bekomme das jetzt auch in der komplexeren Fassung umgesetzt Wink
 
Monchicha

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 17:39     Titel:
  Antworten mit Zitat      
Ich kann als Gast leider nicht editieren, deswegen jetzt hier ein verpönter Doppelpost...


Leider hab ich den Dummycode zu sehr vereinfacht. Hier ist es ja so, das x.anfang und x.ende einfach alle zehn Werte abfragen, also im Endeffekt alle 300 Werte von Data1. Im Original sind es aber nicht alle Werte, sondern ich frage dann nur bestimmte Intervalle ab (ohne Ordnung, also auch nicht nur jedes zweite Intervall...) Daher kam auch das:
Code:
min(Data1(x.anfang(k):x.ende(k)))


Also die Indizierung über x.anfang und x.ende. Genau diese Intervalle müssen also auch wieder im Data1Vektor indiziert werden, damit in diese Positionen das Ergebnis geschrieben wird :/
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 17:48     Titel:
  Antworten mit Zitat      
es wurden alle minima aus den 10ner intervallen berechnet du musst ja dann nicht alle benutzen. da musst du dann die schleife umbaun oder so.
wenn du aber meinst das sich manche 10ner intervalle überlappen oder zb von 14 24 gehen dann stimmt das. dann must du das über einen extra vektor lösen. die möglichkeit der indizierung durch den ermittelten index aus min und deinem intervall vektor sollte aber nicht allzu schwer sein.
_________________

richtig Fragen
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.