Имитационное трехмерное моделирования в Matlab
01.10.2023
Помогите с задачей. Нужно выполнить имитационное трехмерное моделирования случайного блуждания по следующему условию: Частица совершает стохастическое движение из центра куба -10=<x=<10, -10=<...
Помогите с задачей. Нужно выполнить имитационное трехмерное моделирования случайного блуждания по следующему условию: Частица совершает стохастическое движение из центра куба -10=<x=<10, -10=<y=<10, -10=<z=<10. При пересечении частицей граней куба генерируется еще две частицы, движущиеся по аналогичному закону. Провести подсчет количества частиц с течением времени и вывести соответствующий график на экран.
Комментарии
Вдруг кому пригодится, я нашёл решение данной задачи и ещё прекрутил анимацию размножения частиц.
% Задаем начальные параметры
num_particles = 1; % Количество начальных частиц
max_time = 30; % Количество временных шагов
% Опытным путём установлено, что кол-во временных шагов не стоит
% выставлять больше 35, иначе моделирование задыхается из-за нехватки
% вычислительной мощности.
% Однако есть и вероятность, что в результате случайных блужданий частица
% так и не столкнётся с границей области.
% Инициализируем массивы для хранения положений и количества частиц
positions = zeros(num_particles, 3);
counts = zeros(max_time, 1);
% Генерируем начальные положения для частиц
positions(:, 1) = rand(num_particles, 1) * 20 - 10; % x
positions(:, 2) = rand(num_particles, 1) * 20 - 10; % y
positions(:, 3) = rand(num_particles, 1) * 20 - 10; % z
% Создаем фигуру для анимации
figure
% Выполняем имитацию трехмерного случайного блуждания
for t = 1:max_time
% Генерируем шаги перемещения для каждой частицы
steps = randn(num_particles, 3);
% Обновляем положения частиц
positions = positions + steps;
% Проверяем пересечение с гранями куба
crossed_indices = any(abs(positions) > 10, 2);
num_crossed = sum(crossed_indices);
% Генерируем новые частицы в точках пересечения
new_positions = positions(crossed_indices, :);
new_steps = randn(num_crossed, 3);
new_positions = new_positions + repmat(new_steps, 1);
% Добавляем новые частицы к общему массиву положений
positions = [positions; new_positions];
% Обновляем количество частиц
counts(t) = size(positions, 1);
% Очищаем график
clf
% Отображаем частицы
scatter3(positions(:, 1), positions(:, 2), positions(:, 3), 'filled')
xlabel('X')
ylabel('Y')
zlabel('Z')
title('Демонстрация размножения частиц')
% Устанавливаем ограничения осей
axis([-10 10 -10 10 -10 10])
% Пауза для создания анимации
pause(0.1)
end
% Строим график количества частиц с течением времени
figure
plot(1:max_time, counts)
xlabel('Время')
ylabel('Количество частиц')
title('Имитационное трехмерное моделирование случайного блуждания')