免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 30151 | 回复: 3
打印 上一主题 下一主题

用python解一元一次方程,一元二次方程,二元一次方程组 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-14 13:29 |只看该作者 |倒序浏览
不需要化成一般形式,也不需要在系数和字母之间加入*号,只需要输入未知数和方程即可,已经打包,代码也在包里
解方程.zip (2.06 MB, 下载次数: 947)

一下是核心代码(已经先通过另一个函数化成PYTHON的表达式才用这个计算)

一元一次方程:
  1. def solve(eq,var='x'):   #利用虚数型解方程
  2.     eq1 = eq.replace("=","-(")+")"
  3.     c = eval(eq1,{var:1j})
  4.     return -c.real/c.imag
复制代码
二元一次方程:
  1. def solve(eqa,eqb,x,y):   #利用虚数型解方程
  2.     #两方程整理后分别为ax+by+c=0,dx+ey+f=0   把用来带入方程2的x值放在put,x的终值为root1,y为root2
  3.     eq1 = eqa.replace("=","-(")+")"  #方程1移项


  4.     #化简方程1
  5.     eq1=cheaker1(x,y,eq1)
  6.     a = (eval(eq1,{x:1j,y:0})).imag
  7.     b = (eval(eq1,{x:0,y:1j})).imag
  8.     c = (eval(eq1,{x:0,y:1j})).real

  9.     #带入准备
  10.     put = "(-("+str(b)+"y+"+str(c)+")/"+str(a)+")"

  11.     eq2 = eqb.replace("=","-(")+")"  #方程2移项

  12.     #将x带入
  13.     two  = eq2.replace(x,put)


  14.     #整理y
  15.     two=cheaker1(x,y,two)

  16.     #求y
  17.     two1 = eval(two,{y:1j})
  18.     root2=(-two1.real/two1.imag)

  19.     #将y带入,求x
  20.     one  = eq1.replace(y,str(root2))
  21.     one1 = eval(one,{x:1j})
  22.     root1=(-one1.real/one1.imag)

  23.    
  24.     return (root1,root2)
复制代码
一元二次方程:
  1. def solve(eqa,x):   #利用虚数型解方程
  2.     #方程整理后为ax^2+bx+c=0
  3.    
  4.     eq1 = eqa.replace("=","-(")+")"  #方程移项


  5.     #化简方程1


  6.     c = eval(eq1,{(str(x)+"**2"):0,x:0})
  7.     b =(eval(eq1,{(x+"**2"):0,x:1j})).imag
  8.     a1=c-(eval(eq1,{(x+"**2"):0,x:1j})).real
  9.     a =(eval(eq1,{(x+"**2"):1j,x:0})).imag+a1


  10.     #代入公式
  11.     d=b**2-4*a*c
  12.     if d<=0 : return (None,None)  #无实数解
  13.     root1=(-b+sqrt(d))/(2*a)
  14.     root2=(-b-sqrt(d))/(2*a)

  15.    
  16.     return (root1,root2)
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-10-10 12:31 |只看该作者
好高深的代码,晕乎乎的

论坛徽章:
0
3 [报告]
发表于 2013-10-12 09:23 |只看该作者
建议楼主还是学一下线性代数吧。算法没错,方向错了
二次三次四次方程都有通解,很好办。再高次只能用迭代算法来作近似计算了。用求根公式来解方向也是有问题的

论坛徽章:
0
4 [报告]
发表于 2013-10-22 10:58 |只看该作者
同意楼上,python的计算模块很多的
不过作为自己动手实践的做法还是很好的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP