• Python应用:画出任意二维函数的轨迹


    一、提要

            对于显函数,其曲线可以通过给出定义域和对应的函数值画出。然而对于一些隐函数,不能显式表达,其曲线如何画出?如果从定义域内,逐点求出函数值,然后画出点序就不是一个很好的主意。用计算方法求出所有点,然后再过滤,反而是一个好的解决方法。本文按照

    二、基于隐函数的变换

    2.1 法1:平面上等高线模型

    给出一个隐函数如下:

            \frac{1}{2}x-0.3\times log(x)+0.3y-0.1\times log(y) -1=0

            对于这样的隐函数方程,很容易写成函数:

    z = \frac{1}{2}x-0.3\times log(x)+0.3y-0.1\times log(y) -1

            z是平面x-0-y上的高度函数,那么,求出平面上任意点(x,y)的高度,将高度为0的点取出,就是原方程轨迹。

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. # 作点
    4. x = np.linspace(-1, 15, 1000)
    5. y = np.linspace(-1, 15, 1000)
    6. # 构造网格
    7. x, y = np.meshgrid(x, y)
    8. z = 0.5 * x - 0.3 * np.log1p(x) + 0.3 * y - 0.1 * np.log1p(y) - 1
    9. plt.contour(x, y, z, [0,1,2,3])
    10. plt.show()

     2.2 法2:用三维坐标表现

    对于函数y^3=x^2+x+1,

    用图像分割的方法进行,依然转化成:

    Z=x^2+x+1 - y^3

    画出图像的代码:

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. from mpl_toolkits.mplot3d import Axes3D
    4. def getZ( X, Y ):
    5. # gray = np.zeros_like(X)
    6. gray = X**2+X+1 - Y**3
    7. return gray
    8. X = np.linspace(0,100,1001)
    9. Y = np.linspace(0,200,2001)
    10. X, Y = np.meshgrid(X,Y)
    11. Z = getZ( X,Y )
    12. S = np.where(np.abs(Z)<0.5,10,0)
    13. figure = plt.figure()
    14. # 画出三维坐标系:
    15. axes = Axes3D(figure)
    16. axes.plot_surface(X, Y, S, cmap='rainbow')
    17. # 显示图形:
    18. plt.show()

    三、椭圆曲线方程 

            标准的椭圆曲线方程,

            

            称为威尔斯特拉斯方程(Weierstrass),满足:

            1.椭圆曲线方程是一个齐次方程

            2.曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0

            3.圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名

    下面两个不是椭圆曲线(在零点不光滑)

            以上椭圆方程也可以用所给出的代码实现绘图。

  • 相关阅读:
    Java线程池ThreadPoolExecutor应用(Spring Boot微服务)
    二维平面装箱问题的常用工具
    js实现短信验证码一键登录
    RFID电子标签的分类
    正则表达式[总结]
    迅为RK3588在 Linux 系统中使用 NPU
    【Java面试指北】Exception Error Throwable 你分得清么?
    智慧应急三维电子沙盘系统
    1056 Mice and Rice
    【Leetcode】204. 计数质数
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126336383