Сюжет Два массива значения в Matlab - PullRequest
0 голосов
/ 08 июня 2019

Итак, я попытался Plot все значения (h,rex)

но его plot только последние значения из них.

Я думаю, что должен использовать array, но я не знаю, как это сделать. я надеюсь помочь мне!

        clc

Pr=1.05;
lam=0.167;
l=2;
rex=100;
while (rex<2900) 
disp('rex');
disp(rex);
h=((0.664*Pr^(1/3)*lam)/l)*rex^(1/2) ;
disp('h');
disp(h);
rex=rex+100;
end
plot(rex,h);

1 Ответ

0 голосов
/ 08 июня 2019

Вы не сохраняете свои промежуточные значения, поэтому rex и h перезаписываются каждый раз, и доступны только значения из последней итерации.Решите это, сохранив значения в массиве:

Pr=1.05;
lam=0.167;
l=2;
rex=100;

rex_array = [];
h_array = [];
while (rex<2900) 
    h=((0.664*Pr^(1/3)*lam)/l)*rex^(1/2) ;
    rex=rex+100;
    % store values in array (appending)
    rex_array(end+1) = rex;
    h_array(end+1) = h;
end

figure(1); clf;
plot(rex_array,h_array);

Это не рекомендуется, поскольку rex_array и h_array увеличиваются в размере с каждой итерацией.Таким образом, вместо этого вы используете цикл for.

rex = 100:100:2900; % or to give same result as the while loop: 100:100:2800
h = zeros(size(rex)); % initialize h to be a zero vector with the same size as rex

% loop over rex
for k = 1:numel(rex) 
    % store each value in h(k):
    h(k)=((0.664*Pr^(1/3)*lam)/l)*rex(k)^(1/2) ;
end

figure(1); clf;
plot(rex,h);

Хотя лучше всего полностью избежать цикла и использовать векторизацию:

rex = 100:100:2900; % or to give same result as the while loop: 100:100:2800
h=((0.664*Pr^(1/3)*lam)/l)*rex.^(1/2);

Используя .^ каждый элемент в rex будет в квадрате по элементам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...