Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Creazione di una matrice 3D (Matlab)

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteIanero » 25 lug 2019, 21:44

Ho 3 vettori di lunghezze diverse:

\underline{\theta}=\begin{bmatrix}
\theta_1\\ 
\theta_2\\... 
\\ \theta_l

\end{bmatrix}

\underline{v}=\begin{bmatrix}
v_1\\ 
v_2\\... 
\\ v_m

\end{bmatrix}

\underline{k}=\begin{bmatrix}
k_1\\ 
k_2\\... 
\\ k_n

\end{bmatrix}

e vorrei costruire tre distinte matrici, tutte della stessa dimensione mxnxl (3D), fatte così (per ogni posizione, riporto 3 elementi, uno per ogni matrice che voglio ottenere):

primo strato
\begin{bmatrix}
\theta_1/v_1/k_1 & \theta_1/v_1/k_2 & ... & \theta_1/v_1/k_n \\
\theta_1/v_2/k_1 & \theta_1/v_2/k_2 & ... & \theta_1/v_2/k_n \\
&...&\\
\theta_1/v_m/k_1 & \theta_1/v_m/k_2 & ... & \theta_1/v_m/k_n
\end{bmatrix}

secondo strato
\begin{bmatrix}
\theta_2/v_1/k_1 & \theta_2/v_1/k_2 & ... & \theta_2/v_1/k_n \\
\theta_2/v_2/k_1 & \theta_2/v_2/k_2 & ... & \theta_2/v_2/k_n \\
&...&\\
\theta_2/v_m/k_1 & \theta_2/v_m/k_2 & ... & \theta_2/v_m/k_n
\end{bmatrix}

...

ultimo strato
\begin{bmatrix}
\theta_l/v_1/k_1 & \theta_l/v_1/k_2 & ... & \theta_l/v_1/k_n \\
\theta_l/v_2/k_1 & \theta_l/v_2/k_2 & ... & \theta_l/v_2/k_n \\
&...&\\
\theta_l/v_m/k_1 & \theta_l/v_m/k_2 & ... & \theta_l/v_m/k_n
\end{bmatrix}

Vorrei ovviamente evitare di crearla con cicli for o cose simili, che in Matlab sono quasi sempre di troppo.

Esiste qualche scorciatoia che me lo fa fare in un paio di righe?
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3765
Iscritto il: 21 mar 2012, 15:47

0
voti

[2] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteRLC » 26 lug 2019, 23:11

Ciao
Sei sicuro che le componenti delle varie matrici siano giuste? perché trovare delle correlazioni/serie dei pedici (trovarle servirà per automatizzare il codice) sembra un po' un rompicapo in stile "test QI" :D

Tuttavia, comincerei guardando qui:
https://it.mathworks.com/help/matlab/math/multidimensional-arrays.html
Avatar utente
Foto UtenteRLC
230 1 1 7
New entry
New entry
 
Messaggi: 65
Iscritto il: 26 ago 2018, 17:45

0
voti

[3] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteIanero » 26 lug 2019, 23:57

Non è che esista un giusto.
A me servono così, chiedevo se ci fosse un modo standard di farlo con le potenzialità di Matlab o se in effetti bisogna ricorrere al for.
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3765
Iscritto il: 21 mar 2012, 15:47

1
voti

[4] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteMarkyMark » 27 lug 2019, 10:37

Il comando repmat è utile in questo caso

Codice: Seleziona tutto
theta = (1:2)';
v = (3:5)';
k = (6:9)';
l = length(theta);
m = length(v);
n = length(k);

A1(1:m,1:n,1:l) = theta(1);
A1(:,1,:) = repmat(theta',m,1);

A2(1:m,1:n) = repmat(v,1,n);
A2(:,:,1:l) = repmat(A2,1,1,l);

A3(1:m,1:n) = repmat(k',m,1);
A3(:,:,1:l) = repmat(A3,1,1,l);


Spero di aver interpretato correttamente la tua richiesta.
mark
Avatar utente
Foto UtenteMarkyMark
2.785 2 3 5
Master
Master
 
Messaggi: 453
Iscritto il: 11 giu 2016, 12:01

0
voti

[5] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteIanero » 27 lug 2019, 10:59

MarkyMark ha scritto:A1(:,1,:) = repmat(theta',m,1);

Questa mi mancava, grande.
Non sapevo che Matlab capisse da solo di dover distribuire le colonne.
Ottimo, grazie mille. :-)
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3765
Iscritto il: 21 mar 2012, 15:47

1
voti

[6] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteIanero » 27 lug 2019, 11:19

No però aspetta c'è un problema con A1, le altre due vanno bene.
La matrice è corretta solo nella prima colonna di ogni strato. Ora bisognerebbe dirgli di replicare la matrice A1(:,1,:) lungo la seconda dimensione per n volte.

Dovrebbe andare così:

Codice: Seleziona tutto
A1(1:m,1,1:l) = repmat(theta',m,1);
A1(:,1:n,:)=repmat(A1,1,n,1);


Concordi?

EDIT: avevo indicato male in [1] la richiesta sulla matrice dei vari \theta, colpa mia, ho corretto adesso.
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3765
Iscritto il: 21 mar 2012, 15:47

1
voti

[7] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteMarkyMark » 27 lug 2019, 11:32

Sì, hai ragione. Ho sbagliato a leggere il primo post #-o



Come hai detto, si può costruire prima uno degli strati mxl e poi lo si replica n volte :ok:
mark
Avatar utente
Foto UtenteMarkyMark
2.785 2 3 5
Master
Master
 
Messaggi: 453
Iscritto il: 11 giu 2016, 12:01

0
voti

[8] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteIanero » 27 lug 2019, 11:44

Grazie Foto UtenteMarkyMark :D
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3765
Iscritto il: 21 mar 2012, 15:47

2
voti

[9] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteIanero » 27 lug 2019, 12:10

Ho appena scoperto che si può fare tutto in una sola riga:

Codice: Seleziona tutto
theta = (1:2)';
v = (3:5)';
k = (6:9)';

[A1,A2,A3] = ndgrid(v,k,theta);


Quant'è potente questo linguaggio.
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3765
Iscritto il: 21 mar 2012, 15:47

1
voti

[10] Re: Creazione di una matrice 3D (Matlab)

Messaggioda Foto UtenteMarkyMark » 27 lug 2019, 12:17

Fantastico! Grazie :D
mark
Avatar utente
Foto UtenteMarkyMark
2.785 2 3 5
Master
Master
 
Messaggi: 453
Iscritto il: 11 giu 2016, 12:01


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti