python; 정적분을 활용하여 원뿔대 부피 구하기

 

python; 위 원과 아래 원 크기가 다른 원기둥(원뿔대) 부피 구하기 (정적분 회전체 체적 활용)

y=f(x)를 x축으로 회전시킨 회전체의 체적을 구하는 공식은 다음과 같다. $V_{x}=\pi\int_{a}^{b}\left\{ f(x)\right\}^{2}dx$ 적분을 계산하기위해 sympy 사용. import sympy as sy import math r1 = float(input('원1 반지름:'))

sosomia01.tistory.com

윗 글의 2탄(?)입니다. 

이번에는 sympy의 인테그랄을 사용하지 않고 정적분의 값을 사다리꼴로 쪼개서 더하는 방법으로 근사값을 구하였습니다.

integrate의 n이 클수록 세분해서 계산하므로 근사값이 정확해집니다.

import math

def frustum_volume(a, b, h):
    # 원뿔대의 부피를 계산 공식
    def r(x):
        return (b-a)/h * x + a

    # 정적분 근사값 계산 함수 (사다리꼴 방법)
    def integrate(f, a, b, n=10000):
        # 구간을 n등분하여 각 구간에서의 값을 계산
        dx = (b-a)/n
        x_vals = [a+i*dx for i in range(n+1)]
        y_vals = [f(x) for x in x_vals]

        # 사다리꼴 공식을 이용하여 각 구간에서의 면적을 계산
        areas = [0.5*(y_vals[i]+y_vals[i+1])*dx for i in range(n)]

        # 면적의 합 계산
        return sum(areas)

    # 원뿔대의 체적
    V = integrate(lambda x: math.pi*r(x)**2, 0, h)

    return V

print(frustum_volume(2, 4, 6))