在噪音中找到根(rand)fnc w fsolve(ValueError:函数返回的数组在两次调用之间更改了大小)

时间:2019-01-30 17:06:53

标签: python-3.x

我在python中进行了第一步,找到了这个阻塞点。我试图通过搜索和测试替代方法来找到解决方案。最后,我想找到一个添加了噪声的信号的y值(即y(x)= sin(x)+ rand()其中x(y)= 10)。作为一种抽象,我锁定了零交叉。

但是总的来说,我有一个问题,就是我没有让fsolve()与np.random.rand信号一起工作。它与sin(x)一起工作,但与(注释掉的)噪音部分一起工作。我尝试形成数组并检查尺寸,种类和大小。

import scipy.optimize
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style

matplotlib.style.use('fivethirtyeight')

x = np.linspace(0,3,100)
print(len(x))
print(type(x))

rnd = np.random.rand(100)-0.5

def g(x):
    return np.sin(2*x)

def r(x):
    return rnd

print(g(x))
print(type(g(x)))

print(r(x))
print(type(rnd))


plt.plot(x, g(x), zorder=1)
plt.plot(x, r(x), zorder=1)

#well working
x_int = scipy.optimize.fsolve(g, 1.0)
y_int = g(x_int)

#not working -> ValueError: The array returned by a function changed size between calls
#x_int = scipy.optimize.fsolve(r, 1.0)
#y_int = r(x_int)

plt.scatter(x_int, y_int, marker='x', s=100, zorder=2, linewidth=1, color='black')

plt.xlim([0,3])
plt.ylim([-4,2])
plt.show()

屏幕截图

enter image description here

0 个答案:

没有答案