【问题标题】:Sympy name Heaviside not defined within lambdifygeneratedSympy 名称 Heaviside 未在lambdifygenerated 中定义
【发布时间】:2020-05-27 01:00:30
【问题描述】:

Heaviside 函数应该内置到 Sympy 和 Numpy 中,但是下面的代码给出了错误 Name Heaviside not defined。在将使用它的数值计算(基于 Traceback)之前尝试在代码中自己定义 Heaviside 函数什么也没做 - 我想它应该在 lambdifygenerated 中定义。有解决方法吗?

from sympy import *
from IPython.display import display
mux, s, Px, Py, Pxe, Pye = symbols("mu_X s P_X P_Y P_X^* P_Y^*", positive=True)
vx, vy, cx, cy = symbols("v_X v_Y c_X c_Y", real=True)
pix = (Px-cx)*( mux*integrate(integrate(1,(vx,Min(1,Max(0,Px+Max(0,vy-Pye-s))),1)),(vy,0,1))
      +(1-mux)*integrate(integrate(1,(vx,Min(1,Max(0,Max(Pxe+s,Px)+Max(0,vy-Pye))),1)),(vy,0,1))
     )
piy = (Py-cy)*( (1-mux)*integrate(integrate(1,(vy,Min(1,Max(0,Py+Max(0,vx-Pxe-s))),1)),(vx,0,1))
      +mux*integrate(integrate(1,(vy,Min(1,Max(0,Max(Pye+s,Py)+Max(0,vx-Pxe))),1)),(vx,0,1))
     )
focx =diff(pix,Px)
focy =diff(piy,Py)
focxeq=focx.subs(Px,Pxe)
focyeq=focy.subs(Py,Pye)

import numpy as np
focx_lambda = lambdify((Pxe,Pye), focxeq, modules=['numpy', 'sympy'])
focy_lambda = lambdify((Pxe,Pye), focyeq, modules=['numpy', 'sympy'])
nsolve([focxeq.subs({mux:0.4,s:0.05,cx:0,cy:0.1}).evalf(),focyeq.subs({mux:0.4,s:0.05,cx:0,cy:0.1}).evalf()],(Pxe,Pye),(0.3,0.4))

回溯如下:

--------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-10-b7bc7e96827d> in <module>
     26 focx_lambda = lambdify((Pxe,Pye), focxeq, modules=['numpy', 'sympy'])
     27 focy_lambda = lambdify((Pxe,Pye), focyeq, modules=['numpy', 'sympy'])
---> 28 nsolve([focxeq.subs({mux:0.4,s:0.05,cx:0,cy:0.1}).evalf(),focyeq.subs({mux:0.4,s:0.05,cx:0,cy:0.1}).evalf()],(Pxe,Pye),(0.3,0.4))
     29 mux=0.4
     30 s=0.05

~/anaconda3/lib/python3.6/site-packages/sympy/utilities/decorator.py in func_wrapper(*args, **kwargs)
     88         dps = mpmath.mp.dps
     89         try:
---> 90             return func(*args, **kwargs)
     91         finally:
     92             mpmath.mp.dps = dps

~/anaconda3/lib/python3.6/site-packages/sympy/solvers/solvers.py in nsolve(*args, **kwargs)
   3045     J = lambdify(fargs, J, modules)
   3046     # solve the system numerically
-> 3047     x = findroot(f, x0, J=J, **kwargs)
   3048     if as_dict:
   3049         return [dict(zip(fargs, [sympify(xi) for xi in x]))]

~/anaconda3/lib/python3.6/site-packages/mpmath/calculus/optimization.py in findroot(ctx, f, x0, solver, tol, verbose, verify, **kwargs)
    926         # detect multidimensional functions
    927         try:
--> 928             fx = f(*x0)
    929             multidimensional = isinstance(fx, (list, tuple, ctx.matrix))
    930         except TypeError:

<lambdifygenerated-23> in _lambdifygenerated(Dummy_4515, _Dummy_4514)
      1 def _lambdifygenerated(Dummy_4515, _Dummy_4514):
