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

In for Schleife wird kein passender Vektor erzeugt

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2012, 19:57     Titel: In for Schleife wird kein passender Vektor erzeugt
  Antworten mit Zitat      
Moin,

im Folgenden der Code der irgendein Problem mit der Vektorlänge hat.
Wenn ich das Programm laufen lasse bekomme ich die Fehlermeldung

"??? In an assignment A(I) = B, the number of elements
in B and I must be the same.
Error in ==> testfile at 235
F(k)=[m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp];"

Hier kann er mit dem F(k) nicht umgehen, bei der auskommentierten Zeile G(k) passiert das gleiche, wenn das (k) enthalten ist.
Hat jemand eine Idee warum das Programm nicht mit dem wachsenden Vektor umgehen kann, auch wenn die Werte zu k=1 und k=2 definiert sind? Die Länge der Vektoren sind zueinander passend, d.h. sie sind soweit gleich lang bzw. die Länge der Vektoren der rechten Seite stimmen überein und sollen besagten Vektor der linken Seite ergeben.


Code:


....

G(1)=0;
G(2)=0;

F(1)=0;
F(2)=0;

Deltat= 0.051;
for k= 3:1:1000
%  Initialwerte der Schleife bekannt/ bestimmt => einsetzten
% (Startwerte oder Werte aus Schleife (6.))

% Geschwindigkeit in x-Richtung bestimmen

up(k)=(X(k-1)+m*v(k-1)*r(k-1)+ m*xG*r(k-1)^2)/(m - Xup);

%Trapezregel: A(f) = (x2-x1)*0,5*(y(1)+y(2)) = Schrittweite * 0,5 * (Fkt.wert Stützstelle 1 + Fkt.wert Stü.ste2)
%Schrittweite = Deltat

u1(k)=(up(k-1)+up(k-2))*0.5*Deltat; %Versuchp vorher up, dieser Variablenname kollidiert mit up darüber, überschreiben sich gegenseitig

%u1(k)=uvonup(k);
%u1(k)=Versuchp(k);

deltaU(k)=(u1(k-1)-u1(k)); %deltaU = (u-Unull)

% Geschwindigkeiten in y-Richtung und um z-Achse bestimmen

v(k)=(vp(k-1)+vp(k-2))*0.5*Deltat;
r(k)=(rp(k-1)+rp(k-2))*0.5*Deltat;

%v(k)=vp(k);
%r(k)=rp(k);

% 6) Beschleunigungen in y-Richtung und um z-Achse bestimmen


H(k)=Y(k-1)-m*u1(k)*r(k);
I(k)=N(k-1)-m*xG*u1(k)*r(k);

%G(k)=[Y(k-1)-m*u1(k)*r(k);N(k-1)-m*xG*u1(k)*r(k)];


G=H(k)*[1;0]+I(k)*[0;1];
F(k)=[m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp];

%%%H = (F\G)' = [rp; vp]  E = F^-1 *G
vp(k) = (F(k)\G)' .* [0 1] * [0;1];
rp(k) = (F(k)\G)' .* [1 0] * [1;0];

...

end
 



Viele Grüße
Jan


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2012, 20:55     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist: du versuchst eine Matrix in ein Element eines Vektors zu schreiben. Das kann nicht gehen.

Wenn es wirklich beabsichtigt ist, verschiedene Matrizen in F zu speichern, würde ich empfehlen, ein Cell Array zu verwenden. Wenn die Matrizen alle gleich groß sind, ist auch ein 3D-Double-Array denkbar.

Mehr kann ich dazu erstmal nicht sagen, weil die Möglichkeiten auch von der Art der anderen Variablen abhängen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2012, 23:46     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich nun mat2cell einzig auf G(k) anwende, bekomme ich die Fehlermeldung das ich ein cell array nicht durch F(k) (oder F, F setzt sich aus Konstanten zusammen) teilen kann.

??? Undefined function or method 'mldivide' for input
arguments of type 'cell'.

Error in ==> testfile at 236
vp(k) = (F\G(k))' .* [0 1] * [0;1];


Wenn ich auf G(k) und F(k) mat2cell anwende bekomme ich folgende Warnungen und Fehlermeldungen:

Warning: Single input behavior is obsolete and will be
removed in a
future release of MATLAB. Use C={X} instead.
> In mat2cell at 54
In testfile at 230
Warning: Single input behavior is obsolete and will be
removed in a
future release of MATLAB. Use C={X} instead.
> In mat2cell at 54
In testfile at 232

??? The following error occurred converting from cell
to double:
Error using ==> double
Conversion to double from cell is not possible.

Error in ==> testfile at 232
F(k)=mat2cell([m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp]);


Die Warnung sollte im Moment wahrscheinlich weniger wichtig sein.
Generell bestehen die Variablen nur aus Skalaren.

Wie könnte ich obig geschildertes Problem lösen? Die Mathworks Homepage hat mir mit diversen x2y Erläuterungen bisher nicht weiterhelfen können und auch in diversen Foren bin ich noch nicht fündig geworden.

Hier nochmals der Code:

Code:


for k= 3:1:1000

%  Initialwerte der Schleife bekannt/ bestimmt => einsetzten
% (Startwerte oder Werte aus Schleife (6.))

% Geschwindigkeit in x-Richtung bestimmen

up(k)=(X(k-1)+m*v(k-1)*r(k-1)+ m*xG*r(k-1)^2)/(m - Xup);

%Trapezregel: A(f) = (x2-x1)*0,5*(y(1)+y(2)) = Schrittweite * 0,5 * (Fkt.wert Stützstelle 1 + Fkt.wert Stü.ste2)
%Schrittweite = Deltat

u1(k)=(up(k-1)+up(k-2))*0.5*Deltat; %Versuchp vorher up, dieser Variablenname kollidiert mit up darüber, überschreiben sich gegenseitig

%u1(k)=uvonup(k);
%u1(k)=Versuchp(k);

deltaU(k)=(u1(k-1)-u1(k)); %deltaU = (u-Unull)

% Geschwindigkeiten in y-Richtung und um z-Achse bestimmen

v(k)=(vp(k-1)+vp(k-2))*0.5*Deltat;
r(k)=(rp(k-1)+rp(k-2))*0.5*Deltat;

%v(k)=vp(k);
%r(k)=rp(k);

% 6) Beschleunigungen in y-Richtung und um z-Achse bestimmen

%G(k)=mat2cell([Y(k-1)-m*u1(k)*r(k);N(k-1)-m*xG*u1(k)*r(k)]);

G(k)=mat2cell([Y(k-1)-m*u1(k)*r(k);N(k-1)-m*xG*u1(k)*r(k)]);

F=([m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp]);
%F(k)=mat2cell([m-Yvp,m*xG-Yrp;m*xG-Nvp,Iz-Nrp]);

%%%H = (F\G)' = [rp; vp]  E = F^-1 *G
vp(k) = (F\G(k))' .* [0 1] * [0;1];
rp(k) = (F\G(k))' .* [1 0] * [1;0];
 



Viele Grüße
Jan
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.01.2012, 23:57     Titel:
  Antworten mit Zitat      
Hallo,

weil du dann in das Cell Array mit {} indizieren musst, um an den Inhalt zu kommen.

Bitte zudem möglichst einen reproduzierbaren Code zur Verfügung stellen.

Grüße,
Harald
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.