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 in for-Schleife ??

 

Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2014, 19:32     Titel: for-Schleife in for-Schleife ??
  Antworten mit Zitat      
Hi! Komme seit Tagen mit meinem Algorithmus nicht weiter - hoffentlich könnt ihr mir helfen...Smile

Ich babe x,y Koordinaten...

x=linspace(-0.06,0.06,100)
y=linspace(-0.06,0.06,100)

In jeder Koordinate findet eine Summation über n=100 Kanäle statt sowie eine Quadrierung dieser Summe...

-> ich habe den algorithmus für einen Punkt über n Kanäle (also f(n) für definierten Punkt) - aber wie erreiche ich diese Berechnung für das gesamte grid der x,y Koordinaten?

Mein Ziel ist eine Matrix mit 100x100 Werten...

Bitte Um Hilfe! Danke Wink


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.12.2014, 20:05     Titel:
  Antworten mit Zitat      
Zitat:
aber wie erreiche ich diese Berechnung für das gesamte grid der x,y Koordinaten?

tja da musst du schon mehr erklären ^^
Zitat:
In jeder Koordinate findet eine Summation über n=100 Kanäle statt sowie eine Quadrierung dieser Summe...
ist da leider nicht ausreichend.
der befehl
Code:
könnte helfen.
am besten du postest mal ein lauffähiges code beispiel. was klappt? was klappt nicht? wie weichen die erzielten ergebnisse von den erwarteten ab?
je genauer deine frage ist desdo einfacher kann man helfen. 90% der zeit verbringt man damit rauszufinden was gefragt ist ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2014, 22:41     Titel:
  Antworten mit Zitat      
Hallo Winkow, Danke! Smile

Hier der Algorithmus für einen Punkt...mein Ziel ist eine Matrix Ir(x,y)...mit 100x100 Koordinaten Smile

mit x=linspace(-0.05,0.05,100), y=linspace(-0.05,0.05,100)

Bei den Kanälen sind Daten, Koordinaten der Antennen etc. vorhanden (nicht wichtig)...wichtig ist eben nur die Summe über 128 Kanäle und das Quadrat davon...


Code:
k=1 %Drehung
x= -0.05 %m
y= -0.05 %m
z= -0.02  %m
cm =299792458/sqrt(28) %Geschwindigkeit_Medium

for n=1:128
   
  I1(n)= Ch{1,n}.Data(round(((sqrt((Ch{1,n}.Tx.x(1,k)-xr).^2+(Ch{1,n}.Tx.y(1,k)-yr).^2+(Ch{1,n}.Tx.z(1,k)-zr).^2)+...
   sqrt((Ch{1,n}.Rx.x(1,k)-xr).^2+(Ch{1,n}.Rx.y(1,k)-yr).^2+(Ch{1,n}.Rx.z(1,k)-zr).^2))/cm)/(Ch{1,1}.dt_propag)),k)


II=sum(I1)
Ir=II.^2 %Intensität_Quadrat

end




Vielen lieben Dank!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.12.2014, 16:48     Titel:
  Antworten mit Zitat      
hallo kate
bitte verwende die code umgebung wenn du code postest. ich hab das mal für dich eingefügt.
die für anfänger leichteste möglichkeit für dein problem wären 2 verschachtelte schleifen über die x und y werte. und dann eine zuordnung zur zeilmatrix. kürzer wäre die möglichkeit über meshgrid etc. allerdings überschauhe ich grade nicht deine restlichen variablen das ich dir dafür die vertige lösung geben könnte.
grüße winkow
ps so dann mit schleifen
Code:
k=1 %Drehung
x=linspace(-0.06,0.06,100)
y=linspace(-0.06,0.06,100)
for m=1:numel(x)
for l=1:numel(y)
z= -0.02 %m
cm =299792458/sqrt(28) %Geschwindigkeit_Medium

for n=1:128

I1(n)= Ch{1,n}.Data(round(((sqrt((Ch{1,n}.Tx.x(1,k)-x).^2+(Ch{1,n}.Tx.y(1,k)-y).^2+(Ch{1,n}.Tx.z(1,k)-z).^2)+...
sqrt((Ch{1,n}.Rx.x(1,k)-x).^2+(Ch{1,n}.Rx.y(1,k)-y).^2+(Ch{1,n}.Rx.z(1,k)-z).^2))/cm)/(Ch{1,1}.dt_propag)),k)
end

