Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Hardware Entwickler (m/w)
Bestückung, Inbetriebnahme, Planung und Durchführung von Tests
Innoventis GmbH - Würzburg

Entwicklungsingenieur (m/w) für Fahrdynamikregelsysteme
Entwicklung der für die Fahrdynamik relevanten Funktionen
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Application Engineer (m/w)
Unterstützung des Vertriebs bei der Erstellung von Angeboten und Präsentation beim Kunden
Control Techniques GmbH - Hennef

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

zugriff/ Vergleich mit zurückliegenden Spalten

 

Lini
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.01.2017, 17:16     Titel: zugriff/ Vergleich mit zurückliegenden Spalten
  Antworten mit Zitat      
Hallo und ein frohes neues jahr.

Ich habe nochmal eine Frage zum Programmieren mit Rückwirkungen. Ich will einen Speicherstand in einem Array programmieren. Die Befüllung ist zum einen von meinem Faktor x abhängig und von dem Speicherstand der 1 sek zurück liegt.

Aussehen soll das vereinfacht in etwa folgendermaßen:

Code:

Soll = 50;
S = zeros(size(x));  % Speicherstand
F = zeros(size(x)); % Füllmenge/Sek
x = [49; 50; 58]% Vorgebender Faktor

s(1) = 20;
F = (x-Soll) *5;
F(s(-1) <= 0) = 0; %(s(t-1)) sollte der Speicherstand sein, der 1 Sekunde zurück liegt
F(s(t-1) >= 40) = 0;

S = cumsum(F);
 


Wenn ich einfach versuche den array zu verschieben wird natürlich nur der Nullvektor berücksichtigt.

Code:

h = zeros(size(Freq));
S(2:end) = S(2:end) + h(1:end-1);
 



Da der Vektor x mehrere Millionen Werte hat und ich im eigentlichen Code auch viel mehr Bedingungen habe eignet sich eine Schleife garnicht.

Hat jemand eine Idee ob oder wie sich das lösen lässt? Eine Idee war auch eine zero Matrix in der Endgröße zu erstellen und mit Indizes zu arbeiten. Aber auch hier bin ich planlos und habe keine Ahnung wie das funktioniert.

Wenn es so für das Problem keine Lösung gibt und bei Aussicht auf Erfolg wäre ich auch für Ansätze in Simulik, mit oop, oder für weitere Alternativen offen.

Viele Grüße
Lini
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 01.01.2017, 20:52     Titel:
  Antworten mit Zitat      
Hallo,

ähnliches Problem wie im letzten Thread.

Ich vermute, du meinst
Code:
toReplace = [false; s(1:end-1) < 0];
F(toReplace) = 0;


... und achte bitte darauf, die Befehle in der richtigen Reihenfolge hinzuschreiben:
Code:
F = zeros(size(x)); % Füllmenge/Sek
x = [49; 50; 58]% Vorgebender Faktor

ist nicht sinnvoll, da die Zeilen von oben nach unten abgearbeitet werden und x somit in der ersten Zeile noch nicht bekannt ist.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2017, 09:41     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort. Aber irgendwie passt das noch nicht ganz, wenn ich jetzt für x folgende Zahlen nehme und als Obergrenze 20.5 einsetze bekomme ich das falsche Ergebnis

Code:

Soll = 50;
x = [50.1; 50; 49.95; 50.09 ;50.11; 49.84]% Vorgebender Faktor
S = zeros(size(x));  % Speicherstand
F = zeros(size(x)); % Füllmenge/Sek

s(1) = 20;
F = (x-Soll) *5;  
toReplace = [false; s(1:end-1) >20.5];
F(toReplace) = 0;

S = cumsum(F);
 


kommt immer noch das falsche Raus. Es werden nur Speicherstand und F ausgegeben, wie auch ohne die ausgeführte Bedingung. Allerdings sollte F ab dem Wert x = 50.11 Null werden Da mit X= 50.09 die 20.5 Überschritten wurde. Habe ich da noch einen Fehler drinnen?

Viele Grüße
Lini
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 02.01.2017, 10:34     Titel:
  Antworten mit Zitat      
Hallo,

du verwendest s und S. Für MATLAB sind das zwei verschiedene Variablen.

Außerdem hat das S = cumsum(F) keinen Einfluss auf die Bedingung, da es erst danach berechnet wird.

Grüße,
Harald
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.