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

For schleife!!!

 

Sergio_R
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 08.12.09
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 08.12.2009, 13:07     Titel: For schleife!!!
  Antworten mit Zitat      
Hallo an alle!

Ich habe das folgende Problem.

Ich muss die folgenden beiden Zeilen mit eine For-Schleife berechnen.

Code:
dist = spkPos' - obsPos'*ones(1,spkNum);
dist = sqrt(dist(1,:).^2 + dist(2,:).^2);

a,b,c sind dabei Konstanten.

Ich habs versucht und ich krieg immer den Fehler:
Error using ==> *
Matrix dimensions must agree.

Die Aufgabenstellung lautet:

Code:
% Abstände berechnen
dist = spkPos' - obsPos'*ones(1,spkNum);
dist = sqrt(dist(1,:).^2 + dist(2,:).^2);


Diese Zeilen könnten auch mit einer for-Schleife realisiert werden, allerdings ist die Ausführung von for-Schleifen häufig (gerade bei großen Matrizen) wesentlich langsamer als die von Matrixoperationen.
Geben sie an, wie Sie alternativ mit Hilfe einer for-Schleife die Abstände dist berechnen würden!

Code:
%#######################################
% Geometrie

% Lautsprecherpositionen (in x,y)
spkPos = [0 30; 70 0; 140 0; 210 30; 0 120; 70 150; 140 150; 210 120];
spkNum = size(spkPos,1);

% Beobachterposition (in x,y)
obsPos = [25 0];
% Geometrie plotten
figure(1); hold off;
plot(spkPos(:,1),spkPos(:,2),'ob','Markersize',10,'LineWidth',2); hold on;
plot(obsPos(:,1),obsPos(:,2),'xr','Markersize',10,'LineWidth',2)
axis([-50 250 -50 200]);

% Abstände berechnen
%dist = spkPos' - obsPos'*ones(1,spkNum);
o=ones(1,spkNum);
for ind = 2:spkNum-1;
    dist = spkPos' - obsPos'*o(ind);
end

%dist = sqrt(dist(1,:).^2 + dist(2,:).^2);
for i=n:1:2
    dist = sqrt(dist(i).^2 + dist(i).^2);
end

% calculate sound field params
[Amp,Delay] = soundprop(dist);
%################################


Könnten ihr mir bitte helfen wo ich den Fehler mache.

Über Hilfe würde ich mich rießig freue.



Edit by Martin: Bitte in Zuklunft selbst die Code-Formatierung verwenden. Danke! Smile
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.12.2009, 15:13     Titel:
  Antworten mit Zitat      
Hi,

ich möchte dir nicht unbedingt die Aufgabe lösen. Aber ich kann dir womöglich ein paar tipps geben. Guck dir die beiden gegeben Zeilen mal genau an. Damit meine nimm sie auseinander und versuche genau zu verstehen was da passiert. Lass ersteinmal das Program bis zu der Stelle laufen, führe dann einzelne Teile aus, und schau dir an wie diese dann wieder multipliziert und voneinander abgezogen werden.

Dann würde ich dies versuchen nachzubauen, zunächst den ersten Teil und dann den zweiten. An deinen Schleifen sehe ich, dass du das Problem noch nicht gänzlich verstanden hast. Z.B. brauchst du in der Schleife keinen vektor der aus nur einsen besteht (Vektor o=ones ...). Und so weiter. Sag Bescheid wenn du etwas weiter bist.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Sergio_R
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 08.12.09
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 08.12.2009, 20:30     Titel:
  Antworten mit Zitat      
hmm also ich ziehe drei unterschiedliche Matrixe als erstens 2x8 Matrix - 2x1 Matrix abzuziehen dann mit 1x1 Matrix zu mutliplizieren.

2x8-2x1*1x1

weil es unterschiedliche Matrixen sind bekomme ich den Fehler von Matlab "Matrix Dimensions must be agree".

eine sache ist noch unklar für mich.
Die m und n sind immer unterschiedlich kann ich die so definieren:

Code:
%

spkPos=[m,n]
obs=[m,n]

spkPos = [0 30; 70 0; 140 0; 210 30; 0 120; 70 150; 140 150; 210 120];
obsPos = [25 0];

for i = 1:m
    for j = 1:n
        dist(i,j) = spkPos(i,j)- obsPos(i,j)*ones(1,spkNum);
    end
end
 


Gruß
Sergio
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 09.12.2009, 14:21     Titel:
  Antworten mit Zitat      
Hi,

wahrscheinlich meinst du size() ??? Mit size kann man die Größe einer Matrix bestimmen.

Viele Grüße,

der Oli
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.