Aesthetic99
Forum-Newbie
Beiträge: 7
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
Verfasst am : 25.08.2014, 10:20
Titel : Broadcasting Fehler
Hey Leute, ich glaub ich steh irgenddwie auf dem Schlauch und komm nicht vowärts. Bei mir hat sich irgendwo ein Broadcast Fehler mit den Dimensionen von meinen Matrizen eingeschlichen aber igendwie seh ich ihn nicht :?
Kann mir jemand weiterhelfen?
Code:
sat.M = 5 ;
sat.r = 2e7;
w_az = 1e-4 * randn ( 1 , 5 ) ;
w_el = 1e-4 * randn ( 1 , 5 ) ;
sat.az = [ 0 , pi /2 , pi , 3 /2 *pi , 0 ] + w_az( ones ( L, 1 ) , :) .* t;
sat.el = [ 0.5 * pi , 0.25 * pi , 0.35 * pi , 0.2 * pi , 0.3 * pi ] + w_el( ones ( L, 1 ) , :) .* t;
sat.pos = zeros ( sat.M , sat.M , L) ;
for k=1 :L
sat.pos ( :, :, k) = sat.r * [ cos ( sat.az ( k) ) .* cos ( sat.el ( k) ) ;
sin ( sat.az ( k) ) .* cos ( sat.el ( k) ) ; sin ( sat.el ( k) ) ] ;
end
Schonmal Danke im Vorraus :)
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 25.08.2014, 10:24
Titel :
Hallo,
was meinst du mit "Broadcast(ing) Fehler"?
Wie sind L und t definiert?
Grüße,
Harald
Aesthetic99
Themenstarter
Forum-Newbie
Beiträge: 7
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
Verfasst am : 25.08.2014, 10:33
Titel :
Hier ist die Fehlerausgabe:
warning: product: automatic broadcasting operation applied
warning: operator +: automatic broadcasting operation applied
warning: product: automatic broadcasting operation applied
warning: operator +: automatic broadcasting operation applied
error: makeTestbed: A(I,J,...) = X: dimensions mismatch
error: called from:
Und hier die Definition der Parameter:
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 25.08.2014, 10:50
Titel :
Hallo,
angesichts der Fehlermeldung frage ich mich: nutzt du wirklich MATLAB?
Ich bekomme die Meldung
Zitat:
Error using .*
Matrix dimensions must agree.
Error in somecode (line 10)
sat.az = [0, pi/2, pi, 3/2*pi, 0] + w_az(ones(L, 1), :) .* t;
Das liegt an
Falls du spaltenweise mit t multiplizieren willst, kannst du bsxfun verwenden.
Grüße,
Harald
Aesthetic99
Themenstarter
Forum-Newbie
Beiträge: 7
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
Verfasst am : 25.08.2014, 11:06
Titel :
Ok danke dir. Ne ich hab gerade Octave, bin an meinem Heimrechner.
Habs jetzt so:
Code:
w_az = 1e-4 * randn ( 1 , 5 ) ;
w_el = 1e-4 * randn ( 1 , 5 ) ;
sat.az = [ 0 , pi /2 , pi , 3 /2 *pi , 0 ] + bsxfun ( @plus ,w_az( ones ( L, 1 ) , 1 ) ,t) ;
sat.el = [ 0.5 * pi , 0.25 * pi , 0.35 * pi , 0.2 * pi , 0.3 * pi ] + bsxfun ( @plus ,w_az( ones ( L, 1 ) , 1 ) ,t) ;
sat.pos = zeros ( sat.M , sat.M , L) ;
for k=1 :L
sat.pos ( :, :, k) = sat.r * [ cos ( sat.az ( k) ) .* cos ( sat.el ( k) ) ;
sin ( sat.az ( k) ) .* cos ( sat.el ( k) ) ; sin ( sat.el ( k) ) ] ;
end
Spuckt aber immernoch den gleichen Fehler aus und zwar in der sat.pos(:,:,k) Zeile.
Gruß,
Alex
Harald
Forum-Meister
Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 25.08.2014, 11:45
Titel :
Hallo,
Zitat:
Ne ich hab gerade Octave, bin an meinem Heimrechner.
Dann bitte zukünftig ins Octave-Forum.
Wenn multipliziert werden soll, musst du @times verwenden.
Zitat:
Spuckt aber immernoch den gleichen Fehler aus und zwar in der sat.pos(:,:,k) Zeile.
Ich bekomme schon vorher einen Fehler, weil bei der Addition von
[0, pi/2, pi, 3/2*pi, 0]
noch dasselbe Problem vorliegt.
Ich würde folgendes vorschlagen:
Code:
sat.az = bsxfun ( @plus , [ 0 , pi /2 , pi , 3 /2 *pi , 0 ] , bsxfun ( @times ,w_az( ones ( L, 1 ) , 1 ) ,t) ) ;
sat.el = bsxfun ( @plus , [ 0.5 * pi , 0.25 * pi , 0.35 * pi , 0.2 * pi , 0.3 * pi ] , bsxfun ( @times ,w_az( ones ( L, 1 ) , 1 ) ,t) ) ;
In der von dir genannten Zeile ist dann das Problem, dass du einer 5x5-Matrix einen 3x1-Vektor zuweisen willst, was eben nicht geht. Mit dem Debugger solltest du das aber auch selbst rausfinden können.
Grüße,
Harald
Aesthetic99
Themenstarter
Forum-Newbie
Beiträge: 7
Anmeldedatum: 18.08.14
Wohnort: ---
Version: ---
Verfasst am : 26.08.2014, 12:14
Titel :
Ok Danke für die Hilfe.
Hab das Problem wie folgt gelöst:
Code:
w_az = 1e-4 * randn ( 1 , 5 ) ;
w_el = 1e-4 * randn ( 1 , 5 ) ;
sat.az = bsxfun ( @plus , [ 0 , pi /2 , pi , 3 /2 *pi , 0 ] , bsxfun ( @times ,w_az( ones ( L, 1 ) , 1 ) ,t) ) ;
sat.el = bsxfun ( @plus , [ 0.5 * pi , 0.25 * pi , 0.35 * pi , 0.2 * pi , 0.3 * pi ] , bsxfun ( @times ,w_az( ones ( L, 1 ) , 1 ) ,t) ) ;
sat.pos = zeros ( 3 , sat.M , L) ;
for k=1 :L
sat.pos ( :,:,k) = sat.r * [ cos ( sat.az ( k,:) ) .* cos ( sat.el ( k,:) ) ; sin ( sat.az ( k,:) ) .* cos ( sat.el ( k,:) ) ; sin ( sat.el ( k,:) ) ] ;
end
Jetzt wird kein Fehler mehr ausgegeben.
Liebe Grüße, Alex
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
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.