Отчет по лабораторной работе № 7 «Компьютерное моделирование» «Компьютерное моделирование физических

advertisement
Отчет по лабораторной работе № 7
по дисциплине: «Компьютерное моделирование»
на тему: «Компьютерное моделирование физических
процессов»
Вариант 1.
Выполнил: Батищев Д.С.
Проверила: Голощапова В.А.
Урсол Д.В.
Белгород 2012
Значения переменных для задания 1, 2.
Xmax
Na
dx
no
4
30
0.01
100
A
0.05
AB
0.1
Значения переменных для задания 3.
Для всех вариантов – количество испытаний N=2000.
f(x)
a
b
ymax
sin(x)+2
0
3
max f(x) на [a,b]
Значения переменных для задания 4.
x1
Импульс p1
dt
3
5
0.02
Задание 1.
Построить модель прохождения частицами пучка некоторого слоя
заданной ширины и имеющим заданное эффективное сечение поглощения,
используя метод Монте-Карло. Условия выполнения приведены далее.
function res = task1( Na, n, dA, dx, xmax )
res = 0;
k = (1 : 1 : Na)';
x = zeros(size(k));
sc = ones(size(k));
dW = n * dA * dx;
hl = line(x, k);
set(hl, 'Marker', 'o', 'MarkerSize', 1);
axis([0 1 0 Na]);
while( (any(sc) > 0) & (x < xmax) )
ra = rand(size(k));
k1 = find(ra - dW < 0);
sc(k1) = 0;
x = x + sc * dx;
set(hl, 'XData', x);
pause(0.1);
end;
end
Листинг 1. Решение задачи 1.
Рис. 1. Решение задачи 1.
Задание 2.
Построить модель (используя метод Монте-Карло) прохождения
частицами пучка некоторого слоя заданной ширины и имеющим заданное
эффективное сечение поглощения с учетом превращения частиц А пучка в
частицы В (эффективное сечение превращения задано). Условия выполнения
приведены далее.
function res = task2( Na, n, dA, dAB, dx, xmax )
res = 0;
k =
x =
scA
scB
(1 : 1 : Na)';
zeros(size(k));
= ones(size(k));
= zeros(size(k));
dWa = n * dx * dA;
dWab = n * dx * dAB;
hl = line(x,k);
set(hl, 'Marker', 'o', 'MarkerSize', 1);
axis([0 1 0 Na]);
while( (any(scA) > 0) & (all(x) < xmax) )
ra = rand(size(k));
ka = find(ra - dWa < 0);
scA(ka) = 0;
kb = find( (dWa < ra) & (ra < dWa + dWab) );
scB(kb) = scA(kb);
scA(kb) = 0;
x = x + scA * dx + scB * dx;
set(hl, 'XData', x);
pause(0.1);
end;
end
Листинг 2. Решение задачи 2.
Рис. 2. Решение задачи 2.
Задание 3.
Найти значение определенного интеграла методом Монте-Карло.
Построить график функции f(x) и отметить на графике «случайные»
точки, образованные при решении.
function res = task3( f, var, a, b, n )
res = 0;
f = sym(f);
eval( ['sym ' var ';'] );
xx = [ a : 0.1 : b ];
yy = zeros( 1, length(xx) );
for i = 1 : 1 : length(xx)
yy(i) = subs(f, 'x', xx(i));
end;
ymax = max(yy);
x = zeros(1, n);
y = zeros(1, n);
n1 = 0; n2 = 0;
for i = 1 : 1 : n
x(i) = a + (b - a) * rand(1);
y(i) = ymax * rand(1);
f_x = subs(f, 'x', x(i));
if( y(i) <= f_x )
n1 = n1 + 1;
else
n2 = n2 + 1;
end;
end;
plot( xx, yy, 'sr', x, y, '.k' );
end
Листинг 3. Решение задачи 3.
Рис. 3. Решение задачи 3.
Задание 4.
Построить фазовую траекторию математического маятника.
Визуализируйте процесс движения самого математического маятника.
Уменьшая шаг dt, убедитесь, что фазовая траектория воспроизводится
при этом без изменений в течение нескольких периодов. Увеличивая шаг,
достигните такой его величины, чтобы появилось явно видимое искажение
формы фазовой траектории. Изобразите несколько разных фазовых
траекторий.
function res = task4( x, p, dt )
res = 0;
axis([-pi pi -pi pi]);
hl = line(x, p);
set(hl, 'EraseMode', 'none', 'LineStyle', ':', 'Color', 'r');
grid on;
pause;
x2 = 0;
while( (sin(x2) > pi) || (sin(x2) < pi) )
x2 = x + p * dt;
p2 = p - sin(x2) * dt;
if( x2 > pi )
x2 = x2 - 2 * pi;
end;
if( x2 < -pi )
x2 = x2 + 2 * pi;
end;
set(hl, 'XData', x2, 'YData', p2);
x = x2; p = p2;
end;
end
Листинг 4. Решение задачи 4
Download