Forum » Programiranje » MATLAB - zlaganje členov iz matrike v novo matriko n-krat
MATLAB - zlaganje členov iz matrike v novo matriko n-krat

mirch ::
Pozdravljeni! Imam majhen problem v matlabu ... Kako bi posamezen element te matrike (
- v tem primeru so dimenzije 8x3x3, ampak se dimenzije spreminjajo!) postavil v novo matriko.
Kot sem že omenil se dimenzije matrike spreminjajo (ni nujno da je velikost matrike vedno 8x3x3), ter teh matrik je 9 (JA do JI) - ampak so vse enake velikosti kot prva!!!
Kako bi torej zložil posamezne komponente matrik JA, JB, JC, JD, JE, JF, JG, JH, JI v nove matrike.
Nova matrika bi se generirala toliko krat koliko je členov v npr. JA! Izgled naslednje matrike bi bil takšen: Jac=[JA,JB,JC;JD,JE,JF;JG,JH,JI]
torej če je členov 8x3x3 = 72, bi bilo 72 matrik Jac, katere bi vsebovale po en člen matrike JA, JB, JC, JD, JE, JF, JG, JH, JI
Prosim za pomoč! Upam da razumete moje vprašanje. LP
- v tem primeru so dimenzije 8x3x3, ampak se dimenzije spreminjajo!) postavil v novo matriko.
Kot sem že omenil se dimenzije matrike spreminjajo (ni nujno da je velikost matrike vedno 8x3x3), ter teh matrik je 9 (JA do JI) - ampak so vse enake velikosti kot prva!!!
Kako bi torej zložil posamezne komponente matrik JA, JB, JC, JD, JE, JF, JG, JH, JI v nove matrike.
Nova matrika bi se generirala toliko krat koliko je členov v npr. JA! Izgled naslednje matrike bi bil takšen: Jac=[JA,JB,JC;JD,JE,JF;JG,JH,JI]
torej če je členov 8x3x3 = 72, bi bilo 72 matrik Jac, katere bi vsebovale po en člen matrike JA, JB, JC, JD, JE, JF, JG, JH, JI
Prosim za pomoč! Upam da razumete moje vprašanje. LP
- spremenil: mirch ()

darkkk ::
Dej z indeksi napiš :) Ven iz tega ne morem niti razbrati, kake naj bi bile dimenzije rezultata.

MaFijec ::
Odgovor na tvoje težave je uporaba : in ukaza reshape.
Pravilno se tvojim strukturam reče tenzorji.
Najprej uporabiš flatten JA(:), ki ti elemente tenzorje zloži v stolpec.
Torej recimo
A = [JA(:), JD(:), JG(:), JB(:), JE(:), JH(:), JC(:), JF(:), JI(:)];
A = A'; %reshape deluje po stolpcih v katerih so zdaj istoležni elementi matrik (linearni indeksi)
T = reshape(A, 3, 3, 72);
Tole je bilo na pamet, tako da so lahko kake težave :)
Pravilno se tvojim strukturam reče tenzorji.
Najprej uporabiš flatten JA(:), ki ti elemente tenzorje zloži v stolpec.
Torej recimo
A = [JA(:), JD(:), JG(:), JB(:), JE(:), JH(:), JC(:), JF(:), JI(:)];
A = A'; %reshape deluje po stolpcih v katerih so zdaj istoležni elementi matrik (linearni indeksi)
T = reshape(A, 3, 3, 72);
Tole je bilo na pamet, tako da so lahko kake težave :)

mirch ::
Jaz sem se zdaj teka lotil na naslednji način, vendar imam težave pri velikosti matrik, pa ne vem še kje:)
%TEST IZRAČUNA MATRIKE
clear all
% dimenzije robota ACMA XR701%
a1 = 250;
d1 = 645;
a2 = 1000;
a3 = 230;
d2 = 1587.4;
% branje minimalne vrednosti
x_min = 1;
y_min = 2;
z_min = 3;
% skaliranje vrednosti
x_res = 1;
y_res = 1;
z_res = 1;
% branje maksimalne vrednosti
x_max = 3;
y_max = 8;
z_max = 5;
% grupiranje podatkov v točke
x = [x_min:x_res:x_max]';
y = [y_min:y_res:y_max]';
z = [z_min:z_res:z_max]';
% ustvarjanje mreže
[X, Y, Z] = meshgrid(x, y, z);
%scatter3 (X(:), Y(:), Z(:), 10)
% izračun notranjih koordinat
S3 = sin(a3);
C3 = cos(a3);
B = d2*S3 - a3*C3;
SB = sqrt(-(B*B)+a3*a3+d2*d2);
q3 = atan2(a3,d2)-atan2(B, SB);
S2 = sin(a2);
C2 = cos(a2);
q2 = atan2(S2,C2);
q1 = atan2(Y,X);
[AM,BM,CM]=size(q1);
JA = (-d2*cos(q1)*cos(q2)*sin(q3)-d2*cos(q1)*sin(q2)*cos(q3)-a3*cos(q1)*cos(q2)*cos(q3)+a3*cos(q1)*sin(q2)*sin(q3)-a2*cos(q1)*cos(q2)+a1*sin(q1)); % "levi zgoraj"
JB = (d2*sin(q1)*sin(q2)*sin(q3)-d2*sin(q1)*cos(q2)*cos(q3)+a3*sin(q1)*sin(q2)*cos(q3)+a3*sin(q1)*cos(q2)*sin(q3)+a2*sin(q1)*sin(q2)+a1*cos(q1)); % "sredina zgoraj"
JC = (-d2*sin(q1)*cos(q2)*cos(q3)+d2*sin(q1)* sin(q2)*sin(q3)+a3*sin(q1)*cos(q2)*sin(q3)+a3*sin(q1)*sin(q2)*cos(q3)-a2*sin(q1)*cos(q2)+a1*cos(q1)); % "desno zgoraj"
JD = (-d2*sin(q1)*cos(q2)*sin(q3)-d2*sin(q1)*sin(q2)*cos(q3)-a3*sin(q1)*cos(q2)*cos(q3)+a3*sin(q1)*sin(q2)*sin(q3)-a3*sin(q1)*cos(q2)+a3*cos(q1)); % "levi v sredini"
JE = (-d2*cos(q1)*sin(q2)*sin(q3)+d2*cos(q1)*cos(q2)*cos(q3)-a3*cos(q1)*sin(q2)*cos(q3)-a3*cos(q1)*cos(q2)*sin(q3)-a3*cos(q1)*sin(q2)+a3*sin(q1)); % "sredina v sredini"
JF = (d2*cos(q1)*cos(q2)*cos(q3)-d2*cos(q1)*sin(q2)*sin(q3)-a3*cos(q1)*cos(q2)*sin(q3)-a3*cos(q1)*sin(q2)*cos(q3)+a3*cos(q1)*cos(q2)+a3*sin(q1)); % "desni v sredini"
JG = (d2*sin(q2)*sin(q3)+d2*cos(q2)*cos(q3)+a3*sin(q2)*cos(q3)+a3*cos(q2)*sin(q3)+a2*sin(q2)+d1); % "levi spodaj"
JH = (d2*cos(q2)*sin(q3)+d2*sin(q2)*cos(q3)+a3*cos(q2)*cos(q3)-a3*sin(q2)*sin(q3)+a2*cos(q2)+d1); % "sredinski spodaj"
JI = (d2*sin(q2)*cos(q3)+d2*cos(q2)*sin(q3)-a3*sin(q2)*sin(q3)+a3*cos(q2)*cos(q3)+a2*sin(q2)+d1); % "desni spodaj"
n = 1;
for i = 1:AM;
for j = 1:BM
for k = 1:CM
Jac(n) = [JA(i,j,k), JB(i,j,k), JC(i,j,k); JD(i,j,k), JE(i,j,k), JF(i,j,k); JG, JH, JI];
n = n+1;
end
end
end
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | matematika- trigonometrijaOddelek: Šola | 2802 (2098) | lebdim |
» | matematika kotne funkcijeOddelek: Šola | 2580 (2351) | celada |
» | Matematika - kotne funkcije pomočOddelek: Šola | 1812 (1696) | amigo_no1 |
» | Statika- trenjeOddelek: Šola | 2730 (2377) | gzibret |
» | LimitiranjeOddelek: Znanost in tehnologija | 3222 (2412) | CHAOS |