专栏
标签
全国大学生数学建模大赛,8月15日第2题,打卡
主题活动
发布于 2025-08-19 08:40:53
查看 2过去314天

8月15日 题目二解答说明

题目回顾

今天要解决三个数学问题:

  1. 计算一个二重积分
  2. 计算一个三重积分
  3. 计算一个概率问题

解题思路

1. 二重积分:∫₀²∫₀¹((sin x)•√y + x)dxdy

我的想法:

  • 这个积分看起来有点复杂,但其实就是先对x积分,再对y积分
  • 被积函数是 sin(x) * √y + x,可以分成两部分:sin(x) * √yx
  • 用数值积分的方法,把积分区域分成很多小格子,然后加起来

代码实现:

# 定义被积函数
f1(x, y) = sin(x) * sqrt(y) + x

# 先对x积分(内层积分)
function integrate_x(y)
    n = 1000  # 分成1000段
    dx = 1.0 / n
    sum = 0.0
    for i in 1:n
        x = (i - 0.5) * dx  # 中点法
        sum += f1(x, y) * dx
    end
    return sum
end

# 再对y积分(外层积分)
function integrate_y()
    n = 1000
    dy = 2.0 / n
    sum = 0.0
    for i in 1:n
        y = (i - 0.5) * dy
        sum += integrate_x(y) * dy  # 调用内层积分
    end
    return sum
end

具体做法:

  1. 先把x从0到1分成1000个小段,用中点法计算
  2. 对每个y值,调用integrate_x(y)计算x方向上的积分
  3. 再把y从0到2分成1000个小段,调用integrate_y()计算y方向上的积分
  4. 结果:1.867

2. 三重积分:∫₀^π∫₀¹∫₋₁¹(y sin x + z cos x)dxdydz

我的想法:

  • 这是三重积分,要从里到外一层层算
  • 被积函数是 y * sin(x) + z * cos(x)
  • 积分顺序是:先对z积分,再对y积分,最后对x积分

代码实现:

# 定义被积函数
f2(x, y, z) = y * sin(x) + z * cos(x)

# 最内层:对z积分
function integrate_z(x, y)
    n = 1000
    dz = 2.0 / n
    sum = 0.0
    for i in 1:n
        z = -1.0 + (i - 0.5) * dz  # z从-1到1
        sum += f2(x, y, z) * dz
    end
    return sum
end

# 中间层:对y积分
function integrate_y_triple(x)
    n = 1000
    dy = 1.0 / n
    sum = 0.0
    for i in 1:n
        y = (i - 0.5) * dy
        sum += integrate_z(x, y) * dy  # 调用z积分
    end
    return sum
end

# 最外层:对x积分
function integrate_x_triple()
    n = 1000
    dx = pi / n
    sum = 0.0
    for i in 1:n
        x = (i - 0.5) * dx
        sum += integrate_y_triple(x) * dx  # 调用y积分
    end
    return sum
end

具体做法:

  1. 最里面:integrate_z(x, y)把z从-1到1分成1000段
  2. 中间:integrate_y_triple(x)把y从0到1分成1000段,对每个x调用z积分
  3. 最外面:integrate_x_triple()把x从0到π分成1000段,对每个x调用y积分
  4. 结果:2.000

3. 概率问题:点落在圆内的概率

我的想法:

  • 矩形区域是[0,2]×[0,2],面积是4
  • 圆的方程是x² + y² ≤ 4,半径是2
  • 圆心在(0,0),所以圆完全在矩形内
  • 概率 = 圆的面积 / 矩形的面积

代码实现:

# 定义指示函数:点在圆内返回1,否则返回0
function indicator_circle(x, y)
    if x^2 + y^2 <= 4
        return 1.0
    else
        return 0.0
    end
end

# 理论计算
circle_area = pi * 4      # 圆的面积 = π * 2²
rectangle_area = 4        # 矩形面积 = 2 * 2
probability = circle_area / rectangle_area  # 概率 = π

# 数值积分验证
function integrate_prob_y(x)
    n = 1000
    dy = 2.0 / n
    sum = 0.0
    for i in 1:n
        y = (i - 0.5) * dy
        sum += indicator_circle(x, y) * dy
    end
    return sum
end

function integrate_prob()
    n = 1000
    dx = 2.0 / n
    sum = 0.0
    for i in 1:n
        x = (i - 0.5) * dx
        sum += integrate_prob_y(x) * dx
    end
    return sum
end

具体做法:

  1. 理论计算:圆的面积 = π × 2² = 4π,概率 = 4π/4 = π
  2. 数值验证:用indicator_circle函数判断每个点是否在圆内
  3. 对矩形区域积分,得到圆内点的面积
  4. 结果:π ≈ 3.1416

代码实现要点

数值积分方法

  • 用中点法:(i - 0.5) * dx,精度比矩形法高
  • 每个方向都分成1000段,保证精度
  • 用嵌套循环实现多重积分

函数设计

  • 每个积分方向写一个函数,如integrate_xintegrate_y
  • 从里到外层层调用:integrate_x_triple()integrate_y_triple()integrate_z()
  • 代码结构清晰,容易理解和调试

关键技巧

  • 中点法:(i - 0.5) * dx 而不是 i * dx
  • 函数嵌套:内层函数作为外层函数的被积函数
  • 指示函数:用0/1表示点是否在某个区域内

结果总结

  1. 二重积分结果: 1.867
  2. 三重积分结果: 2.000
  3. 概率结果: π ≈ 3.1416

这些结果看起来都很合理,三重积分的结果接近2,概率是π,都符合数学直觉。

学习收获

  • 数值积分是解决复杂积分的好方法,特别是多重积分
  • 多重积分要一层层算,不能着急,每层都要写清楚
  • 概率问题画图帮助理解,几何意义很重要
  • Julia的数值计算能力很强,代码写起来很简洁
  • 中点法比矩形法精度高,值得记住

7ec08789-4f5f-4c03-9a35-3c4871b33ccb.png
下面是完整代码

# 8月15日 题目二解答 - 积分计算
# --- 第一个二重积分 ---
println("1. 计算二重积分:∫₀²∫₀¹((sin x)•√y + x)dxdy")

# 定义被积函数 f(x, y) = sin(x) * √y + x
f1(x, y) = sin(x) * sqrt(y) + x

# 使用简单的数值积分方法
function integrate_x(y)
    # 对 x 从 0 到 1 积分
    n = 1000  # 分割数
    dx = 1.0 / n
    sum = 0.0
    for i in 1:n
        x = (i - 0.5) * dx  # 中点法
        sum += f1(x, y) * dx
    end
    return sum
end

function integrate_y()
    # 对 y 从 0 到 2 积分
    n = 1000  # 分割数
    dy = 2.0 / n
    sum = 0.0
    for i in 1:n
        y = (i - 0.5) * dy  # 中点法
        sum += integrate_x(y) * dy
    end
    return sum
end

integral1 = integrate_y()
println("第一个二重积分的结果: ", integral1)
println()

# --- 第二个三重积分 ---
println("2. 计算三重积分:∫₀^π∫₀¹∫₋₁¹(y sin x + z cos x)dxdydz")

# 定义被积函数 f(x, y, z) = y * sin(x) + z * cos(x)
f2(x, y, z) = y * sin(x) + z * cos(x)

function integrate_z(x, y)
    # 对 z 从 -1 到 1 积分
    n = 1000  # 分割数
    dz = 2.0 / n
    sum = 0.0
    for i in 1:n
        z = -1.0 + (i - 0.5) * dz  # 中点法
        sum += f2(x, y, z) * dz
    end
    return sum
end

function integrate_y_triple(x)
    # 对 y 从 0 到 1 积分
    n = 1000  # 分割数
    dy = 1.0 / n
    sum = 0.0
    for i in 1:n
        y = (i - 0.5) * dy  # 中点法
        sum += integrate_z(x, y) * dy
    end
    return sum
end

function integrate_x_triple()
    # 对 x 从 0 到 π 积分
    n = 1000  # 分割数
    dx = pi / n
    sum = 0.0
    for i in 1:n
        x = (i - 0.5) * dx  # 中点法
        sum += integrate_y_triple(x) * dx
    end
    return sum
end

integral2 = integrate_x_triple()
println("第二个三重积分的结果: ", integral2)
println()

# --- 概率计算 ---
println("3. 概率计算:点(X,Y)落在以原点为圆心,半径为2的圆内部的概率")

# 矩形区域 R: X ∈ [0, 2], Y ∈ [0, 2]
# 圆的方程: x² + y² ≤ 4

# 定义指示函数:如果点在圆内返回1,否则返回0
function indicator_circle(x, y)
    if x^2 + y^2 <= 4
        return 1.0
    else
        return 0.0
    end
end

# 计算圆与矩形的交集面积
# 由于圆的半径是2,圆心在(0,0),矩形在[0,2]×[0,2]
# 所以圆完全包含在矩形内,交集面积就是圆的面积

# 圆的面积 = π * r² = π * 4 = 4π
circle_area = pi * 4

# 矩形的面积 = 2 * 2 = 4
rectangle_area = 4

# 概率 = 圆的面积 / 矩形的面积
probability = circle_area / rectangle_area

println("圆的面积: ", circle_area)
println("矩形的面积: ", rectangle_area)
println("概率 P(A) = ", probability)
println("概率 P(A) ≈ ", round(probability, digits=6))

# 也可以用数值积分验证
function integrate_prob_y(x)
    # 对 y 从 0 到 2 积分
    n = 1000  # 分割数
    dy = 2.0 / n
    sum = 0.0
    for i in 1:n
        y = (i - 0.5) * dy  # 中点法
        sum += indicator_circle(x, y) * dy
    end
    return sum
end

function integrate_prob()
    # 对 x 从 0 到 2 积分
    n = 1000  # 分割数
    dx = 2.0 / n
    sum = 0.0
    for i in 1:n
        x = (i - 0.5) * dx  # 中点法
        sum += integrate_prob_y(x) * dx
    end
    return sum
end

prob_numerical = integrate_prob() / rectangle_area
println("数值积分验证的概率: ", prob_numerical)
所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
MWORKS体验官全国大学生数学建模竞赛
附件 2 个附件(513kb)

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天