----> 2     return (ImmutableDenseMatrix([[Dummy_4515*(mpf((0, 3602879701896397, -53, 52))*((-(_Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Heaviside(1 - Dummy_4515)*Heaviside(1 - Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + Heaviside(1 - Dummy_4515)*Heaviside(1 - Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + Min(mpf((0, 1, 0, 1)), _Dummy_4514 + mpf((0, 3602879701896397, -56, 52))) - Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))) if (Dummy_4515 >= 1) else (-(_Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Heaviside(1 - Dummy_4515)*Heaviside(1 - Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + Heaviside(1 - Dummy_4515)*Heaviside(1 - Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) - Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))))) + mpf((0, 5404319552844595, -53, 53))*((0) if (Dummy_4515 >= mpf((0, 4278419646001971, -52, 52))) else (-(_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Heaviside(1 - Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + 1))*Heaviside(_Dummy_4514 - Dummy_4515 - Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52))) + 1) + Heaviside(1 - Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + 1))*Heaviside(_Dummy_4514 - Dummy_4515 - Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52))) + 1)*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 1, 0, 1))))) if (Dummy_4515 >= 1) else (0))) + mpf((0, 3602879701896397, -53, 52))*((-(_Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), _Dummy_4514 + mpf((0, 3602879701896397, -56, 52))) + (_Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), _Dummy_4514 + mpf((0, 3602879701896397, -56, 52)))**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))**2) if (Dummy_4515 >= 1) else ((mpf((0, 1, 0, 1)) - Dummy_4515)*Min(mpf((0, 1, 0, 1)), _Dummy_4514 + mpf((0, 3602879701896397, -56, 52))) - (_Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), _Dummy_4514 + mpf((0, 3602879701896397, -56, 52))) + (_Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), _Dummy_4514 + mpf((0, 3602879701896397, -56, 52)))**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514 + mpf((0, 3602879701896397, -56, 52)), _Dummy_4514 - Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))**2)) + mpf((0, 5404319552844595, -53, 53))*((-(_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), _Dummy_4514) + (_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), _Dummy_4514)**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52))))**2) if (Dummy_4515 >= mpf((0, 4278419646001971, -52, 52))) else (-(_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), _Dummy_4514) + (_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 1, 0, 1)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), _Dummy_4514)**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 1, 0, 1))))**2) if (Dummy_4515 >= 1) else ((mpf((0, 4278419646001971, -52, 52)) - Dummy_4515)*Min(mpf((0, 1, 0, 1)), _Dummy_4514) - (_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), _Dummy_4514) + (_Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), _Dummy_4514)**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(_Dummy_4514, _Dummy_4514 - Dummy_4515 + mpf((0, 4278419646001971, -52, 52))))**2))], [(_Dummy_4514 + mpf((1, 3602879701896397, -55, 52)))*(mpf((0, 5404319552844595, -53, 53))*((-(-_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Heaviside(1 - _Dummy_4514)*Heaviside(1 - Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + Heaviside(1 - _Dummy_4514)*Heaviside(1 - Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + Min(mpf((0, 1, 0, 1)), Dummy_4515 + mpf((0, 3602879701896397, -56, 52))) - Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))) if (_Dummy_4514 >= 1) else (-(-_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Heaviside(1 - _Dummy_4514)*Heaviside(1 - Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + Heaviside(1 - _Dummy_4514)*Heaviside(1 - Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) - Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))))) + mpf((0, 3602879701896397, -53, 52))*((0) if (_Dummy_4514 >= mpf((0, 4278419646001971, -52, 52))) else (-(-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Heaviside(1 - Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + 1))*Heaviside(-_Dummy_4514 + Dummy_4515 - Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52))) + 1) + Heaviside(1 - Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + 1))*Heaviside(-_Dummy_4514 + Dummy_4515 - Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52))) + 1)*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 1, 0, 1))))) if (_Dummy_4514 >= 1) else (0))) + mpf((0, 5404319552844595, -53, 53))*((-(-_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), Dummy_4515 + mpf((0, 3602879701896397, -56, 52))) + (-_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Dummy_4515 + mpf((0, 3602879701896397, -56, 52)))**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))**2) if (_Dummy_4514 >= 1) else ((mpf((0, 1, 0, 1)) - _Dummy_4514)*Min(mpf((0, 1, 0, 1)), Dummy_4515 + mpf((0, 3602879701896397, -56, 52))) - (-_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), Dummy_4515 + mpf((0, 3602879701896397, -56, 52))) + (-_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Dummy_4515 + mpf((0, 3602879701896397, -56, 52)))**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515 + mpf((0, 3602879701896397, -56, 52)), -_Dummy_4514 + Dummy_4515 + mpf((0, 4728779608739021, -52, 53))))**2)) + mpf((0, 3602879701896397, -53, 52))*((-(-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Dummy_4515) + (-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Dummy_4515)**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52))))**2) if (_Dummy_4514 >= mpf((0, 4278419646001971, -52, 52))) else (-(-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Dummy_4515) + (-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 1, 0, 1)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Dummy_4515)**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 1, 0, 1))))**2) if (_Dummy_4514 >= 1) else ((mpf((0, 4278419646001971, -52, 52)) - _Dummy_4514)*Min(mpf((0, 1, 0, 1)), Dummy_4515) - (-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Dummy_4515) + (-_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52)))) + mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Dummy_4515)**2 - mpf((0, 1, -1, 1))*Min(mpf((0, 1, 0, 1)), Max(Dummy_4515, -_Dummy_4514 + Dummy_4515 + mpf((0, 4278419646001971, -52, 52))))**2))]]))

NameError: name 'Heaviside' is not defined

我根据对(Some function) is not defined with SymPy Lambdify 的回答添加了focx_lambda = lambdify((Pxe,Pye), focxeq, modules=['numpy', 'sympy']) 但这并没有改变任何东西。

我自己定义 Heaviside 的方式是

def Heaviside(x):
    if x<0:
        out=0
    else:
        out=1
    return out

我也试过from numpy import * 以防万一。这并没有改变任何东西。

【问题讨论】:

    标签: numpy sympy


    【解决方案1】:

    lambdify 的几个问题似乎同时发生。我想我可以让事情正常进行,但你应该检查它是否有意义,因为我不熟悉具体的方程式。

    通常,将from sympy import *from numpy import * 一起调用会造成很多混乱。两个库中的许多函数具有相同的名称,而且它们真的不喜欢使用彼此的变量。

    另一方面,lambdify 不能很好地与Heaviside 配合使用。此外,numpy 中的函数是小写的并且需要两个参数:一个x 值和一个x2 来决定x==0 应该发生什么。作为补救措施,下面的代码将“Heaviside”替换为lambda x: np.heaviside(x, 1)

    我无法让 sympy 的 nsolve 使用这些功能,所以我尝试了 scipy 的 fsolvefsolve 还需要一些杂耍来处理一组函数。

    在创建focx_lambda 时,重要的是除函数参数PxePye 之外的所有变量都接收一个固定值。所以,我在执行lambdify时替换了它们。

    from sympy import symbols, integrate, Min, Max, diff, lambdify
    from IPython.display import display
    
    mux, s, Px, Py, Pxe, Pye = symbols("mu_X s P_X P_Y P_X^* P_Y^*", positive=True)
    vx, vy, cx, cy = symbols("v_X v_Y c_X c_Y", real=True)
    pix = (Px - cx) * (mux * integrate(integrate(1, (vx, Min(1, Max(0, Px + Max(0, vy - Pye - s))), 1)), (vy, 0, 1))
                       + (1 - mux) * integrate(integrate(1, (vx, Min(1, Max(0, Max(Pxe + s, Px) + Max(0, vy - Pye))), 1)),
                                               (vy, 0, 1))
                       )
    piy = (Py - cy) * ((1 - mux) * integrate(integrate(1, (vy, Min(1, Max(0, Py + Max(0, vx - Pxe - s))), 1)), (vx, 0, 1))
                       + mux * integrate(integrate(1, (vy, Min(1, Max(0, Max(Pye + s, Py) + Max(0, vx - Pxe))), 1)),
                                         (vx, 0, 1))
                       )
    focx = diff(pix, Px)
    focy = diff(piy, Py)
    focxeq = focx.subs(Px, Pxe)
    focyeq = focy.subs(Py, Pye)
    
    import numpy as np
    from scipy.optimize import fsolve
    
    modules = [{'Heaviside': lambda x: np.heaviside(x, 1)}, 'numpy']
    values_for_parameters = {mux: 0.4, s: 0.05, cx: 0, cy: 0.1}
    focx_lambda = lambdify((Pxe, Pye), focxeq.subs(values_for_parameters), modules=modules)
    focy_lambda = lambdify((Pxe, Pye), focyeq.subs(values_for_parameters), modules=modules)
    
    print(focx_lambda(0.3, 0.4))  # we need to check that the lambdify works, so this should print a floating point number
    print(focy_lambda(0.3, 0.4))
    
    def equations(p):
        x, y = p
        return focx_lambda(x, y), focy_lambda(x, y)
    
    sol = fsolve(equations, (0.3, 0.4))
    print(sol)  # [0.64701372 0.61726372]
    

    【讨论】:

    • 这运行没有错误 - 谢谢!如果能够在focx_lambda 中保留一些符号参数,那就太好了。这可能吗?我使用 Sympy 的最初原因是为了符号解决方案。
    • 在 sympy 之外你不能有任何象征性的东西。恐怕您每次都需要使用新参数再次进行lambdify。
    • 好的,将在循环中进行lambdify。 def equations(p): x, y = p return focx_lambda(x, y), focy_lambda(x, y) srange = [0.001, 0.05, 0.1, 0.2, 0.4, 0.7, 1] for i in srange: focx_lambda = lambdify((Pxe, Pye), focxeq.subs({mux: 0.4, s:i, cx: 0, cy: 0.1}), modules=modules) focy_lambda = lambdify((Pxe, Pye), focyeq.subs({mux: 0.4, s:i, cx: 0, cy: 0.1}), modules=modules) sol = fsolve(equations, (0.3, 0.4)) print(i,sol) 我大致得到了我想要的
    猜你喜欢
    • 2019-07-21
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2022-06-14
    相关资源
    最近更新 更多