python - python中的多变量线性化:'Pow'对象没有属性'sqrt'
问题描述
作为 Python 世界的新手,我只是将以下两个变量函数线性化:
功能
使用相当常规的牛顿法:
线性化方法
这是我迄今为止尝试过的:
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' object has no attribute 'sqrt'
. 但是,我从未sqrt
在我的代码中使用过任何代码。
你能帮我解决这个案子吗?
解决方案
我已将您的错误范围缩小到:
q0, q1 = symbols('q0 q1', real=True)
np.linalg.norm(q0 - q1) # Throws the same error
np.linalg
这是引发错误的源代码:
2347
2348 # Immediately handle some default, simple, fast, and common cases.
2349 if axis is None:
2350 ndim = x.ndim
2351 if ((ord is None) or
2352 (ord in ('f', 'fro') and ndim == 2) or
2353 (ord == 2 and ndim == 1)):
2354
2355 x = x.ravel(order='K')
2356 if isComplexType(x.dtype.type):
2357 sqnorm = dot(x.real, x.real) + dot(x.imag, x.imag)
2358 else:
2359 sqnorm = dot(x, x)
2360 ret = sqrt(sqnorm)
2361 if keepdims:
2362 ret = ret.reshape(ndim*[1])
2363 return ret
显然,在您的 sympy 对象被 处理后dot
,它变成了一个Pow
对象,这是一个np.sqrt
不知道如何处理的 sympy 对象。
这样做的原因显然是您不能对对象使用numpy
函数。是一个 sympy 对象,因此不能对该对象进行操作。sympy
Pow
numpy.sqrt
经过更多研究,显然很久以前的这个问题sympy AttributeError: 'Pow' object has no attribute 'sin'也指向相同的原因。
推荐阅读
- python - 如何在 django 中使用 JsonField 而不是多对多字段
- vba - 在文本框中打印数组
- android - Jetpack Compose:列表更改时更新可组合
- javascript - 选择子类别和自动完成
- web-scraping - 使用 BS4 抓取 Shopee 评论和评级
- c# - 如何在 C# 中打开现有表单?
- dns - 我们可以将多个域名指向同一个 IP 地址吗?
- android - 带有 Glide 支持的具有缩放和翻译功能的 Android ImageView
- reactjs - 'TypeError [ERR_INVALID_ARG_TYPE]:“目标”参数必须是 Buffer 或 Uint8Array 的实例。收到 null':使用 msw 的反应测试库
- laravel - 命令“/bin/sh -c yum install yum-utils”返回非零代码:1