【问题标题】:How to solve numerically a matrix equation?如何数值求解矩阵方程?
【发布时间】:2020-07-12 05:27:34
【问题描述】:

我在 python 上,我想解决这个方程 M(x,y) + x**2 = 0,M(x,y) 是一个我知道其值的矩阵,但是我不知道它对 x 或 y 的依赖,例如我有这些值:

M = ([[11,12,13],
     [21,22,23],
     [31,32,33]])

我有 2 个数组,

x = np.linspace(0,1,3)
y = np.linspace(0,1,3)

我知道一件事,矩阵的每个元素都取决于x 和y、M[i][j]=f(x[i],y[j])。

我的问题是:我如何以数字方式求解这个方程的 y?,我想要一个等高线,或者最后的图形。

我可能没有很好地解释这个问题,所以如果您有任何问题,请告诉我。

谢谢。

【问题讨论】:

  • f 到底是什么?
  • 就是这样,我不知道。我只有价值观。
  • 你说你想解决y,但你也说你已经有了y = np.linspace(0,1,3)。 y 是常量还是未知变量?
  • 还有一个问题:x**2中的**2操作是什么?元素平方还是外积?
  • 是的**2是正方形,即x*x。在问题中y 是一个变量,也是一个未知数。另一个未知的是f(x,y)。我知道在绘制 y(x)' i have to get something resembling a square root or a log, but slightly different. I now see that in my code y` 和 x 时不相关,但无论哪种方式我都不知道它们是如何相关的。

标签: python python-3.x matrix resolve


【解决方案1】:

首先,我必须更改 M 值,因为您给出的矩阵没有解决方案:

import numpy as np
M = np.linspace(-2.,5.,9).reshape(3,3)
x = np.linspace(0,1,3)
y = np.linspace(0,1,3)

然后您只需通过添加以下 X2 矩阵将 x**2 添加到 M 矩阵的每个值:

X2 = x*x*np.ones(M.shape)

您可以使用 matplolib 将解决方案显示为轮廓。这里我选择显示-0.1到+0.1之间的所有值

import matplotlib.pyplot as plt
cs = plt.contourf(X2+M, levels=[-0.1,0.1])
plt.show()

【讨论】:

  • 级别 -0.1 和 0.1 是为了显示接近 0 的级别,因此解决方案对吗?
  • 是的,matplotlib.contourf 至少需要 2 个级别。绿色区域包含解决方案。当然这是一个插值,因为矩阵本身很小,无法包含精确的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多