Отчет по лабораторной работе № 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