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

Erstes kleines Programm läuft nicht :(

 

alpha1408
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 11.12.2011, 14:25     Titel: Erstes kleines Programm läuft nicht :(
  Antworten mit Zitat      
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:


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


    if Gang==1
        v_neu=(2*pi*14.05*Drehzahl*0.3*3.6)/60;       %Berechnung für Gang1
     
    elseif Gang==2
        v_neu=(2*pi*8.32*Drehzahl*0.3*3.6)/60;        %Berechnung für Gang2
       
    elseif Gang==3
        v_neu=(2*pi*5.28*Drehzahl*0.3*3.6)/60;        %Berechnung für Gang3
       
    elseif Gang==4
        v_neu=(2*pi*3.65*Drehzahl*0.3*3.6)/60;        %Berechnung für Gang4
       
    elseif Gang==5
        v_neu=(2*pi*2.86*Drehzahl*0.3*3.6)/60;        %Berechnung für Gang5
       
    elseif Gang==6
        v_neu=(2*pi*2.39*Drehzahl*0.3*3.6)/60;        %Berechnung für Gang6
       
    end
 
    v = [v_neu((1:end),:)];
     
    DateiName=[('Geschwindigkeitsprofil')];   %Speichern des Profils
    save(DateiName, 'v');
   
end  



 


Momentan meckert Matlab folgendermaßen:

??? Undefined function or variable "v_neu".

Error in ==> Geschwindigkeitsprofil at 32
v = [v_neu((1:end),Smile];

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!!!!
Private Nachricht senden Benutzer-Profile anzeigen


Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2011, 14:44     Titel:
  Antworten mit Zitat      
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');
   
end  

 


Um es gleich zu sagen: Ich weiß, mit Matrizen ist das noch schneller lösbar, aber nix für nen Anfänger glaub ich...

Ich hoffe, ich hab dein Problem richtig verstanden.
Gruß
_________________

1000 Buchstaben? Warum nur 6?

Zuletzt bearbeitet von Kevin am 11.12.2011, 14:58, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 11.12.2011, 14:55     Titel:
  Antworten mit Zitat      
Danke dir,

aber was bedeutet das jetzt konkret? Was muss ich ändern?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2011, 15:00     Titel:
  Antworten mit Zitat      
ich hab den thread mal erweitert...also den oben
_________________

1000 Buchstaben? Warum nur 6?
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 11.12.2011, 15:09     Titel:
  Antworten mit Zitat      
Hallo Kevin,

danke für deine Hilfe,

ich lasse deinen Code gerade mal durchlaufen. Dauert etwas Wink

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 Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2011, 15:19     Titel:
  Antworten mit Zitat      
Der Fehler liegt in "Gang", da es ein array ist...salopp gesagt fragst du:
Code:

Gang==1 %du fragst ob viele Werte die in einem Array zusammenstehen gleich einem Wert entsprechen...und viele Werte sind nie ein Wert :)
 


Die Fälle:
Code:

Gang==1
Gang==2
Gang==3
....
 

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 Smile
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.
_________________

1000 Buchstaben? Warum nur 6?
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 11.12.2011, 15:46     Titel:
  Antworten mit Zitat      
habe die Sache beschleunigt und nur mit 1000 Stellen durchgerechnet..funktioniert Smile

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2011, 15:54     Titel:
  Antworten mit Zitat      
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....
_________________

1000 Buchstaben? Warum nur 6?
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 11.12.2011, 16:51     Titel:
  Antworten mit Zitat      
läuft alles Smile

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2011, 17:06     Titel:
  Antworten mit Zitat      
ups...stimmt, aber wenn du

Code:


reinschreibst dann sollte es gehen
_________________

1000 Buchstaben? Warum nur 6?
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 11.12.2011, 17:15     Titel:
  Antworten mit Zitat      
LÄUFT! Smile Smile Smile

Super vielen vielen Dank Smile

Ist der Sonntag doch gerettet Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
alpha1408
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 10.11.11
Wohnort: Braunschweig
Version: ---
     Beitrag Verfasst am: 15.12.2011, 10:59     Titel:
  Antworten mit Zitat      
alpha1408 hat Folgendes geschrieben:
habe die Sache beschleunigt und nur mit 1000 Stellen durchgerechnet..funktioniert Smile

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');
   
end  

 


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 Smile
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.