用字符串计算矩阵以获得特征值



主要思想是,用户将输入3个字符串来创建一个Hessian矩阵,以及两个或多个变量的值,目标是计算特征值,以知道矩阵是否是正定义的。

到目前为止,我已经尝试用int替换字符串,或者在矩阵上使用eval((函数,但它似乎与矩阵不兼容。

以下是我迄今为止所拥有的代码示例。

#Hessian
x = 0
y = 0
input_1 = '6x, -3, 0'
input_2 = '-3, 6y, 0'
input_3 = '0, 0, 0'
input_1 = input_1.replace('x', '*x')
input_2 = input_2.replace('y', '*y')
input_1 = input_1.split(',')
input_2 = input_2.split(',')
input_3 = input_3.split(',')
hess = np.matrix([input_1,input_2,input_3])
hess

哪个输出:

matrix([['6*x', ' -3', ' 0'],
['-3', ' 6*y', ' 0'],
['0', ' 0', ' 0']], dtype='<U4')

现在,问题是我找不到用上面声明的值替换变量"x"one_answers"y"的方法,因为它们仍然是字符串。

如果我能找到一种方法将矩阵的值转换为整数并替换这些值,那么我会使用类似eigenval = np.all(np.linalg.eigvals(hess))的东西来计算本征值。

任何关于如何更改矩阵元素的提示或建议都将不胜感激。

提前谢谢。

编写一个函数,将输入字符串解析为所需格式。

def parse_input(instring, x, y):
xs = []
for i in instring.split(','):
if 'x' in i and 'y' in i:
xs.append(x * y * int(i.replace('x', '').replace(y, '')))
elif 'x' in i:
xs.append(x * int(i.replace('x', '')))
elif 'y' in i:
xs.append(y * int(i.replace('y', '')))
else:
xs.append(int(i))
return xs

样品运行:

>>> input_1 = '6x, -3, 0'
>>> input_2 = '-3, 6y, 0'
>>> input_3 = '0, 0, 0'
>>> [parse_input(s, 0, 0) for s in (input_1, input_2, input_3)]
[[0, -3, 0], [-3, 0, 0], [0, 0, 0]]

您可以利用python的eval函数来评估字符串的值

例如,如果您的代码为:

x = 5
z = eval('10*x')

那么z将等于50。

然后可以使用map函数将eval映射到字符串列表中。如果你用这样的东西替换split行:

input_1 = list(map(eval, input_1.split(',')))
input_2 = list(map(eval, input_2.split(',')))
input_3 = list(map(eval, input_3.split(',')))

那么包含x和y的值将包含字符串求值为的任何数字。

相关内容

  • 没有找到相关文章

最新更新