Как поменять сюжет на фильм в Matlab?
Я пытаюсь понять, как работает Movie in Matlab, я никогда не использовал его раньше. У меня есть код для уравнения теплопроводности, который находит температуру для количества сегментов, которые я решаю поставить на длину объекта (стержня). Я могу построить нормальный график, который показывает все значения при разных условиях. Я в левом поле, пытаясь понять, как превратить это в фильм.
A=0.1; %Diffusivity or conductivity (switching for variable K)
L=1; %Length of rod
dt= 10^(-4); %value of timestep
X=100; %Wants to Discretize rod into 100 separate sections
t= 10; % 50 timesteps will be taken (dt)
dx=L/X; %delta X needed for the heat equation for this case Pi/100
x1=linspace(0, L, X); %Take 100 equally spaced sections between 0 and L
y1=linspace(0, t, 51);
T1= zeros(X,t); %set a X x t matrix of zeros
%Set boundary and initial conditions
%T0=0; Ends of rod temperature are 0
%TL=0;
%Create a for loop to continuously solve the heat equation until time is up
for i= 2:X-1 %X-1 because we already know initial point
for j=1:50 % used to update heat equation each step
T1(:,1)= sin((pi*x1(i))/L);%start solving the heat equation at second
% value in the matrix in column 1 (skip
% 1st because we have initial condition)
T1(1,:) = 0; %Gives the first column = 0
T1(100,:) = 0; %Gives last column = 0 just as initial conditions state
%Heat Equation for T^n+1 (i)
T1(i,j+1)= A*dt*((T1(i+1,j)-2*T1(i,j)+T1(i-1,j)/dx^2))+ T1(i,j);
end
end
figure(1)
plot(x1,T1);
Любой совет будет отличным. Я посмотрел несколько разных примеров из постов других людей, однако, похоже, что все они не получают доступ к фильму одинаково.
1 ответ
movie
требует, чтобы у вас была серия изображений RGB в памяти, и они хранятся в массиве структур, предназначенных для movie
функция.
Что вы можете сделать, это построить один сигнал за один раз с hold on
, Кроме того, вы можете использовать getframe
на самом деле захватить каждый график в изображение, чтобы получить необходимый формат для movie
, объединить все это в массив структур и, наконец, воспроизвести фильм.
Я вижу, что вы рисуете все свои сигналы одновременно с одним столбцом на сигнал. Чтобы сделать это легко, сделайте другой for
Цикл и цикл по каждому сигналу в отдельности - по одному на столбец и график их по одному.
A=0.1; %Diffusivity or conductivity (switching for variable K)
L=1; %Length of rod
dt= 10^(-4); %value of timestep
X=100; %Wants to Discretize rod into 100 separate sections
t= 10; % 50 timesteps will be taken (dt)
dx=L/X; %delta X needed for the heat equation for this case Pi/100
x1=linspace(0, L, X); %Take 100 equally spaced sections between 0 and L
y1=linspace(0, t, 51);
T1= zeros(X,t); %set a X x t matrix of zeros
%Set boundary and initial conditions
%T0=0; Ends of rod temperature are 0
%TL=0;
%Create a for loop to continuously solve the heat equation until time is up
for i= 2:X-1 %X-1 because we already know initial point
for j=1:50 % used to update heat equation each step
T1(:,1)= sin((pi*x1(i))/L);%start solving the heat equation at second
% value in the matrix in column 1 (skip
% 1st because we have initial condition)
T1(1,:) = 0; %Gives the first column = 0
T1(100,:) = 0; %Gives last column = 0 just as initial conditions state
%Heat Equation for T^n+1 (i)
T1(i,j+1)= A*dt*((T1(i+1,j)-2*T1(i,j)+T1(i-1,j)/dx^2))+ T1(i,j);
end
end
figure(1)
hold on; % New
% New - To store the frames for the movie
frames = repmat(struct('cdata', [], 'colormap', []), 50, 1);
for j = 2 : 51
plot(x1,T1(:,j));
frames(j - 1) = getframe(gcf);
end
close all; % Close the figure
% Play the movie
figure;
movie(frames, 1, 5); % Play the movie once at 5 frames per second
Новый код будет хранить требуемый график в виде изображений - хотя вы должны будете видеть график, чтобы захватить кадры. После этого мы закрываем фигуру и воспроизводим фильм со скоростью 5 FPS. После этого вам нужно просто запустить последний movie
Команда для воспроизведения фильма столько раз, сколько хотите. Второй параметр указывает, сколько раз вы хотите, чтобы фильм повторялся, а третий параметр указывает количество кадров в секунду фильма.