gpt4 book ai didi

python - python : 'Pow' object has no attribute 'sqrt' 中的多变量线性化

转载 作者:太空狗 更新时间:2023-10-29 21:02:10 24 4
gpt4 key购买 nike

作为 Python 世界的新手,我只是简单地将以下两个变量函数线性化:

函数

enter image description here

使用相当常规的牛顿法:

线性化方法

enter image description here

到目前为止,这是我尝试过的:

import numpy as np
import math
from sympy import symbols, diff

d = 1.7

def f(arg1, arg2):
return (arg1 - arg2)/(np.power(np.linalg.norm(arg1 - arg2),2) - np.power(d,2))

def linearize_f(f, arg1, arg2, equi_arg1, equi_arg2):
arg1, arg2 = symbols('arg1 arg2', real=True)
der_1 = diff(f(arg1,arg2), arg1)
der_2 = diff(f(arg1,arg2), arg2)
constant_term = f(equi_arg1, equi_arg2)

vars = sympy.symbols('arg1, arg2')
par_term_1 = sympy.evalf(der_1, subs = dict(zip(vars,[equi_arg1, equi_arg2])))
par_term_2 = sympy.evalf(der_2, subs = dict(zip(vars,[equi_arg1, equi_arg2])))

result = constant_term + par_term_1*(arg1-equi_arg1) + par_term_2*(arg2-equi_arg2)

return result

q0, q1 = symbols('q0 q1', real=True)
result = linearize_f(f,q0,q1,0,0)
print(result)

解释器返回一个 'Pow' 对象没有属性 'sqrt'。但是,我从未在我的代码中使用过任何 sqrt

你能帮我解决这个问题吗?

最佳答案

您还没有调用 sqrtnp.linalg.norm 调用了。 arg1, arg2 参数的类型为 sympy.Symbol。该函数期望得到一个类似数组的参数。然而,它得到一个 sympy 符号,它不知道如何处理。

我查看了 np.linalg 源代码,它似乎检查了一些已知类型并试图找到平方根。否则,它依赖于参数本身来知道它自己的平方根。 sympy.Symbol 没有这样的东西,因此错误。

没有办法避免这种情况。 numpy 使用数字,sympy 使用(它自己的)符号。你不应该混合它们。 sympy 很可能有自己的函数来处理自己的符号,但如果没有,你就不走运了,除非你自己添加它们。

关于python - python : 'Pow' object has no attribute 'sqrt' 中的多变量线性化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53448913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com