II=sum(I1)
Ir(m,l)=II.^2 %Intensität_Quadrat
end
end
 

anmerkung. ich hab jetzt keine präallikation benutzt. das sind ja nicht so viele felder. bei größeren matritzen sollte man das dann aber schon machen Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2014, 17:11     Titel:
  Antworten mit Zitat      
Vielen Dank, Winkow...beim Vektor I1(n) bekomme ich die Fehlermeldung
"In an assignment A(I) = B, the number of elements in B and I must be the same"...

alternativ könnte ich diesen Code anbieten Smile



Code:

m=1 % Drehung
xr=-0.05:0.001:0.05; %m 101Einträge
yr=-0.05:0.001:0.05; %m 101Einträge
[X Y]=meshgrid(xr,yr);
z=-0.02  %m
cm =299792458/sqrt(28)%Geschwindigkeit_Medium
dt = 4.80769230769231e-12 %Sample_Abstand

for n=1:128 % Anzahl Kanäle
   

s(n)= sqrt((Ch{n}.Tx.x(1,m)-X).^2+(Ch{n}.Tx.y(1,m)-Y).^2+(Ch{n}.Tx.z(1,m)-z).^2)+...
            sqrt((Ch{n}.Rx.x(1,m)-X).^2+(Ch{n}.Rx.y(1,m)-Y).^2+(Ch{n}.Rx.z(1,m)-z).^2) %Weg
t(n)=s(n)/cm % Zeit
Nn(n)=t(n)/ dt %Sample
N=round(N) %Sample_gerundet
I1(n)= Ch{n}.Data(N(n),m) %Intensität
II=sum(I1) %Summe_Intensität
Ir=II.^2 %Summe_Intensität_Quadrat
    end
end


Lieben Dank!!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.12.2014, 17:56     Titel:
  Antworten mit Zitat      
ja stimmt du musst natürlich überall anstelle von x x(m) machen. für y gillt das natürlich dann auch.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2014, 13:56     Titel:
  Antworten mit Zitat      
Hat wunderbar geklappt!! Vielmals Danke!
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2014, 19:13     Titel:
  Antworten mit Zitat      
Hallo Winkow, ich hoffe ich darf dich nochmal was fragen Wink

Ich würde gerne analog zur Schleife mit dem n eine Schleife für das k(for K=1:32) machen...d.h. neben dem Vektor I1(n) in Abh. von x u. y, würde ich gerne einen Vektor I1(k) in Abh. von x u. y. generieren...Am Ende steht dann für jeden Punkt aus dem Grid eine Summation über n (128)Kanäle und k (32) Variationen...also II speist sich aus I1(n) und I1(k) und bildet eine Summe über diese...Ir dann wieder in Abh. von x und y Smile

Hier vllt zur Verdeutlichung was ich meine (kein funktionierender Code)

Code:

x=linspace(-0.06,0.06,100)
y=linspace(-0.06,0.06,100)
for m=1:numel(x)
for l=1:numel(y)
z= -0.02 %m
cm =299792458/sqrt(28) %Geschwindigkeit_Medium

for n=1:128
 for k=1:32

I1(n)= Ch{1,n}.Data(round(((sqrt((Ch{1,n}.Tx.x(1,k)-x).^2+(Ch{1,n}.Tx.y(1,k)-y).^2+(Ch{1,n}.Tx.z(1,k)-z).^2)+...
sqrt((Ch{1,n}.Rx.x(1,k)-x).^2+(Ch{1,n}.Rx.y(1,k)-y).^2+(Ch{1,n}.Rx.z(1,k)-z).^2))/cm)/(Ch{1,1}.dt_propag)),k)

I1(k)= Ch{1,n}.Data(round(((sqrt((Ch{1,n}.Tx.x(1,k)-x).^2+(Ch{1,n}.Tx.y(1,k)-y).^2+(Ch{1,n}.Tx.z(1,k)-z).^2)+...
sqrt((Ch{1,n}.Rx.x(1,k)-x).^2+(Ch{1,n}.Rx.y(1,k)-y).^2+(Ch{1,n}.Rx.z(1,k)-z).^2))/cm)/(Ch{1,1}.dt_propag)),k)

 end
