男模Python-求解线性方程组

python教学我们还继续吧

今天就练习求解线性方程组

你需要先执行

pip install sympy

注意是在python xxx.py的那个地方执行

pip install sympy

的意思是,从网络下载sympy软件包

sympy可以做一些带有符号的数学运算,比如带有未知数的线性方程组

记得弄一个新的文件

主要是理解pip是干什么的

现在看看第二行

虽然它没有报错,但是新函数symbols你需要自己读文档看看他应该怎么用(文档是英文的,如果你不喜欢可以问deepseek,他应该也可以读这个文档的)

然后和我截图里面比较,你会发现正确写法是

x, y, z = symbols("x y z")

里面没有逗号

那么我是怎么知道这一点的呢?我也没有symbols的文档啊?

嗯原因很简单,因为我最初也是像你那样以为在参数字符串里面是用逗号分割的,但是这样程序执行不正确,检查了好几遍确定我这里没有问题之后,我就问了deepseek,怎么解线性方程组啊?它不仅告诉我怎么解,还会给我实例代码,实例代码中就有symbols函数的正确用法

x, y, z = symbols("x y z")我说的这句话代表什么意思?

在Python的符号计算库 SymPy 中,x, y, z = symbols("x y z") 是一条常用的语句,用于定义符号变量。它的作用如下:

1. 功能解释

symbols("x y z") 会创建三个符号变量 x, y, z(变量名与字符串中的名称一致)。

通过解包赋值(x, y, z = ...),这三个符号变量被分别绑定到变量名 x, y, z 上,方便后续使用。

2. 为什么需要这样做?

SymPy 要求在使用符号变量前显式声明它们。

例如,直接写 expr = x + y 会报错(除非 x 和 y 已定义为符号变量)。

3. 等价写法

也可以分开定义:

python

x = symbols('x')

y = symbols('y')

z = symbols('z')

但 symbols("x y z") 更简洁,且支持同时生成多个符号。

在Python的符号计算库 SymPy 中,x, y, z = symbols("x y z") 是一条常用的语句,用于定义符号变量。它的作用如下:

1. 功能解释

symbols("x y z") 会创建三个符号变量 x, y, z(变量名与字符串中的名称一致)。

通过解包赋值(x, y, z = ...),这三个符号变量被分别绑定到变量名 x, y, z 上,方便后续使用。

2. 为什么需要这样做?

SymPy 要求在使用符号变量前显式声明它们。

例如,直接写 expr = x + y 会报错(除非 x 和 y 已定义为符号变量)。

3. 等价写法

也可以分开定义:

python

x = symbols('x')

y = symbols('y')

z = symbols('z')

但 symbols("x y z") 更简洁,且支持同时生成多个符号。

是的,因为这里需要设置的是数学符号变量,它需要给接下来的Eq函数使用。

因为编程语言是不会自动支持数学符号变量的,只能通过这种方式告诉系统我们接下来要使用x, y, z 3个数学符号

在 SymPy 中,solve((eq1, eq2), (x, y)) 的作用是 求解由 eq1 和 eq2 组成的方程组,并将 x 和 y 作为未知数解出。

1. 语法解析

python

solve((eq1, eq2), (x, y))

输入参数:

(eq1, eq2):由 Eq 定义的方程组成的元组(表示方程组)。

(x, y):指定要解的符号变量(未知数)。

输出:

返回一个字典 {x: sol_x, y: sol_y},其中 sol_x 和 sol_y 是 x 和 y 的解(可能是表达式,也可能是数值)。

2. 具体示例

假设我们有以下方程组:

{11x+8y+2z=1000(eq1)3x+5y+7z=2000(eq2){11x+8y+2z=1000(eq1)3x+5y+7z=2000(eq2)​运行以下代码:

python

from sympy import symbols, Eq, solve

# 定义符号变量

x, y, z = symbols("x y z")

# 定义方程

eq1 = Eq(11*x + 8*y + 2*z, 1000)

eq2 = Eq(3*x + 5*y + 7*z, 2000)

# 解方程组(x 和 y 用 z 表示)

solution = solve((eq1, eq2), (x, y))

print(solution)

输出可能类似:

python

{

    x: (6100 - 46*z)/31,

    y: (17000 - 71*z)/31

}

这表示:

x=6100−46z31,y=17000−71z31x=316100−46z​,y=3117000−71z​即解是用 z 表示的表达式(因为方程组有 3 个变量但只有 2 个方程,解不唯一)。

3. 关键点说明

解的情况:

如果方程数量 等于 未知数数量,通常能得到唯一解(数值或具体表达式)。

如果方程数量 少于 未知数数量(如本例),解会以剩余变量(如 z)的参数形式表示。

如果方程无解,返回空列表 []。

指定未知数的顺序:

solve((eq1, eq2), (x, y)) 和 solve((eq1, eq2), (y, x)) 的解顺序不同,但数学等价。

符号解与数值解:

SymPy 默认返回符号解(包含其他变量的表达式)。

如果需要数值解,可以代入具体值:

python

# 假设 z = 10,求 x 和 y 的数值解

solution_sub = {k: v.subs(z, 10) for k, v in solution.items()}

print(solution_sub)  # 输出: {x: 180.0, y: 320.0}

4. 扩展用法

解更多方程:

如果有 3 个方程和 3 个变量,可以解出唯一解:

python

eq3 = Eq(x + y + z, 500)

solution = solve((eq1, eq2, eq3), (x, y, z))

解非线性方程:

solve() 也适用于非线性方程(如 x**2 + y = 5)。

5. 总结

solve((eq1, eq2), (x, y)) 是 SymPy 的核心功能之一,用于求解符号方程组。理解它的输入(方程和变量)和输出(解的字典形式)是使用 SymPy 进行符号计算的基础。

就是这样

只不过我们写的是

solve((eq1, eq2), (x, z))

而不是x, y

其实效果是一样的,

之所以是x, z,是因为我给李亚峰讲的时候就是这么写的,当时是手算的,x, z更简单一点,就先算x, z了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值