Matrix dimensions must agree error

Hello, I am completing a standard ballistic missile simulation in MATLAB. The code I wrote is the following, I get the error of matrix dimensions in Line 33 but I really don't know how to solve it. The function is also defined as follows:
function [a_x] = a_x(phi,psi,m,P,q,r)
C_a = 0.5;
S_m = 9;
C_alpha_y = 0.2;
C_beta_z = -0.2;
a_x = (1./m).*((cosd(phi).*cosd(psi)).*(P-C_a.*q.*S_m) - sind(phi).*C_alpha_y.*q.*S_m.*alpha.*57.3 + cosd(phi).*sind(psi).*C_beta_z.*q.*S_m.*beta.*57.3) + (mu/r.^3).*x;
end
%Constants
C_a = 0.5;
C_alpha_y = 0.2;
C_beta_z = -0.2;
S_m = 9;
mu = 3.986005e14;
R = 6371004;
m_dot = 1000;
I_sp = 2700;
S_theta = 3.2;
p_0 = 100000;
m_0 = 200000;
%Extract alpha and psi from table
phi = T.phi;
psi = T.psi;
%Get all values for density, pressure, geocentric distance and axial thrust for all registered heights
for h = 1:91*1000
[rho(h,:),p_h(h,:),a(h,:)]=atmosphere(h);
P(h,:) = I_sp*m_dot + S_theta*(p_0 - p_h(h,:));
r(h,:) = h + R;
q(h,:) = 0.5*rho(h)*a(h);
end
%Find m
for t = 1:152
m(t,:) = m_0 - m_dot*t;
end
x = 0; y = 0; z = 0;
%Find a_x,a_y and a_z
for t = 1:152
a_x(phi,psi,m,P,q,r) = a_x(phi,psi,m,P,q,r)*t;
end

7 comentarios

Simon Chan
Simon Chan el 13 de En. de 2022
What are the sizes of variable 'phi' and 'psi'?
Or could you attach the table with variable T here?
KSSV
KSSV el 13 de En. de 2022
What are you trying to do here?
a_x(phi,psi,m,P,q,r) = a_x(phi,psi,m,P,q,r)*t;
We cannot help you unless the input is given.
Adnane Ait Zidane
Adnane Ait Zidane el 13 de En. de 2022
Hello, very sorry about the late reply. I forgot to attach the workspace here, here it is:
Torsten
Torsten el 13 de En. de 2022
phi, psi, m, P, q and r must be of the same size for a_x to work properly.
This is not the case as you can see from the workspace listing.
Adnane Ait Zidane
Adnane Ait Zidane el 13 de En. de 2022
I do understand that, the problem I have is that m,P,q and r are based on altitude so they give me 91000 values because the max altitude considered is 91000m, but the values of psi and phi are based on run time which is 152 seconds. I do not have any relationship that can relate altitude to time since I need the velocity to do that and that is what I am trying to find.
Is there any way to make this run properly without having to delete some values from the ones that have 91000 entries?
Ankit
Ankit el 14 de En. de 2022
you can also convert all your variables to time dependent...
Samuel Clary
Samuel Clary el 14 de En. de 2022
Editada: Samuel Clary el 14 de En. de 2022
Edit: Although this does not solve your problem, I think it may cause errors as soon as the a_x function/inputs are corrected.
I may be missing something, but I believe your syntax is incorrect in this section:
for t = 1:152
a_x(phi,psi,m,P,q,r) = a_x(phi,psi,m,P,q,r)*t;
end
a_x is seen as a function by your code. I understand that in the function itself you have written:
function [a_x] = a_x(phi,psi,m,P,q,r)
But, this does not mean that in the previous section of code the variable a_x will be created by the function a_x. The first section of code should have a different output variable. Such as:
for t = 1:152
Varx(phi,psi,m,P,q,r) = a_x(phi,psi,m,P,q,r)*t;
end
This still is not ideal though because you are esentially overwritting the same variable 152 times. I have not taken the time to look into the output size of your variable from a_x, so my quick suggestion is to throw the answers into cells.
for t = 1:152
Varx{t} = a_x(phi,psi,m,P,q,r)*t;
end
This still is not going to be efficient, and I would recommened using the cell function in Matlab to create the correct number of cells before going into that for-loop.

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Programming en Centro de ayuda y File Exchange.

Productos

Versión

R2018a

Etiquetas

Preguntada:

el 13 de En. de 2022

Editada:

el 14 de En. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by