Python求解非线性方程

原文地址:http://blog.csdn.net/ville_zeng/article/details/25370053

        昨晚一朋友问了我道数学题:已知弧长l=156,弦长d=140,求半径R和夹角a。

        我试了下,方程比较好列,但是求解的话就比较费劲了,心想要是用Matlab的话也就瞬间的事儿,可电脑没安装Matlab,然后想到Python的一个数学库scipy,研究下,是可以解决的。

        方程如下:

  ·      cos(a) = 1 - d^2 / (2*R^2)

 ·       L = a * R                         

        使用scipy下的fsolve函数即可求解,代码如下:

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. from scipy.optimize import fsolve  
  2. from math import cos  
  3.   
  4. def f(x):  
  5.     d = 140  
  6.     l = 156  
  7.     a = float(x[0])  
  8.     r = float(x[1])  
  9.     return [  
  10.         cos(a) - 1 + (d*d)/(2*r*r),  
  11.         l - r * a  
  12.     ]  
  13. result = fsolve(f, [11])  
  14. print result  
计算结果:

[  1.5940638   97.86308398],即夹角为1.59,半径为97.86

         关于scipy函数库,官网地址:http://www.scipy.org/,文档地址:http://sebug.net/paper/books/scipydoc/scipy_intro.html。该库貌似没法用pip install安装,安装的话Ubuntu平台下可以如下操作:

sudo apt-get install python-numpy python-scipy

        因为scipy是依赖numpy的,所以两者都要安装。文章写的比较简单,希望能给读者以帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值