python - 如何在特定间隔下绘制符号函数
问题描述
我打算绘制以下函数:
X = [x, y]
f = c'X + norm(c)* (sum(cos^2(X)) - sum(log(b-aX))
c = [7,2]
a = [2,3;4,6]
b = [10, 50]
所以我想得到这个
7x+2y+7.2*(cos^2(pi*x)+cos^2(pi*y))-(log(10-2x-3y)+ log(50-4x-6y)+log(x)+log(y))
如何绘制上述函数,比方说,-5<=x<=5
-3<=y<=2?
我尝试了以下方法:
import numpy as np
import matplotlib.pyplot as plt
from sympy import symbols
x,y = symbols(['x','y'])
c = np.array([7,2])
A = np.array([[2,3],[4,6]])
b = np.array([10,50])
那么接下来该怎么办??不知道要不要用linspace??
plt.plot(A*x+norm*(np.sum(np.cos^2(pi*x))-np.sum(log10(b-A*x))
解决方案
您可以使用 sympy 函数sympy.Function('cos')(x)和('log')(x),然后使用 lambdify。我没有写下确切的功能太长,但简化版本是这样的
import sympy
from sympy import *
from sympy.utilities.lambdify import lambdify, implemented_function
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
if __name__=="__main__":
x, y = symbols('x y')
X = np.array([x,y])
a = np.array([[2,3],[4,6]])
b = np.array([10, 50]) # np.tile(b, (2,1))
c = np.array([7, 2])
fPart1 = sum(c*np.array( X ) )
fPart2 = sum(np.array( c*np.array([sympy.Function('cos')(x) for x in X])))
fPart3a = sum(c*np.array( sympy.Function('log')(sum(b - a[0,:]*X) )))
fPart3b = sum(c*np.array( sympy.Function('log')(sum(b - a[1,:]*X) )))
fPart3 = fPart3a + fPart3b
zFunction = lambdify([x, y], fPart1 + fPart2*fPart2 + fPart3)
xValues = np.linspace(-5, 5, 100)
yValues = np.linspace(-3, 2, 100)
X, Y = np.meshgrid(xValues, yValues)
Z = zFunction(X, Y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, linewidth=0, antialiased=False)
ax.set_xlabel('X', fontsize=20, rotation=150)
ax.set_ylabel('Y', fontsize=20)
ax.set_zlabel('Z', fontsize=20)
plt.show()
打印功能以了解您想要的功能
In [4]: fPart1
Out[4]: 7*x + 2*y
In [5]: fPart2
Out[5]: 7*cos(x) + 2*cos(y)
In [6]: fPart3
Out[6]: 9*log(-4*x - 6*y + 60) + 9*log(-2*x - 3*y + 60)
推荐阅读
- flutter - 小部件未在颤动中显示
- google-sheets - Google 表格:如何删除多列中包含重复数据的行?
- c++ - 生成 Visual Studio 项目文件时出错(用于 Unreal 的 .sln)
- node.js - 获取 Matterjs 元素
- material-ui - 如何在 Datagrid 中获取有关列可见性更改的更新架构。(材料用户界面)?
- google-bigquery - `instanceof Date` 在 BigQuery UDF 中的行为不符合预期
- microsoft-graph-api - 有没有办法通过 Graph Api 在 MS Bookings 上找到日历的时区
- sql - 如何动态使用 SSIS 表达式中的表
- ansible - CentOS 容器中的奇怪行为
- java - 如何使用 Hashmap 的 @DynamoDBAttribute