end

II=sum(I1)
Ir(m,l)=II.^2 %Intensität_Quadrat
end
end



Lieben Dank!!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.12.2014, 19:26     Titel:
  Antworten mit Zitat      
das siht für mich auf den ersten blick nach der gleichen berechnung aus. ist aber auch ne sehr lange formel. falls die berechnungen gleich sind musst du doch einfach nur die ersten 32 glieder addieren anstatt alle.
Code:

bei deinem code überschreiben sich beide berechnungen gegenseitig. das ergebniss ist das gleiche aber du fürst 32 mal mehr berechnungen druch ohne zusätzliche informationen zu gewinnen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2014, 19:38     Titel:
  Antworten mit Zitat      
Die Formel für I1(k) und I1(n) ist dieselbe Smile Eben nur 32 Berechnungen mehr für jede Koordinate...wie setze ich das im Code um?
LG!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.12.2014, 19:44     Titel:
  Antworten mit Zitat      
Code:
x=linspace(-0.06,0.06,100)
y=linspace(-0.06,0.06,100)
z= -0.02 %m
cm =299792458/sqrt(28) %Geschwindigkeit_Medium
I1=nan(128,32);
Ir=nan(100,100,32);
for m=1:numel(x)
for l=1:numel(y)
for k=1:32
for n=1:128


I1(n,k)= Ch{1,n}.Data(round(((sqrt((Ch{1,n}.Tx.x(1,k)-x).^2+(Ch{1,n}.Tx.y(1,k)-y).^2+(Ch{1,n}.Tx.z(1,k)-z).^2)+...
sqrt((Ch{1,n}.Rx.x(1,k)-x).^2+(Ch{1,n}.Rx.y(1,k)-y).^2+(Ch{1,n}.Rx.z(1,k)-z).^2))/cm)/(Ch{1,1}.dt_propag)),k)

 end
end

II=sum(I1);
Ir(m,l,:)=II.^2 %Intensität_Quadrat
end
end

ich würde es mal so versuchen dann sind die 32 ergebnisse in der 3. dimension von Ir gespeichert glaube ich. ohne lauffähigen code immer etwas schwer zu debuggen. allerding sind das jetzr schon 40 millionen schleifen druchläufe. vieleicht solltest du mal gucken ob es nicht eine lösung mit vektor rechnung giebt. alternativ lässt sich das ganze denke ich auch paralelisieren falls die berechnun zu lange dauert und du die toolbox dazu besitzt.
Code:

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2014, 18:00     Titel:
  Antworten mit Zitat      
Vielen Dank für den letzten Code - leider brauchte dieser ein bisschen lange.
Hast du evtl. noch eine andere Idee?? Hab zur Veranschaulichung noch eine Grafik angehängt Smile...

f(x,y) entspricht
Code:

I1(n,k)= Ch{1,n}.Data(round(((sqrt((Ch{1,n}.Tx.x(1,k)-x).^2+(Ch{1,n}.Tx.y(1,k)-y).^2+(Ch{1,n}.Tx.z(1,k)-z).^2)+...
sqrt((Ch{1,n}.Rx.x(1,k)-x).^2+(Ch{1,n}.Rx.y(1,k)-y).^2+(Ch{1,n}.Rx.z(1,k)-z).^2))/cm)/(Ch{1,1}.dt_propag)),k)


Sorry für die Umstände und lieben Dank für die Hilfen!
LG

daum_equation_1418576000810.png
 Beschreibung:

Download
 Dateiname:  daum_equation_1418576000810.png
 Dateigröße:  8.37 KB
 Heruntergeladen:  459 mal
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.12.2014, 18:52     Titel:
  Antworten mit Zitat      
Zitat:
Hab zur Veranschaulichung noch eine Grafik angehängt Smile...
hmm n und k kommen deinem bild nicht vor ^^
das x und y ist einfach
Code:
(x*y') .^2

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kate

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2014, 19:28     Titel:
  Antworten mit Zitat      
Bzw. kann ich für jedes k= 1:32 eine andere Variable Ir(k) in einem Vektor bekommen? Und wenn ja wie setze ich das um?

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