你的位置: 冰河网 » 所有文章 » 程序设计 » Python解一元一次方程
分享到: 微信 更多

Python解一元一次方程

28
十一月

用程序解方程?因为有朋友问我这个问题,所以研究了一下,对于博主这样一个phper来说,解方程真是无从下手,但为了不丢面子,只有上百度了。

找到一个挺有意思的方法

原文地址: Solving Algebraic Equations Using Regular Expressions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * 计算 Ax+By=C
 */
function suan($A, $B, $C) {
 $A--;
 $B--;
 $str = str_repeat('-', $C);
 $search = '/^(.*)\1{' . $A . '}(.*)\2{' . $B . '}$/';
 preg_match($search, $str, $r);
 return array('x' => strlen($r[1]), 'y' => strlen($r[2]));
}
$A = 2;
$B = 3;
$C = 9;
$r = suan($A, $B, $C);
// 测试
echo '计算' . $A . 'x+' . $B . 'y=' . $C . '<br />';
echo 'x=' . ($r[x]) . '<br />';
echo 'y=' . ($r[y]);

通过正则,然后数长度,多个未知数只要改变正则表达式的模板就行了,但是这样是如此的不靠谱,比如说返回值无法精确到小数,无法解更复杂一点的方程,没有考虑无解的情况等等。

研究半天发现用PHP或者JS解方程的话几乎无法实现,而 Python 语言在科学计算方面确很强悍。

国外一个大神写的《Linear equations solver in 3 lines (Python recipe)》,Python解一元一次方程只需要三行就完成了。

代码

recipe

说到底呢,这个段代码的关键是利用了复数。
第一步:
2 * x + 233 = x * 8 + 3
变成
2 * x + 233 -(x * 8 + 3)
然后把x变成虚数1j
然后变成
2 * 1j + 233 -(1j * 8 + 3)
通过eval算出结果为230-6j
因为我们知道这个表达式结果为0,而且j也相当于x。
所以问题变成了:230-6j=0,也就是230-6x=0。
最后x = – 230 / 6 = 38.33333333336。

多亏了Python的eval() ,eval的第一个参数是表达式,第二个参数是命名空间,也就是把 x = 1j 通过第二个参数把一些值放进去。

神奇的求解函数

1
2
3
def s(eq, var='x'):
    r = eval(eq.replace('=', '-(') + ')', {var:1j}) 
    return -r.real / r.imag


无觅相关文章插件,快速提升流量

关于本文
  • 属于分类: 程序设计
  • 本文标签: ,
  • 文章编辑: Free
  • 流行热度:
  • 开荒日期:冰河纪元 13年11月28日 - 14时02分43秒
相关文章


    各种回音
    评论分页: 1 2 3 4
    1. 说: 回复他/她

      We need more instihgs like this in this thread.

      • 说:

        emak dan bapak koranglah agaknya, sebab main pakai hentam jer,kau nak pilih apa pun pilih apa korang nak susah sangat, kalau nak melayu terus hilang kuasa pilihlah yang kau suka,jangan nanti jadi melukut di tepi gantang suhaalad,,thhu tak apa makna nyer,, fikirlah sendiri

    2. 说: 回复他/她

      python貌似一直很火,在知乎上一直看见有人提出与python相关的问题,同时也看见我老公在看这个。

    3. 说: 回复他/她

      Python现在也热门了啊。

    4. 说: 回复他/她

      网赚助手评论引流大全已经加了您的博客!

    5. 说: 回复他/她

      Python还是挺火的,我是不太学得会了,希望博主能提点意见

      http://www.zjs.org.cn/

    评论分页: 1 2 3 4