作为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)
Run Code Online (Sandbox Code Playgroud)
口译员返回一个'Pow' object has no attribute 'sqrt'.但是,我从来没有sqrt在我的代码中使用任何代码.
你能帮我解决这个案子吗?
你还没有打过电话,sqrt但np.linalg.norm已经打过电话了。参数arg1, arg2的类型为sympy.Symbol。该函数期望获得一个类似数组的参数。但是,它得到一个 sympy 符号,但它不知道如何处理该符号。
我查看了np.linalg源代码,似乎它检查了一些已知类型并尝试找到平方根。否则,它依赖于参数本身来知道它自己的平方根。sympy.Symbol没有这样的东西,因此会出现错误。
没有办法避免这种情况。numpy使用数字,sympy 使用(它自己的)符号。你不应该混合它们。sympy很可能有自己的函数来处理自己的符号,但是,如果没有,你就不走运了,除非你自己添加它们。
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |