用数学建模Matlab的蒙特卡洛模拟计算、曲线拟合、微分方程解决几个简单问题

1.通过蒙特卡洛模拟计算椭圆方程\frac{x^2}{4}+\frac{y^2}{9}=1的面积。

N = 1e6
a = 3
b = 2
f = 2*a * 2*b
x = 2*a * rand(N, 1) - a
y = 2*b * rand(N, 1) - b
c = (x.^2/a^2 + y.^2/b^2) <= 1
d = sum(c)
e = (d / N) * f
fprintf('通过蒙特卡洛模拟估算的椭圆面积为: %f', e)

 

2.通过蒙特卡洛模拟估算圆周率\pi的值。

N = 1e6
x = rand(N, 1)
y = rand(N, 1)
a = x.^2 + y.^2
b = sum(a <= 1)
pi = 4 * b / N
fprintf('通过蒙特卡洛模拟估算的圆周率pi的值为: %f', pi)

 

3. 

years = [1790,1800,1810,1820,1830,1840,1850,1860,1870,1880,1890,1900,1910,1920,1930,1940,1950,1960,1970,1980,1990];
population = [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76,92,106.5,123.2,131.7,150.7,179.3,204,226.5,251.4];
figure
plot(years,population)
title('某国人口数量')
xlabel('年份')
ylabel('人口(万)')
grid on;
a = 1790;
t = years - a;
b = log(population);
p = polyfit(t,b,1);
c = 2100-a;
d = polyval(p,c);
e = exp(d);
fprintf('预测2100年人口数为:%.2f万',e);

 

4.

v = 1;
dt = 0.01;
t = 10;
A = [-2, 2; 2, 2; 2, -2; -2, -2];
N = round(t / dt);
B = zeros(4, N, 2);
B(:, 1, :) = A;
a = [2, 3, 4, 1];
for t = 2:N
    for i = 1:4
        b = A(i, :);
        c = A(a(i), :);
        d = (c - b) / norm(c - b);
        f = b + v * dt * d;
        B(i, t, :) = f;
        A(i, :) = f;
    end
end
figure;
hold on;
axis equal;
grid on;
plot([-2, 2, 2, -2, -2], [2, 2, -2, -2, 2]);
for i = 1:4
    plot(B(i, :, 1), B(i, :, 2), '-');
end
title('四人的螺旋运动轨迹');
xlabel('X');
ylabel('Y');
hold off;

 

注:有的代码在每行结尾没加英文' ; ',但没影响运行就没管,应该有的。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值