numpy 尝试求解非线性方程组时的尺寸-1阵列误差

xkrw2x1b  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(74)

下面是我的代码:

import numpy as np
import matplotlib.pyplot as plt

 g = plt.figure(1, figsize=(5,5))

delta = 0.025

x1,x2 = np.meshgrid(np.arange(-4,4.1,delta),np.arange(-4,4.1,delta))

f1 = math.sin(x1 + 1.5) - x2 - 2.9

f2 = math.cos(x2 - 2) + x1

plt.contour(x,y,f1,[0])
plt.contour(x,y,f2,[0])
plt.show()

字符串
当我运行它时,我得到以下错误:

Cell In[19], line 1
----> 1 f1 = math.sin(𝑥1 + 1.5) - x2 - 2.9

TypeError: only size-1 arrays can be converted to Python scalars

  
Cell In[20], line 1
----> 1 f2 = math.cos(x2 - 2) + 𝑥1

TypeError: only size-1 arrays can be converted to Python scalars


为什么会发生这种情况,我该如何解决?

vs3odd8k

vs3odd8k1#

这是因为numpy数组与math模块不兼容。
下面的代码将起作用,您将得到(324,324)输出

delta = 0.025
x1,x2 = np.meshgrid(np.arange(-4,4.1,delta),np.arange(-4,4.1,delta))

f1 = np.sin(x1 + 1.5) - x2 - 2.9

f2 = np.cos(x2 - 2) + x1

字符串
需要注意的是,math可以处理单元素数组,因此导致了这个错误:

math.sin(np.arange(1)) # -> 1
math.sin(np.arange(2)) # -> TypeError only size-1 arrays can be converted to Python scalars

cczfrluj

cczfrluj2#

math模块的sincos函数采用标量,而您提供的是矩阵。
使用numpy版本(可以接受n维向量):

f1 = np.sin(x1 + 1.5) - x2 - 2.9
f2 = np.cos(x2 - 2) + x1

字符串

相关问题