使用 sympy 最小化由顶部和底部正方形以及四个直角相交的矩形边组成的正方形长方体的表面积
Use sympy to minimize the surface area of a square cuboid made up of top and bottom squares and four rectangular sides meeting at right angles
我想使用 sympy 解决这个问题,但我不确定如何解决。我知道如何使用微积分而不是使用 python.
来最小化长方体的表面积
使用 sympy 最小化由顶部和底部正方形以及四个直角相交的矩形边组成的正方形长方体的表面积。令 s 为正方形的边长,h 为高度。
令 s 为正方形的边长,h 为高度。正方体的表面积为 A = 2x^2+4hs,因为 2s^2 是其顶部和底部正方形的总面积,而 4hs 是其边的总面积。它的体积由 V=s^2h 给出。
问题是使用 sympy 来计算 s 的精确值,该值在约束 V=1 的情况下最小化方形长方体的表面积 A。您提出的面积最小化实体有一个通用名称吗?
Sympy 似乎没有符号最小化功能。一个可以
这是一个可能的方法:
from sympy import symbols, Eq, solve, lambdify
h, s = symbols('h s', real=True, positive=True)
# formula for the area
A = s * s + 4 * h * s
# equation for the volume which should be 1
volume = Eq(s * s * h, 1)
# h_given_s = solve(volume, h)[0] # h_given_s = s**(-2)
# using the volume equation, express h as a function of s
# and substitute that solution into A
A_s = A.subs(h, solve(volume, h)[0]) # A = s**2 + 4/s
# find the zeros of the first derivative
ans = solve(A_s.diff(s))[0]
print(f'answer: {ans} (={ans.evalf()})')
答案:2**(1/3) (=1.25992104989487)
另一种方法涉及 scipy 的数值最小化:
from scipy.optimize import minimize as scipy_min
A_np = lambdify(s, A_s)
scipy_min(A_np, 1)
结果:1.25992129
我想使用 sympy 解决这个问题,但我不确定如何解决。我知道如何使用微积分而不是使用 python.
来最小化长方体的表面积使用 sympy 最小化由顶部和底部正方形以及四个直角相交的矩形边组成的正方形长方体的表面积。令 s 为正方形的边长,h 为高度。
令 s 为正方形的边长,h 为高度。正方体的表面积为 A = 2x^2+4hs,因为 2s^2 是其顶部和底部正方形的总面积,而 4hs 是其边的总面积。它的体积由 V=s^2h 给出。
问题是使用 sympy 来计算 s 的精确值,该值在约束 V=1 的情况下最小化方形长方体的表面积 A。您提出的面积最小化实体有一个通用名称吗?
Sympy 似乎没有符号最小化功能。一个可以 这是一个可能的方法:
from sympy import symbols, Eq, solve, lambdify
h, s = symbols('h s', real=True, positive=True)
# formula for the area
A = s * s + 4 * h * s
# equation for the volume which should be 1
volume = Eq(s * s * h, 1)
# h_given_s = solve(volume, h)[0] # h_given_s = s**(-2)
# using the volume equation, express h as a function of s
# and substitute that solution into A
A_s = A.subs(h, solve(volume, h)[0]) # A = s**2 + 4/s
# find the zeros of the first derivative
ans = solve(A_s.diff(s))[0]
print(f'answer: {ans} (={ans.evalf()})')
答案:2**(1/3) (=1.25992104989487)
另一种方法涉及 scipy 的数值最小化:
from scipy.optimize import minimize as scipy_min
A_np = lambdify(s, A_s)
scipy_min(A_np, 1)
结果:1.25992129