最有效的求解方法:三行代码搞定任何线性方程
source link: http://mp.weixin.qq.com/s?__biz=MzI2NjkyNDQ3Mw%3D%3D&%3Bmid=2247493285&%3Bidx=2&%3Bsn=ad4829bb44352a5bbcda18db1377a72f
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
全文共 1097 字,预计学习时长 5 分钟
图源:unsplash
在三行函数中解决任何线性方程式的技巧,甚至可以在两行代码中重写,不想了解一下嘛?据笔者所知,这是解决Python中线性方程的最有效方法。
defsolve_linear(equation,var= x ): expression =equation.replace("=","-(")+")" grouped =eval(expression.replace(var, 1j )) return -grouped.real/grouped.imag
这是标准代数过程示例,最后得出答案。
它的原理是怎样的呢?首先定义一个线性方程式,它必须以纯形式可解。这意味着它只能有一个变量,通常写为x。二元方程需要求解多个线性方程(方程组)。
线性方程式由三个主要部分组成:常数,变量和乘数。
不管是几元方程还是运算的组合(加,减,乘和除),在括号范围内都是有效的。只要遵守线性方程的这些定义,就可以通过函数解决。
接下来逐步分解该函数,用以下线性方程式的演示为例。
将第一行中等式右侧的整个表达式移到左侧,将等式转换为要求值的表达式。
<span><span>expression</span>= equation.replace(<span>"="</span>,<span>" - ("</span>)+<span>")"</span></span>
IDE中的演示如下:
等式中的所有“变量”已移至一侧,等号后已无变量,该表达式等于0。
在第二行代码中计算新表达式的值,表示为ax + b =0。使用Python的内置复数处理,其中j表示数学常数i =√-1。
<span>grouped= <span>eval</span>(expression.replace(<span>var</span>,<span> 1j </span>)</span>
注意,在函数初始化时将var指定为x。
eval函数有一个表达式。通过用已知的j(i)替换未知变量x,Python将两类表达式元素分开求值,即变量和常量。对表达式求值时,答案为a * j +b,Python认定这是一个复数。由于使用j代替了x,所以结果是一个简化且易于求解的线性方程。
首先,在eval()的演示工作流程中,它可以接收字符串中给出的任何Python命令:
因此,数学表达式与任何Python表达式的处理方式相同。eval()的独到之处在于无需手动执行繁重的工作,而是利用Python的字符串处理。
Python会认为x实际上是i来自动求值字符串,这与下图中的操作相同:
最后获得了简化形式ax + b = 0。通过标准和简单的代数运算,发现x等于-b / a,或者通过创建的复数来运算,实数部分的负数(上例中为9)除以虚数乘数(上例中为1)。
<span><span>return</span> -grouped.<span>real</span>/grouped.<span>imag</span></span>
在最后一行代码中,通过返回复数实数部分的负数除以虚数部分来简单地返回此代数步骤。
通过操纵和利用Python的内置数学求值功能,这三行函数就可以对任何线性方程式(无论其长度或复杂度)进行处理啦。
推荐阅读专题
留言点赞发个朋友圈
我们一起分享AI学习与发展的干货
编译组:高荣蔚、顾家彤
相关链接:
https://medium.com/swlh/the-most-efficient-way-to-solve-any-linear-equation-in-three-lines-of-code-bb8f66f1b463
如转载,请后台留言,遵守转载规范
推荐文章阅读
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK