为什么我的图表显示不正确的最小值,使用 np.linspace 或 np.array 并且效果不佳?
Why my graph is showing incorrect minima, using np.linspace or np.array and poorly?
我正在尝试学习多元优化,并试图绘制 $2x^2 + y^2$ 与限制在 (-1,1) 之间的平面的图形 - 本质上是一个正方形。这是相同
的代码片段
import sympy as sp
x,y = sp.symbols('x y')
paraboloid = sp.lambdify((x,y),2*(x**2) + y**2)
plane = sp.lambdify((x,y),2*x+3*y+4)
plane2 = sp.lambdify((x,y),x+y)
import numpy as np
points = np.arange(-5,5,0.1)
x,y = np.meshgrid(points,points)
points2 = np.arange(-1,1,0.1)
x2,y2 = np.meshgrid(points2,points2)
import plotly.graph_objects as go
fig = go.Figure(data = [go.Surface(z = paraboloid(x,y)),go.Surface(z = 5+0*plane2(x2,y2))])
fig.update_traces(contours_z=dict(show=True, usecolormap=True,
highlightcolor="limegreen", project_z=True))
fig.show()
输出结果如下:
Plotly Output
现在我有两个问题:
- 抛物面的最小值不应该在 0,0 处,因为它实际上是最大值
- 为什么我的平面不在抛物面正下方
我认为这些是相关的问题,所以如果有人回答了其他问题。请求你的帮助。 Stack 平台不允许我将图像内联,所以附上输出图像,不便之处深表歉意。
我认为您需要在数据中明确指定 x 轴和 y 轴:
data = [
go.Surface(z = paraboloid(x,y), x=x, y=y),
go.Surface(z = 5+0*plane2(x2,y2), x=x2, y=y2)
]
在documentation中提到:
Passing x and y data to 3D Surface Plot
If you do not specify x and y coordinates, integer indices are used for the x and y axis. You can also pass x and y values to go.Surface.
我正在尝试学习多元优化,并试图绘制 $2x^2 + y^2$ 与限制在 (-1,1) 之间的平面的图形 - 本质上是一个正方形。这是相同
的代码片段import sympy as sp
x,y = sp.symbols('x y')
paraboloid = sp.lambdify((x,y),2*(x**2) + y**2)
plane = sp.lambdify((x,y),2*x+3*y+4)
plane2 = sp.lambdify((x,y),x+y)
import numpy as np
points = np.arange(-5,5,0.1)
x,y = np.meshgrid(points,points)
points2 = np.arange(-1,1,0.1)
x2,y2 = np.meshgrid(points2,points2)
import plotly.graph_objects as go
fig = go.Figure(data = [go.Surface(z = paraboloid(x,y)),go.Surface(z = 5+0*plane2(x2,y2))])
fig.update_traces(contours_z=dict(show=True, usecolormap=True,
highlightcolor="limegreen", project_z=True))
fig.show()
输出结果如下: Plotly Output
现在我有两个问题:
- 抛物面的最小值不应该在 0,0 处,因为它实际上是最大值
- 为什么我的平面不在抛物面正下方
我认为这些是相关的问题,所以如果有人回答了其他问题。请求你的帮助。 Stack 平台不允许我将图像内联,所以附上输出图像,不便之处深表歉意。
我认为您需要在数据中明确指定 x 轴和 y 轴:
data = [
go.Surface(z = paraboloid(x,y), x=x, y=y),
go.Surface(z = 5+0*plane2(x2,y2), x=x2, y=y2)
]
在documentation中提到:
Passing x and y data to 3D Surface Plot If you do not specify x and y coordinates, integer indices are used for the x and y axis. You can also pass x and y values to go.Surface.