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

Schleife: Vektoren einlesen & addieren (und andere Aufga

 

firebirder
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2009, 12:58     Titel: Schleife: Vektoren einlesen & addieren (und andere Aufga
  Antworten mit Zitat      
Hallo,
ich bin absoluter Matlab-Newbie und habe ein Problem in einer Schleife zwei Vektoren (je 3 Dimensionen) einzulesen, diese auszugeben und zu addieren.

Schon an der Ausgabe scheitere ich.

Mit einem Vektor klappt es wunderbar:

Code:
%Vektor eingeben
fprintf('\nBitte Vektor eingeben:\n')
for i=1:3
    x(i)=input(['x' num2str(i) ' = ']);
end


%Vektor ausgeben
fprintf('\nDer eingegebene Vektor lautet:\n')
for i=1:3
   fprintf('%3d\n', x(i))
end
 



Aber bei der Schleife komme ich mit den Arrays nicht zurecht:

Code:
%Vektoren  eingeben
for i=1:2    
    fprintf(['\nBitte Vektor ' num2str(i) ' eingeben:\n'])
        for j=1:3
            x(i)=input(['x' num2str(j) ' = ']);
        end
end

%Vektoren ausgeben
for i=1:2
    fprintf(['\nDer eingegebene Vektor ' num2str(i) ' lautet:\n'])
    for j=1:3
        fprintf('%3d\n', x(i))
    end
end
 


Da gibt er mir immer nur die letzten Zahlen aus.
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 25.05.2009, 13:33     Titel:
  Antworten mit Zitat      
Moin,

versuche mal meinen Code nachzuvollziehen:
Code:
% Vektoren  eingeben
x = zeros(2,3);
for k=1:2    % i und j als Laufvariablen vermeiden, da sie für die komplexen Zahlen codieren
    fprintf(['\nBitte Vektor ' num2str(k) ' eingeben:\n'])
        for l=1:3
            x(k,l)=input(['x' num2str(l) ' = ']);
        end
end

% Vektoren ausgeben
for k=1:2
    fprintf(['\nDer eingegebene Vektor ' num2str(k) ' lautet:\n'])
    for l=1:3
        fprintf('%3d\n', x(k,l))
    end
end


Bei Fragen einfach fragen Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
firebirder
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2009, 14:13     Titel:
  Antworten mit Zitat      
Hallo Alexs,
mit den for-Schleifen komme ich nun besser zurecht, aber warum hast du vorher x = zeros(2,3); gemacht? Damit sichergestellt ist, dass die Variable x eine Zahl ist?

hier meine Lösung falls es noch andere interessiert:

Code:
clear all
clc


% Vektoren  eingeben
x = zeros(2,3);
for k=1:2    
    fprintf(['\nBitte Vektor ' num2str(k) ' eingeben:\n'])
        for l=1:3
            x(k,l)=input(['x' num2str(l) ' = ']);
        end
end

% Vektoren ausgeben
for k=1:2
    fprintf(['\nDer eingegebene Vektor ' num2str(k) ' lautet:\n'])
    for l=1:3
        fprintf('%3d\n', x(k,l))
    end
end


%Addition der Vektoren
disp('Der neue Vektor C lautet: ')
for l=1:3
    summe=x(1,l) + x(2,l);
    disp(summe)
end



Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 25.05.2009, 14:34     Titel:
  Antworten mit Zitat      
Das mache ich grundsätzlich, damit Matlab von vornherein "weiß" wie groß die Variable wird - bei komplezierteren Programmen mit größeren Vektoren oder Matrizen bringt das enorme Zeitersparnisse.

Zu deinem Code:
Das Summieren der Vektoren kannst du auch anders erreichen:
Code:

% Addition der Vektoren
disp('Der neue Vektor C lautet: ')
summe=sum(x);
disp(summe)
 


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
firebirder
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2009, 14:52     Titel:
  Antworten mit Zitat      
Danke für den Tipp, scheint als wärst du ein Matlab Guru.
Ich arbeite gerade fürs Studium (1. Semester) ein Lernheft für matlab durch. Dürfte ich hier mal die ein oder andere Aufgabe schreiben mit meiner Lösung und du gibst einen kurzen (Verbesserungs-)Kommentar dazu ab?

Zitat:
5_3 Aufgabe: n-Komponenten (1 bis 10) eines Vektors einlesen und ausgeben. Die grösste Komponente ermitteln und ausgeben. Benutzen sie, wo es angebracht ist Schleifen.


Gibt es ne bessere Lösung um die grösste Komponente zu ermitteln?

Code:
clear all
clc

groesste=0;

%Anzahl n eingeben
while 1
    n=input('Bitte Anzahl der Zahlen eingeben (1-10): ');
    if (n>=1) && (n<=10)
        break
    end
end


for i=1:n
    x(i)=input(['Bitte Komponente für ' num2str(i) ' eingeben.']);

    %grösste Komponente ermitteln
    if x(i) > groesste
        groesste=x(i);
    end
end

%Vektor ausgeben
fprintf('\nDer eingegebene Vektor lautet:\n')
for i=1:n
   fprintf('%3d\n', x(i))
end
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 25.05.2009, 15:13     Titel:
  Antworten mit Zitat      
Klar geht das, allerdings würde ich dann vorschlagen, dass du für einfache Feedback-fragen dieses Thema verwendest und kein neues eröffnest. Ich habe das Thema entsprechend angepasst.

Zu deinem Code:
Man kann es so machen, allerdings würde ich für die Ermittlung des Maximums folgendes machen:
Code:
for i=1:n
    x(i)=input(['Bitte Komponente für ' num2str(i) ' eingeben.']);
end


% grösste Komponente ermitteln
[groesste, index] = max(x);
fprintf(['Die größte Zahl (' num2str(groesste) ') wurde als ' num2str(index) '. eingegeben.'])

% Vektor ausgeben
fprintf('\nDer eingegebene Vektor lautet:\n')
disp(x);


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
firebirder
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2009, 15:50     Titel:
  Antworten mit Zitat      
super, danke für die Titeländerung. Jetzt geht es darum das Kreuzprodukt dieser beiden Vektoren zu errechnen und auszugeben.
Der Befehl ist ja cross(Vektor1,Vektor2)

Aber ich bekomme das Ansprechen der Vektoren nicht hin.

Code:
clear all
clc


% Vektoren  eingeben
x = zeros(2,3);
for k=1:2    
    fprintf(['\nBitte Vektor ' num2str(k) ' eingeben:\n'])
        for l=1:3
            x(k,l)=input(['x' num2str(l) ' = ']);
        end
end

% Vektoren ausgeben
for k=1:2
    fprintf(['\nDer eingegebene Vektor ' num2str(k) ' lautet:\n'])
    for l=1:3
        fprintf('%3d\n', x(k,l))
    end
end

% Kreuzprodukt ist vektor c
disp('Das Kreizprodukt ist der neue Vektor C. Dieser lautet: ')
kreuz=cross(x(k,l));
disp(kreuz)


kann ich denen nicht Namen wie A oder B zuweisen?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 25.05.2009, 16:02     Titel:
  Antworten mit Zitat      
Kannst du machen:
Code:

A = x(1,:);
B = x(2,:);
 

oder aber du verwendest diese Schreibweise gleich für das Kreuzprodukt:
Code:
kreuz=cross(x(1,:),x(2,:));


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
firebirder
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2009, 16:32     Titel:
  Antworten mit Zitat      
Matlab ist ein nettes Tool, heute Morgen wusste ich da noch nicht was auf mich zukommt. So jetzt habe ich auch die Auswahl für die Berechnung des Summenvektors, Skalarprodukt und Kreuzproduktes eingebaut.
Klappt soweit:

Code:

clear all
clc


% Vektoren  eingeben
x = zeros(2,3);
for k=1:2    
    fprintf(['\nBitte Vektor ' num2str(k) ' eingeben:\n'])
        for l=1:3
            x(k,l)=input(['x' num2str(l) ' = ']);
        end
end

% Vektoren ausgeben
for k=1:2
    fprintf(['\nDer eingegebene Vektor ' num2str(k) ' lautet:\n'])
    for l=1:3
        fprintf('%3d\n', x(k,l))
    end
end

%Vektoren zuweisen
A = x(1,:);
B = x(2,:);

%Auswahl der Berechnung

fun=input('Was soll berechnet werden?\n   1. Summenvektor\n   2. Skalarprodukt\n   3. Kreuzprodukt\n');
switch fun
    %Summenvektor
    case 1
        summe=A+B;
        disp(['Der Summenvektor lautet ' num2str(summe)])
       
       
    %Skalarprodukt
    case 2
        skalar=dot(A,B);
        disp(['Das Skalarprodukt lautet ' num2str(skalar)])
       
    %Kreuzprodukt
    case 3
        kreuz=cross(A,B);
        disp(['Das Kreuzprodukt lautet ' num2str(kreuz)])
       
    otherwise
        disp('Falsche Eingabe')
end






Nächste Frage: Formatieren sie diesen Plot, dass die Datenpunkte mit Symbolen gekennzeichnet werden und die Linien grün sind:

Code:
clear all
clc
close

%Tabelle
x=[0.3 1.1 2.3 2.9 3.8 4.2 5.5 6.4 7.2 8.5 9.7];
y=[0.0 1.1 1.4 3.3 4.3 3.2 3.7 4.4 4.7 3.8 3.0];

%Ausgabe der Grafik
plot(x, y '.r')
 

Ich bekomme immer nnur die Linienfarbe geändert, aber keine Punkte zu sehen.

Selbst fix rausgefunden:
Code:
plot(x,y,'.r', x,y,'-g')
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 25.05.2009, 17:53     Titel:
  Antworten mit Zitat      
Sieht doch schon gut aus da oben.

Ja, Matlab ist schon eine Klasse für sich...

Zu deinem neuen Problem: Such mal in der Hilfe nach "linespec" da findest du alle möglichen Linienarten und Symbole.
Code:
plot(x,y,'.r', x,y,'-og')


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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 - 2024 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.