lehmanett

Matlab (Монте-Карло)

Apr 21st, 2021 (edited)
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.37 KB | None | 0 0
  1. clear all, clc, close all
  2. %%%%%%% Расчет площади круга методом Монте-Карло
  3. r = 5;
  4. x0 = 1;
  5. y0 = 2;
  6. %%% Построение окружности
  7. t = 0 : r/500 : 2*pi;
  8. x = r*cos(t) + x0;
  9. y = r*sin(t) + y0;
  10. line(x, y, 'linew', 2, 'color','r')
  11. %%% Центр круга
  12. line(x0,y0,'marker','o','markerfacecolor','r','color', 'r' )
  13. %%% Построение квадрата, в который вписан круг
  14. line([x0-r, x0+r],[y0+r, y0+r], 'lines','-.')
  15. line([x0-r, x0+r],[y0-r, y0-r], 'lines','-.')
  16. line([x0+r, x0+r],[y0-r, y0+r], 'lines','-.')
  17. line([x0-r, x0-r],[y0-r, y0+r], 'lines','-.')
  18. %%% Генерирование случайных чисел для области D*
  19. N = 500; %%% число испытаний
  20. %%% Генерация чисел по горизонтальной стороне квадрата
  21. rx = min(x) + (max(x) - min(x))*rand(N,1);
  22. %%% Генерация чисел по вертикальной стороне квадрата
  23. ry = min(y) + (max(y) - min(y))*rand(N,1);
  24. %%%% Заполнение случайными числами квадрата с кругом
  25. for J = 1 : N
  26. line(rx(J),ry(J),'marker','o','markersize',2,'color', 'k','markerfacecolor', 'k' )
  27. end
  28. %%% Подсчет количества случайных чисел, попавших в круг
  29. m = 0;
  30. for J = 1 : N
  31. if (rx(J) - x0)^2 + (ry(J) - y0)^2 <= r^2
  32. m = m + 1;
  33. end
  34. end
  35. %%%%% Расчет площади квадрата
  36. S = ((x0+r) - (x0-r))^2;
  37. %%%%% Расчет числа ПИ
  38. pi1 = m*4/N
  39. %%% Расчет площади круга методом Монте-Карло
  40. S0 = m/N*S
  41. %%% Проверка расчета
  42. Scontrol = pi*r^2
  43. %%% Заголовок для диаграммы
  44. str = sprintf('%s Радиус круга r = %g, координаты центра x_0 = %g, y_0 = %g.%s%g%s%g. %s%g%s%g', '\bf',r,x0,y0, ...
  45. '\newline Теоретическая площадь круга S = ', Scontrol, '\newline Значение числа pi = ', pi1, 'Площадь круга по методу Монте-Карло S0 = ', S0, ...
  46. '\newlineЧисло испытаний N = ', N);
  47. title(str)
  48. grid on
  49. xlabel('\bf - - - - - - - X - - - - - - - ')
  50. ylabel('\bf - - - - - - - Y - - - - - - - ')
  51. %%% Ограничения по осям
  52. xlim([x0 - r - r/10, x0 + r + r/10])
  53. ylim([y0 - r - r/10, y0 + r + r/10])
  54. axis equal
Add Comment
Please, Sign In to add comment