y = np.arange(0, 3000, 0.001) K = lambda x: 3 / 4 * (1 - x**2) * (abs(x) <= 1) plt.figure(figsize=(5, 4.5))
时间: 2024-06-03 20:11:50 浏览: 127
这是一段 Python 代码,其中使用了 NumPy 和 Matplotlib 库。
1. `np.arange(0, 3000, 0.001)` 创建了一个一维的数组,从 0 开始,步长为 0.001,到 3000 结束。这个数组包含了 3000000 个元素。
2. `K = lambda x: 3 / 4 * (1 - x**2) * (abs(x) <= 1)` 定义了一个函数 `K`,使用了 Python 的 lambda 表达式。这个函数的输入是一个数字 `x`,输出是一个数字,根据输入的 `x` 的值计算出来。具体来说,如果 `x` 的绝对值小于等于 1,则输出 `3 / 4 * (1 - x**2)`,否则输出 0。
3. `plt.figure(figsize=(5, 4.5))` 创建了一个新的 Matplotlib 图片,并设置了图片的大小为 5 英寸宽,4.5 英寸高。这个函数返回一个 Figure 对象,可以在后续的操作中使用。
如果您有更多问题或需要解释,请告诉我。
相关问题
y = np.arange(0, 3000, 0.001) K = lambda x: 3 / 4 * (1 - x**2) * (abs(x) <= 1) plt.figure(figsize=(5, 4.5))
这段代码是用 Python 中的 NumPy 库生成一个从 0 到 3000 的等差数列,步长为 0.001,赋值给变量 y。然后定义了一个函数 K(x),这个函数在 x 的绝对值小于等于 1 时返回 3/4*(1-x^2),否则返回 0。最后使用 Matplotlib 库创建一个大小为 (5, 4.5) 的新图形窗口。
#外点法(能运行出来) import math import sympy import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D plt.ion() fig = plt.figure() ax = Axes3D(fig) def draw(x,index,M): # F = f + MM * alpha # FF = sympy.lambdify((x1, x2), F, 'numpy') Z = FF(*(X, Y,M)) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow',alpha=0.5) ax.scatter(x[0], x[1], FF(*(x[0],x[1],M)), c='r',s=80) ax.text(x[0], x[1], FF(*(x[0],x[1],M)), 'here:(%0.3f,%0.3f)' % (x[0], x[1])) ax.set_zlabel('F') # 坐标轴 ax.set_ylabel('X2') ax.set_xlabel('X1') plt.pause(0.1) # plt.show() # plt.savefig('./image/%03d' % index) plt.cla() C = 10 # 放大系数 M = 1 # 惩罚因子 epsilon = 1e-5 # 终止限 x1, x2 = sympy.symbols('x1:3') MM=sympy.symbols('MM') f = -x1 + x2 h = x1 + x2 - 1 # g=sympy.log(x2) if sympy.log(x2)<0 else 0 g = sympy.Piecewise((x2-1, x2 < 1), (0, x2 >= 1)) # u=lambda x: alpha = h ** 2 + g ** 2 F = f + MM * alpha # 梯度下降来最小化F def GD(x,M,n): # F = f + M * alpha # delta_x = 1e-11 # 数值求导 # t = 0.0001 # 步长 e = 0.001 # 极限 # my_print(e) np.array(x) for i in range(15): t = sympy.symbols('t') grad = np.asarray( [sympy.diff(F, x1).subs([(x1, x[0]), (x2, x[1]),(MM,M)]), sympy.diff(F, x2).subs([(x1, x[0]), (x2, x[1]),(MM,M)])]) # print('g',grad) # print((x-t*grad)) # print(F.subs([(x1,(x-t*grad)[0]),(x2,(x-t*grad)[1])])) t = sympy.solve(sympy.diff(F.subs([(x1, (x - t * grad)[0]), (x2, (x - t * grad)[1]),(MM,M)]), t), t) print('t',t) x = x - t * grad print('x', x) # print('mmm',M) draw(x,n*10+i,M) # my_print(np.linalg.norm(grad)) # print(type(grad)) if (abs(grad[0]) < e and abs(grad[1]) < e): # print(np.linalg.norm(grad)) print('g', grad) break return list(x) pass x = [-0.5, 0.2] X = np.arange(0, 4, 0.25) Y = np.arange(0, 4,
0.25) # 定义网格点坐标 X, Y = np.meshgrid(X, Y) # 生成网格点 FF = sympy.lambdify((x1, x2,MM), F, 'numpy') # 将表达式转化为可计算的函数 draw(x,0,M) # 绘制函数图像 for i in range(5): # 迭代次数为5次 x = GD(x,M,i) # 梯度下降求解极小值 M = C * M # 更新惩罚因子 print('M',M) # plt.savefig('./image/%03d' % index) plt.ioff() plt.show()
这是一个使用外点法求解带约束非线性规划问题的 Python 代码,其中 F 为目标函数,alpha 为罚函数,x1, x2 为自变量,MM 为惩罚因子。函数 GD 为梯度下降求解极小值。代码中还包含了绘制函数图像的 draw 函数。
阅读全文