Как ускорить построение графиков с помощью pause ()? - PullRequest
0 голосов
/ 05 марта 2019

Я понимаю, что при построении уравнения для x итераций, когда вы используете паузу с десятичным числом, вы можете ускорить время, необходимое для перехода от одной итерации к следующей.Мой вопрос, есть ли способ ускорить его еще больше?В основном я использую уравнение адвекции 1D против ветра, и мой график работает довольно медленно, даже когда я ставлю паузу, скажем, 0,0001.Любой совет по увеличению скорости этой программы для построения графиков, или мне просто нужно, чтобы она работала.Вот код, который я использую:

clear;
clc;
%Set initial values
xmin=0; 
xmax=1;
N=101; %Amount of segments
dt= 0.0001; % Time step
t=0; % t initial
tmax=2; % Run this test until t=2
u=1; %Velocity

dx = (xmax - xmin)/100 %finding delta x from the given information
x =xmin-dx : dx : xmax+dx; %setting the x values that will be plugged in

h0= exp(-(x- 0.5).^2/0.01); %Initial gaussian profile for t=0
h = h0;
hp1=h0;
nsteps =tmax/dt; % total number of steps taken
for n=1 : nsteps
    h(1)=h(end-2); %Periodic B.C
    h(end)=h(2);

    for i =2 : N+1
        if u>0

            hp1(i) = h(i) - u*dt/dx *( h(i)-h(i-1)); %Loop to solve the FOU
        elseif u<0
            hp1(i) = h(i) - u*dt/dx*(h(i+1)-h(i)); %downwind
        end

    end

    t=t+dt; %Increase t after each iteration
    h= hp1; %have the new hp1 equal to h for the next step
    initial= exp(-(x- 0.5).^2/0.01); % The initial plot when t =0
    %hold on
    plot(x,initial,'*') %plot initial vs moving
    plot(x,h,'o-')
    pause(0.0001);
    %hold off

    figure(2)
    plot(x,initial) %plot end value
end

1 Ответ

0 голосов
/ 05 марта 2019

Разве это не "ускорение" из-за pause (), очищающего графический буфер событий, как drawnow, но, очевидно, делает это быстрее ?Так что это не длина паузы, выполняющей какую-либо работу (на самом деле, я не думаю, что разрешение находится в миллисекундном диапазоне на многих машинах), а только сама команда.

То, что действительно замедляет ваш код, это циклы for.Вместо этого вы должны попытаться изменить код для параллельного вычисления сегментов.

...