Python 带参数线性方程组的求解

Python 带参数线性方程组的求解,python,numpy,linear-algebra,sympy,Python,Numpy,Linear Algebra,Sympy,晚上好,我也是python的新手,但我想通过解决日常问题来提高我的技能。今天的任务是创建一个能够计算线性应用程序的python程序,例如: 50x1 - 15x2 - 25x3 + 48x4 = 22 - 13x1 - 4x2 + 9x3 - 4x4 = -25 - 14x1 + 38x2 - 26x3 - 32x4 = -8*u-38 29x1 - 13x2 - 4x3 + 26x4

晚上好,我也是python的新手,但我想通过解决日常问题来提高我的技能。今天的任务是创建一个能够计算线性应用程序的python程序,例如:

50x1    - 15x2  - 25x3  + 48x4  =   22         
- 13x1  - 4x2   + 9x3   - 4x4   =   -25        
- 14x1  + 38x2  - 26x3  - 32x4  =   -8*u-38         
29x1    - 13x2  - 4x3   + 26x4  =   41
通常,我会通过以下方式解决该问题:

import numpy as np
a = np.array([[50,-15,-25,48],[-13,-4,9,-4],[-14,38,26,-32],[29,-13,-4,26]])
b = np.array([22,-25,-8*u-38,41])

print(np.linalg.solve(a,b))

由于数组B中的字母“u”,这将抛出一个错误,如何使其工作?谢谢你的建议。

你不能用3个方程式来解4个未知数。我唯一可能的建议是放下
u

编辑 通常,线性系统解算器(如
np.linalg.solve
)通常符合相同的刚性约定:第一个输入值应该是
x
s的系数矩阵,第二个输入值应该是表示单个方程左侧的常数值向量。如果您的系统不是这样的,您必须首先手工重构它,使其符合标准约定。否则,您必须考虑使用更灵活的求解系统,例如

以下是如何使用Symphy以
u
的形式求解方程组:

import sympy as sym

x_0,x_1,x_2,x_3 = sym.symbols('x_:4')
u = sym.symbols('u')

lhs = [
    50*x_0 - 15*x_1 - 25*x_2 + 48*x_3,
    -13*x_0 - 4*x_1 + 9*x_2 - 4*x_3,
    -14*x_0 + 38*x_1 + 26*x_2 - 32*x_3,
    29*x_0 - 13*x_1 - 4*x_2 + 26*x_3
]
rhs = [22,-25,-8*u-38,41]

eqs = [l - r for l,r in zip(lhs, rhs)]
sym.nonlinsolve(eqs, [*xs])
输出:

{((1572*u + 176197)/34925, -4*(2341*u + 37266)/34925, -204*(u + 1)/1397, -2*(722*u + 21677)/6985)}

在最简单的情况下,您可以将方程设置为u的函数:

a = np.array([[50,-15,-25,48],[-13,-4,9,-4],[-14,38,26,-32],[29,-13,-4,26]])

def solve(u):
    b = np.array([22,-25,-8*u-38,41])
    return np.linalg.solve(a,b)

您的
u
不在矩阵中这一事实意味着系统没有针对不同
u
值的一个、多个或无解决方案。您可以看到,使用行列式(
np.linalg.det(a)
)。

我刚刚用任务中的正确值编辑了我的文章。通过手工,我可以做到,只是我很难理解在代码中是如何工作的?我刚刚重新阅读了你的编辑,我觉得非常有用,谢谢你。我想我会尝试使用solveset解决一些问题。非常感谢。如果你真正想做的是从
u
方面寻找解决方案,那么Sympy将是一个很好的选择。这正是我想要做的。对于“u”的值,系统会有1个精确解还是无限解?这就是我想弄明白的,你能详细说明一下如何使用Symphy实现这一点吗?再次感谢你的回答。当你有更多的方程式而不是未知数时,你可以得到最好的答案。线性回归将给出使所有点的均方误差最小化的答案。