python - TypeError:无法将表达式转换为浮点数,带有符号 x,多项式插值
问题描述
我正在尝试运行以下代码,但在S[i][0]
.
TypeError:无法将表达式转换为浮点数
我确信我的变量D[][]
、h[]
、age[]
、A[]
和B[]
都n
可以(它们是浮点数)。我认为这与象征性人物有关x
。
最后,S
应该是多项式的 (7,1) 向量。
import numpy as np
import sympy as sp
age = np.arange(15,55,5)
N = np.array([0, 7.442, 26.703, 41.635, 49.785, 50.209, 50.226])
n = len(N)
h = np.zeros(n)
for i in range(n) :
h[i] = age[i+1] - age[i]
mu = np.zeros(n)
lamda = np.zeros(n)
F = np.zeros((n,1))
A = np.zeros(n)
B = np.zeros(n)
for i in range(n) :
mu[i] = h[i-1]/(h[i]+h[i-1])
lamda[i] = h[i]/(h[i]+h[i-1])
F[i][0] = (6*(N[i]*h[i-1] - h[i]*N[i-1]))/((h[i]+h[i-1])*h[i]*h[i-1])
M = 2*np.eye(n,n) + 0.5*np.diag(np.ones((n-1)),1)+ 0.5*np.diag(np.ones((n-1)),1).T
D = np.dot(np.linalg.inv(M),F)
for i in range(n-1) :
A[i] = (N[i+1] - N[i])/h[i] - (h[i]*(D[i+1][0] - D[i][0]))/6
B[i] = N[i] - (((h[i])**2)*D[i][0])/6
def s(D, h, age, A, B, n) :
S = np.zeros((n,1))
x = sp.Symbol("x")
for i in range(n) :
S[i][0] = (D[i+1][0]*((x - age[i])**3))/(6*h[i]) - (D[i][0]*((x - age[i+1])**3))/(6*h[i]) + (A[i])*(x - age[i]) + B[i]
return sp.simplify(S)
S = s(D, h, age, A, B, n)
解决方案
问题是,虽然您的大多数变量都是浮点数,但x
都是符号的,这导致所有这些计算最终都是符号对象。此类对象在 python 级别使用类进行处理,而 numpy 需要数字,因此它会尝试应用于float()
它。例如,
>> float(sp.Add(1, 1))
2.0
>> float(s.Add(1 + x))
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
float(sp.Add(1, x))
File "C:\Users\ip507\AppData\Local\Programs\Python\Python36\lib\site-packages\sympy\core\expr.py", line 239, in __float__
raise TypeError("can't convert expression to float")
TypeError: can't convert expression to float
由于您不打算对“类数组”S
对象使用计算,因此它可以只是一个列表,您可以在其中收集表达式。
def s(D, h, age, A, B, n):
x = sp.Symbol("x")
S = []
for i in range(n):
S.append((D[i+1][0]*((x - age[i])**3))/(6*h[i]) - (D[i][0]*((x - age[i+1])**3))/(6*h[i]) + (A[i])*(x - age[i]) + B[i])
return S
话虽如此,您有一个错误导致IndexError
. D
形状为 (7, 1),但您调用D[i+1]
. 这是你需要解决的问题,因为我不知道你的意图。
推荐阅读
- mongodb - 更改绑定地址后重新加载mongodb
- javascript - Vue动态列表
- java - 同一个 singletonPattern 实例的两个引用
- linux - Vim 日晒配色方案无法正常工作
- html - SVG loader not spinning correctly in Firefox
- python - 创建一组 numpy 数组
- google-apps-script - 跟踪函数的使用次数
- javascript - React Native - 如何显示不在列表开头的列表?
- xamarin - Xamarin iOS 应用程序被 App Store 拒绝,因为它不能在纯 IPv6 环境中运行
- javascript - 我可以从 Wordpress 数据库中获取 React 应用程序的用户密码吗?