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 | 2684 (1980) | lebdim |
» | matematika kotne funkcijeOddelek: Šola | 2435 (2206) | celada |
» | Matematika - kotne funkcije pomočOddelek: Šola | 1751 (1635) | amigo_no1 |
» | Statika- trenjeOddelek: Šola | 2644 (2291) | gzibret |
» | LimitiranjeOddelek: Znanost in tehnologija | 3142 (2332) | CHAOS |