How to create an empty array to be filled?

891 次查看(过去 30 天)
Hi everyone,
I have this:
Ma=[];
d=yq1-yq1;
A=pi*(d.*d)/4;
mdot=(A.*Ma*P0*sqrt(k/(R*T0)))/(1+(k-1)*Ma^2/2)^((k+1)/(2*(k-1)));
(I highlighted important part)
A is a 1x100 array and I need Ma is to be 1x100 vector too. But I got this error:
Error using .*
Matrix dimensions must agree.
How can I create an empty 1x100 Ma array which will be calculated with the equation above?
All helps are appriciated!

采纳的回答

Steven Lord
Steven Lord 2020-5-18
What value or values do you want to be stored in Ma before that line of code executes?
Take a look at the list of functions in the "Create and Combine Arrays" section and the "Creating, Concatenating, and Expanding Matrices" Topic on this documentation page for some functions that may be useful in defining your Ma vector.
  2 个评论
Ezgi Polat
Ezgi Polat 2020-5-18
Actually my aim to compute the values for Ma and then store them in the matrix. Other then Ma every other variables have specific values so there must be only one Ma matrix for those values.
Steven Lord
Steven Lord 2020-5-18
Call fzero once per element of the variables that you know that are not scalars (1-by-1) to solve mdot-(A.*Ma*P0*sqrt(k/(R*T0)))/(1+(k-1)*Ma^2/2)^((k+1)/(2*(k-1))) = 0 for Ma.
Alternately if you have Symbolic Math Toolbox you could solve the system(s) symbolically for Ma as a function of a symbolic variable A then use subs to substitute the array of values for A into the symbolic solution.

请先登录,再进行评论。

更多回答(3 个)

TADA
TADA 2020-5-18
Ma is a 0x0 empty vector:
Ma = []
Ma =
[]
You can't multiply your 1x100 vector A by that using element by element multiplatinum, you have to set something of the same size as A into Ma

Kamilu Sanusi
Kamilu Sanusi 2022-8-27
Hello everyone. Please can someone explain the essense of creating empty matrix A, B, YG, & E in the following program:
% Winkel(zeit)=0-atan(arbeitspunkt.Vy(3)/arbeitspunkt.Vx(3))*180/pi;
PP(:,zeit)=arbeitspunkt.P;
QQ(:,zeit)=arbeitspunkt.Q;
UXT(zeit,:)=arbeitspunkt.Vx;
UYT(zeit,:)=arbeitspunkt.Vy;
IXT(zeit,:)=arbeitspunkt.Ix;
IYT(zeit,:)=arbeitspunkt.Iy;
A=[];
B=[];
YG=[];
E=[];
for i=1:size(DatGen,1)
[Gen, delta, Eq]=Generator(DatGen(i,:), arbeitspunkt);
% Matrix der Systemgelcihung von Generator i
% Ai(i)={Gen.Axy};
% Bi(i)={Gen.Bxy};
% YGi(i)={Gen.YGxy};
% Ei(i)={Gen.Exy};
% Matrix der Systemgelcihung von allen Generatoren
A=blkdiag(A, Gen.Axy);
B=blkdiag(B, Gen.Bxy);
YG=blkdiag(YG, Gen.YGxy);
E=blkdiag(E, Gen.Exy);

Alisha
Alisha 2022-9-23
编辑:Steven Lord 2022-9-23
[SL: removed spam link]
It is not possible to create a blank array and then allow it to grow dynamically each time a user types a number into the command line. Instead, you ought to read the integers and add them to an Array. An ArrayList can grow dynamically and does not require an initial size.
  1 个评论
Steven Lord
Steven Lord 2022-9-23
It is possible to create an empty array and fill it by growing it dynamically. That's not a very efficient technique, though. Prefer to preallocate the array and fill it in so it doesn't have to grow with each new element you add to it.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

产品


版本

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by