Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用辛方法解一组4符号方程时的属性错误_Python_Sympy_Symbols_Equation_Symbolic Math - Fatal编程技术网

Python 用辛方法解一组4符号方程时的属性错误

Python 用辛方法解一组4符号方程时的属性错误,python,sympy,symbols,equation,symbolic-math,Python,Sympy,Symbols,Equation,Symbolic Math,我想解一个由4个方程组成的系统,如下所示: x1 = b1*a1 + b2*a2 + b3*a3 + b4*a4 x2 = b1*a5 + b2*a6 + b3*a7 + b4*a8 x3 = b1*a9 + b2*a10 + b3*a11 + b4*a12 x4 = b1*a13 + b2*a14 + b3*a15 + b4*a16 其中,我的目标是找到一个解决方案,使b1、b2、b3、b4由其他参数/符号定义 我的尝试是: import sympy as sy sy.init

我想解一个由4个方程组成的系统,如下所示:

x1 = b1*a1 + b2*a2 + b3*a3 + b4*a4   
x2 = b1*a5 + b2*a6 + b3*a7 + b4*a8  
x3 = b1*a9 + b2*a10 + b3*a11 + b4*a12  
x4 = b1*a13 + b2*a14 + b3*a15 + b4*a16
其中,我的目标是找到一个解决方案,使b1、b2、b3、b4由其他参数/符号定义

我的尝试是:

import sympy as sy
sy.init_printing()

x1, x2, x3, x4, b1, b2, b3, b4, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14,
a15, a16 = sy.symbols('x1, x2, x3, x4, b1, b2, b3, b4, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16')

print(sy.solve(((x1-b1*a1-b2*a2-b3*a3-b4*a4, x2-b1*a5-b2*a6-b3*a7-b4*a8, 
x3-b1*a9-b2*a10-b3*a11-b4*a12,x4-b1*a13-b2*a14-b3*a15-b4*a16), [b1,b2,b3,b4])))
问题是我得到了以下错误:

print(sy.solve(((x1-b1*a1-b2*a2-b3*a3-b4*a4, x2-b1*a5-b2*a6-b3*a7-b4*a8, x3-b1*a9-b2*a10-b3*a11-b4*a12,x4-b1*a13-b2*a14-b3*a15-b4*a16), [b1,b2,b3,b4])))
File "C:\Users\Admin\AppData\Local\Programs\Python\Python39\lib\site-packages\sympy\solvers\solvers.py", line 858, in solve
symbols = set().union(*[fi.free_symbols for fi in f])
File "C:\Users\Admin\AppData\Local\Programs\Python\Python39\lib\site-packages\sympy\solvers\solvers.py", line 858, in <listcomp>
symbols = set().union(*[fi.free_symbols for fi in f])
AttributeError: 'list' object has no attribute 'free_symbols'
print(sy.solve((x1-b1*a1-b2*a2-b3*a3-b4*a4,x2-b1*a5-b2*a6-b3*a7-b4*a8,x3-b1*a9-b2*a10-b3*a11-b4*a12,x4-b1*a13-b2*a14-b3*a15-b4*a16),[b1,b2,b3,b3,b3,b4]))
文件“C:\Users\Admin\AppData\Local\Programs\Python\39\lib\site packages\sympy\solvers\solvers.py”,第858行,在solve中
symbols=set().union(*[fi.free\u f中fi的符号])
文件“C:\Users\Admin\AppData\Local\Programs\Python\39\lib\site packages\sympy\solvers\solvers.py”,第858行,在
symbols=set().union(*[fi.free\u f中fi的符号])
AttributeError:“list”对象没有“free\u symbols”属性

如何修复代码?

您在不应该存在的方程式周围添加了额外的括号。下面是一个简单的例子:

将sympy作为sym导入
x、 y=符号('x,y')
打印(符号解算((x+y,x-y-1),[x,y]))
解决方法是移除这些支架:

print(sym.solve((x+y,x-y-1),[x,y]))
这样您就可以将两个参数传递给
solve
。一个是方程组,另一个是符号列表。以前,您将一个参数作为元组传递

修复该问题并整理代码将提供:

import sympy as sym
sym.init_printing()

(
 x1, x2, x3, x4,
 b1, b2, b3, b4,
 a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16,
) = sym.symbols('x1:5 b1:5 a1:17')

equations = [
    x1 - b1*a1  - b2*a2  - b3*a3  - b4*a4,
    x2 - b1*a5  - b2*a6  - b3*a7  - b4*a8,
    x3 - b1*a9  - b2*a10 - b3*a11 - b4*a12,
    x4 - b1*a13 - b2*a14 - b3*a15 - b4*a16,
]
unknowns = [b1, b2, b3, b4]

solution = sym.solve(equations, unknowns)

print(solution)
请注意,您也可以像
Eq(x1,b1*a1+…)
一样使用
Eq
,对于线性系统,最好使用
linsolve
而不是
solve