Matlab 数学建模之算法笔记(1)--蒙特卡洛算法

$数模算法/蒙特卡洛算法
    蒙特卡洛算法,是我接触并应用的第一个算法,求解永磁轴承的数学模型的解--这种数学模型是一个四重积分。一般来说,用常规的积分数值算法,如柱形积分、梯形积分计算量都会随着积分维度的提高而成几何增长。而蒙特卡洛算法不会,只是会形成一个超几何体(维度大于3的体)。
    形象的讲,蒙特卡洛算法与生物学上的一种统计实践方法原理类似: 高中生物书上写的如何得知一片森林里有多少鸟,抓几只,弄上记号,放了,再捉,看下有标记的鸟占第二次抓鸟总数的比例,就可以算出来这篇森林里有多少只鸟
    这里的森林就是超几何体,而所求的解  (所占体积) = 总数(超几何体体积) X 比例 。
    这里给出经典的求解圆周率 Pi 的M代码:

清除数据、变量:

%% Monte Carlo calculate for Pi

% Simple Type
clear,clc;
close all;
求解PI:
n = 1e4;
rng(0);
PI = 4 * mean( rand( n, 1 ) .^ 2 + rand( n, 1 ) .^ 2 < 1);
fprintf( '圆周率Pi:%f\n',PI );
显示:
figure(1)
plot( [0 1 1],[1 1 0],'b' );
axis([0 2 0 2]);
hold on;
rng(0);
x = rand( n, 1 );
y = rand( n, 1 );
for i = 1 : n
    if x( i )^ 2 + y( i )^ 2 < 1
       plot( x( i ),y( i ),'.r' );
    end
end
title('Monte Carlo 求解圆周率Pi');
legend(' 正方形区域',' 1/4圆形区域');
hold off;

结果:

Matlab 数学建模之算法笔记(1)--蒙特卡洛算法_第1张图片

你可能感兴趣的:(Matlab 数学建模之算法笔记(1)--蒙特卡洛算法)