我有一个功能
f(x) = sin(x/5.0)*exp(x/10.0) + 5*exp(-x/2.0)
我需要求解线性方程组
w0 + w1x1 + w2(x1)**2 + ... + wn(x1)**n = f(x1)
我解决了这个问题,但我对绘图有问题
from math import sin, exp
from scipy import linalg
import numpy as np
b = []
def f(x):
return sin(x/5.0)*exp(x/10.0) + 5*exp(-x/2.0)
for i in [1, 15]:
b.append(f(i))
A = []
for i in [1, 15]:
ij = []
x0 = i ** 0
x1 = i ** 1
ij.append(x0)
ij.append(x1)
A.append(ij)
matrix = np.array(A)
b = np.array(b).T
x = linalg.solve(matrix, b)
from matplotlib import pyplot as plt
plt.plot(x, f(x))
但它返回
TypeError: only length-1 arrays can be converted to Python scalars
我该如何解决这个问题?
答案 0 :(得分:1)
math.sin
和math.exp
期望标量输入。如果您传递数组,则会得到TypeError
In [34]: x
Out[34]: array([ 3.43914511, -0.18692825])
In [35]: math.sin(x)
TypeError: only length-1 arrays can be converted to Python scalars
from math import sin, exp
从sin
模块加载exp
和math
,并将它们定义为全局命名空间中的函数。因此,f(x)
正在math
上调用sin
x
函数的版本,这是一个NumPy数组:
def f(x):
return sin(x/5.0)*exp(x/10.0) + 5*exp(-x/2.0)
要修正错误,请改用NumPy的sin
和exp
功能。
import numpy as np
def f(x):
return np.sin(x/5.0)*np.exp(x/10.0) + 5*np.exp(-x/2.0)