You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中插值函数绕Y轴旋转的体积计算及逆函数求解

问题解答

一、怎么求逆函数g(y)

你用的是线性插值interp1d,要得到逆函数其实很简单——直接把x和y的位置互换,再做一次线性插值就行。不过有个前提:原函数f(x)必须是单调的,不然一个y会对应多个x,逆函数就不是单值的,这种情况得考虑横截面的对称性或者分段处理。

具体代码实现:

# 先对y值排序,避免插值出错(如果原f(x)单调,yvals应该本身就是单调的,排序是保险操作)
sorted_indices = np.argsort(yvals)
sorted_y = yvals[sorted_indices]
sorted_x = xvals[sorted_indices]

# 创建逆插值函数g(y),也就是x关于y的函数
g = interpolate.interp1d(sorted_y, sorted_x, kind='linear')

拿到g(y)后,就能代入积分公式算体积了:

# 确定y的上下限
a = np.min(yvals)
b = np.max(yvals)

# 定义被积函数
def integrand(y):
    return np.pi * (g(y))**2

# 计算积分得到体积
volume, error = quad(integrand, a, b, limit=200)
print(f"绕Y轴旋转的体积: {volume},误差: {error}")

二、更省心的计算方法:壳层法(圆柱壳法)

其实完全不用求逆函数,用壳层法计算绕Y轴旋转的体积反而更简单,尤其是当f(x)不单调或者逆函数不好处理的时候。

壳层法的公式是:
$V = 2\pi \int_{x=0}^{x=10} x \cdot f(x) dx$
这里x是圆柱壳的半径,f(x)是壳的高度,积分后乘以2π就是体积。

这个方法直接用你已经得到的插值函数f(x),不用折腾逆函数,哪怕横截面不是单调的也能直接处理。

代码实现:

# 定义壳层法的被积函数
def shell_integrand(x):
    return 2 * np.pi * x * f(x)

# 计算积分,x的范围是0到10(你的x定义域)
volume_shell, error_shell = quad(shell_integrand, 0, xvals[-1], limit=200)
print(f"壳层法计算的体积: {volume_shell},误差: {error_shell}")

几点注意

  • 如果你的横截面不是单调的(比如一个y对应多个x),逆函数法得分段:把数据集拆成单调递增和递减的部分,分别求逆后计算积分再相加;但壳层法不用这么麻烦,直接对x积分就行。
  • 记得给interp1d加上fill_value="extrapolate"参数,避免x超出原数据范围时报错:f = interpolate.interp1d(xvals, yvals, fill_value="extrapolate")

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:23:20