Azzera filtri
Azzera filtri

Problem with creating matrix

1 visualizzazione (ultimi 30 giorni)
Maria Sarcos
Maria Sarcos il 27 Nov 2020
Commentato: dpb il 27 Nov 2020
I'm trying to create a 36x36 matrix where each column has two 18x1 vectors stacked. The vectors correspond to deflections in both the y and z direction and were calculated by setting the loads in the y direction (1st potition) as a 1x18 vector where the first value is 1 and others zero ([1 0 0 0 0 ..]), the loads in the z direction were set all to zero with the same vector length.
For the second column of the matrix, the deflection in the y and z direction must be calculated by setting the loads in the z direction(still 1st position) as [0 1 0 0 0 ..] with the same 1x18 length, and the loads in the y direction were all zero.
The deflections in y and z are inside a for loop with 18 positions.
For the third column of the matrix, I need the deflections in y and z but setting the loads in the y direction(now 2nd position) to [0 0 1 0 0 ...] and the loads in z as zero. The forth column would correspond to the loads in the z directions as [0 0 0 1 0 0 ..] and loads in y zero.
Is there a way I could create this matrix with a for loop that changes where the value of "1" in the vectors for the loads is located? I'm trying to solve a vibrations problem involving a flexibility matrix
  5 Commenti
Maria Sarcos
Maria Sarcos il 27 Nov 2020
%FIRST COLUM OF MATRIX, WHERE UX1 AND UY1 ARE COMBINED
pz = zeros(length(r_vec),1);
p1y = zeros(length(r_vec),1);
p1y(1) = 1;
for i = N:-1:2
Ty1(i-1) = Ty1(i) + 0.5*(p1y(i-1) + p1y(i)*(x(i) - x(i-1)));
Tz1(i-1) = Tz1(i) + 0.5*(pz(i-1) + pz(i)*(x(i) - x(i-1)));
My1(i-1) = My1(i) - Tz1(i)*(x(i) - x(i-1)) - (((1/6)*(pz(i-1))) + (((1/3)*(pz(i))))*((x(i) - x(i-1))^2));
Mz1(i-1) = Mz1(i) + Ty1(i)*(x(i) - x(i-1)) + (((1/6)*(p1y(i-1))) + (((1/3)*(p1y(i))))*((x(i) - x(i-1))^2));
end
for i = 1:N
M11(i) = (My1(i)*cosd(twist_vec(i) + pitch)) - (Mz1(i)*sind(twist_vec(i) + pitch));
M21(i) = (My1(i)*sind(twist_vec(i) + pitch)) + (Mz1(i)*cosd(twist_vec(i) + pitch));
k11(i) = M11(i)/EI1(i);
k21(i) = M21(i)/EI2(i);
kz1(i) = (-k11(i)*sind(twist_vec(i) + pitch)) + (k21(i)*cosd(twist_vec(i) + pitch));
ky1(i) = (k11(i)*cosd(twist_vec(i) + pitch)) + (k21(i)*sind(twist_vec(i) + pitch));
end
for i = 1:N-1
thetay1(i+1) = thetay1(i) + (0.5*(ky1(i+1) + ky1(i))*(x(i+1) - x(i)));
thetaz1(i+1) = thetaz1(i) + (0.5*(kz1(i+1) + kz1(i))*(x(i+1) - x(i)));
uy1(i+1) = uy1(i) + (thetaz1(i)*(x(i+1) - x(i))) + ((1/6*kz1(i+1)) + (1/3*kz1(i)))*(x(i+1) - x(i))^2;
uz1(i+1) = uz1(i) - (thetay1(i)*(x(i+1) - x(i))) - ((1/6*ky1(i+1)) + (1/3*ky1(i)))*(x(i+1) - x(i))^2;
end
%SECOND COLUMN OF MATRIX
p1z = zeros(length(r_vec),1);
p1z(2) = 1;
py = zeros(length(r_vec),1);
%SAME LOOPS TO GET TO UY AND UZ
I would like to do this without setting the values for the pz and py vectors every time
dpb
dpb il 27 Nov 2020
What's so hard to just show a small example???
Is the following the pattern you for a 4-element case instead of 18?
M=[1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1];
?
It's two identity matrices except with alternate 0 columns in the two halves?

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Startup and Shutdown in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by