作为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
。请帮我解决这个问题。
arg1
和arg2
都是数字,则似乎正常工作;当它们是符号时,出现相同的错误。 - Rocky Liarg1
和arg2
是什么吗?它们是数组还是单个数字? - Rocky Lix
和y
。 - user10696076sympy
对象传递给numpy
函数通常不起作用。由于该函数旨在与ndarray
协同工作,因此numpy
执行np.asarray(arg)
。这很可能会产生一个object dtype
数组。np.sqrt(obj_array)
尝试为数组的每个元素执行x.sqrt()
。如果元素恰好具有该方法,则可以正常工作;否则就会出现错误。 - hpauljsympy
代码中有用,你的f
必须写成一个sympy
函数,不能使用任何numpy
。 - hpaulj