Storing values from for-loop into a matrix
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Rami Abdelhadi
am 21 Apr. 2022
Kommentiert: KSSV
am 22 Apr. 2022
Hello, this is my first time using MATLAB. I only have very limited experience using VBA and that has been years since. I have a project for a class, and I can't seem to store my data in a matrix. I am calculating values in a for-loop but cannot increment through the matrix (namely, M_isentropic) since my increment is not an integer. I've found that multivariable for-loops are not an option in MATLAB. Any solution for this? Thanks
p.s. I originally found this code online and have been trying to tweak it to make it work for my incremental situation.
increment = length/0.01;
V = nan(1,increment);
T = nan(1,increment);
ARatio_Inc = nan(1,increment);
M_isentropic = nan(1,increment);
% Set up the solver
for i = 0.00001:0.01:length
length_Inc = 0 + i;
h_exit_Inc = 2.0*(tan(theta_t) * length_Inc+0.5*h_throat);
ARatio_Inc = h_exit_Inc / h_throat;
problem.objective = @(Msup) (1/Msup^2)*(((2+gm1*Msup^2)/gp1)^(gp1/gm1))-ARatio_Inc^2;
problem.solver = 'fzero';
problem.options = optimset(@fzero);
% Solve supersonic root
problem.x0 = [1+1e-6 50];
M_isentropic(1,i) = fzero(problem);
% Print solutions to command window
% fprintf('==== MATLAB SOLVER ====\n');
% fprintf('Msup: %3.4f\n',M_isentropic);
% fprintf('=======================\n\n');
% The calculated temperature at each M_isentropic.
T(1,i) = ((1 + M_isentropic(1,i)^2 * (gamma-1)/2)^-1)*T_stag;
% The calculated velocities at each M_isentropic
V(1,i) = M_isentropic(1,i)*sqrt(gamma*287.058*T(1,i));
end
disp(M_isentropic)
0 Kommentare
Akzeptierte Antwort
KSSV
am 21 Apr. 2022
Bearbeitet: KSSV
am 21 Apr. 2022
In MATLAB array indices should be posititve integers, in the given code, i the loop index is used as index in T, V; i is not an integer and it will throw error. So change the code as shown below:
increment = length/0.01;
V = nan(1,increment);
T = nan(1,increment);
ARatio_Inc = nan(1,increment);
M_isentropic = nan(1,increment);
% Set up the solver
count = 0 ;
for i = 0.00001:0.01:length
count = count+1 ;
length_Inc = 0 + i;
h_exit_Inc = 2.0*(tan(theta_t) * length_Inc+0.5*h_throat);
ARatio_Inc = h_exit_Inc / h_throat;
problem.objective = @(Msup) (1/Msup^2)*(((2+gm1*Msup^2)/gp1)^(gp1/gm1))-ARatio_Inc^2;
problem.solver = 'fzero';
problem.options = optimset(@fzero);
% Solve supersonic root
problem.x0 = [1+1e-6 50];
M_isentropic(1,i) = fzero(problem);
% Print solutions to command window
% fprintf('==== MATLAB SOLVER ====\n');
% fprintf('Msup: %3.4f\n',M_isentropic);
% fprintf('=======================\n\n');
% The calculated temperature at each M_isentropic.
T(1,count) = ((1 + M_isentropic(1,i)^2 * (gamma-1)/2)^-1)*T_stag;
% The calculated velocities at each M_isentropic
V(1,count) = M_isentropic(1,i)*sqrt(gamma*287.058*T(1,count));
end
disp(M_isentropic)
2 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!