Verfasst am: 11.12.2011, 14:25
Titel: Erstes kleines Programm läuft nicht :(
Hallo!
Ich bin absoluter Anfänger in Matlab und versuche gerade ein paar kleinere Berechnungsprogramme zu schreiben!
Ich habe folgendes gegeben:
Eine Matrix "Zyklus" mit dem gewählten Gang in Spalte 1 und der Motordrehzahl in Spalte 2.
Ich möchte jetzt für jede Zeile im Programm (840.745) die Geschwindigkeit des Fahrzeuges bestimmen und diese dann abspeichern. (Als Matrix mit einer Spalte)
Je nach gewähltem Gang möchte ich die Berechnung ändern, da sich die Übersetzung ändert. Dies ist mein Code, den ich geschrieben habe:
Error in ==> Geschwindigkeitsprofil at 32
v = [v_neu((1:end),];
Dort liegt also ein Fehler, den ich nicht finde.
Desweiteren denke ich, dass ich doch noch eine Art Zählvariable brauch, oder weiß Matlab mit diesem Code bereits, dass er di vollen 840.745 Zeilen durchgehen soll?
Wie gesagt, ich bin absoluter Anfänger und komme gerade total nicht weiter. Danke für eure Hilfe!!!!
Hallo,
dein Problem ist m.E. das array Gang, weil du bei der Abfrage (if Gang==...)
immer nur FALSE erhalten kannst.
Wenn Gang ein Skalar ist sollte das Problem behoben sein.
Ich finde auch deine Funktion ist unübersichtlich...ich sortiere mal ein wenig:
Code:
function Geschwindigkeitsprofil
warning off
load('Zyklus') %Laden des gewuenschten Zyklus
Gang=Variable(1:end,1); %Auswahl der Spalte mit Gangangabe
Drehzahl=Variable(1:end,2); %Auswahl der Spalte mit Drehzahl
uebersetzung=[14.05,8.32,5.28,3.65,2.86,2.39]; %benötigt man, wenn um das ständige elseif loszuwerden
fak=2*pi*0.3*3.6/60; %das ist immer gleich und wird nur einmal berechnet (spart Zeit) for i=1:end,
v(i)=fak*uebersetzung(Gang(i))*Drehzahl(i);
%wenn du den Gang als adesswert im dummyarray "uebersetzung" benutzt, geht es las Schleife
end
DateiName=[('Geschwindigkeitsprofil')]; %Speichern des Profils
save(DateiName, 'v');
ich lasse deinen Code gerade mal durchlaufen. Dauert etwas
Wenn ich diese Sache mit if-elseif ect programmieren möchte, so wie ich es probiert habe, was muss ich ändern, also wo liegt der Fehler? muss ich statt v" immer das v(i) wählen, damit er den ganzen Zyklus durchläuft?
EDIT: woher weiß das Programm in deinem Code, welche Übersetzung zu welchem Gang gehört und wo wird die Übersetzung dem Gang zugeordnet? Würde das ganz gern verstehen, damit ich ein wenig weiterkomme
existieren nicht, da immer rauskommt, dass ein Wert nicht viele Werte sind, also FALSE
Die Folge ist, dass v_neu nie gesetzt wird!
Später benötigst du aber v_neu...und da motzt dann MATLAB
auch EDIT
ich habe deine Formeln betrachtet und festgestellt, dass bei der Berechnung der Gänge immer nur ein Wert anders ist...diesen Wert habe ich "uebersetzung" genannt und das array so angelegt, dass die Übersetzung im Nten Gang den Nten Wert im array anspricht, d.h.
Gang==1 --> Abrufen des Faktors aus übersetzung(1)
Gang==2 --> Abrufen des Faktors aus übersetzung(2)
Gang==3 --> Abrufen des Faktors aus übersetzung(3)
u.s.w.
_________________
klar kannst du das auch direkt im Code...
Gundsätzlich kannst du sowohl Zeilen als auch Spalten plotten, aber probier da am Besten ein bisschen rum, was dir am Besten gefällt....
_________________
Ich habe jetzt über eine Schleife programmiert, dass das Programm für mehrere Zyklen hintereinander durchläuft.
Bei Kevins Code steht
for i=1:end;
Das hat nicht funktioniert, da Matlab das end als Ende für das for ansieht. Also habe ich statt end den Wert 840.740 eingeben bzw. 1000, um es mal zu probieren.
Die Zyklen haben jetzt eine unterschiedliche Länge, deswegen muss da drin stehen, dass es immer bis zum Ende durchläuft. Wie kann ich das definieren?
habe die Sache beschleunigt und nur mit 1000 Stellen durchgerechnet..funktioniert
Vielen Dank!
Ich würde dieses gern transponieren, d.h. statt i Spalten hätte ich gern i Zeilen.
Manuell kann ich das über das Command Window mit v_trans=v'
Funktioniert das auch direkt im Code?
Ich denke, dass der anschließende Plot auch funktioniert, wenn die Werte in einer Spalte stehen, oder?
Hallo,
ich probiere schon ewig hin und her, aber weiß nicht, wie ich statt dem zeilenvektor einen spaltenvektor bekomme. Manuell geht das, aber mein Programm braucht den Spaltenvektor jetzt zum weiterrechnen.
Kann mir jemand helfen?
Zur Erinnerung:
Code:
function Geschwindigkeitsprofil
warning off
load('Zyklus') %Laden des gewuenschten Zyklus
Gang=Variable(1:end,1); %Auswahl der Spalte mit Gangangabe
Drehzahl=Variable(1:end,2); %Auswahl der Spalte mit Drehzahl
uebersetzung=[14.05,8.32,5.28,3.65,2.86,2.39]; %benötigt man, wenn um das ständige elseif loszuwerden
fak=2*pi*0.3*3.6/60; %das ist immer gleich und wird nur einmal berechnet (spart Zeit) for i=1:end,
v(i)=fak*uebersetzung(Gang(i))*Drehzahl(i);
%wenn du den Gang als adesswert im dummyarray "uebersetzung" benutzt, geht es las Schleife
end
DateiName=[('Geschwindigkeitsprofil')]; %Speichern des Profils
save(DateiName, 'v');
v ist momentan ein zeilenvektor, soll aber als spaltenvektor programmiert sein.
EDIT: Habe eine neue Zeile eingefügt mit v_trans=v'
Funktioniert. Trotzdem Danke
Einstellungen und Berechtigungen
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
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.