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函数即可求解,代码如下:

from scipy.optimize import fsolve
from math import cos

def f(x):
    d = 140
    l = 156
    a = float(x[0])
    r = float(x[1])
    return [
        cos(a) - 1 + (d*d)/(2*r*r),
        l - r * a
    ]
result = fsolve(f, [1, 1])
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的,所以两者都要安装。文章写的比较简单,希望能给读者以帮助。

Python求解非线性方程

时间: 2024-08-25 12:09:13

Python求解非线性方程的相关文章

python 求解线性方程组

Python线性方程组求解 求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了.比如我们要求以下方程的解,这是一个非齐次线性方程组: 3x_1 + x_2 - 2x_3 = 5 x_1 - x_2 + 4x_3 = -2 2x_1 + 3x_3 = 2.5 import numpy as np from scipy.linalg import solve a = np.array([[3, 1, -2], [1, -1, 4], [2, 0, 3]]) b

【366】通过 python 求解 QP 问题

参考: 9.3 凸优化 · 如何在 Python 中利用 CVXOPT 求解二次规划问题 参考: Quadratic Programming - Official website 步骤如下: 首先安装 cvxopt library 将问题化成标准 QP 问题, 得到 P/q/G/h/A/b 直接利用自带函数求解即可cvxopt.solvers.qp(P, q[, G, h[, A, b[, solver[, initvals]]]]) 1.二次规划问题的标准形式 上式中,x为所要求解的列向量,x

Python求解数组重新组合求最小值(优酷)

题目描述:题目:含有n个元素的整型数组,将这个n个元素重新组合,求出最小的数,如(321,3,32,) 最小数为321323 题目分析: 将数组中所有元素填充到个数相等,填充的数字为最后一位的数字,如这个case所示,填充之后为{321,333,322},然后按大小排序, 排序之后将填充的数字去掉,然后拼接之后的数字就为最小数,即排序之后为{321,322,333},去掉填充数字为{321,32,3},即为321323 Python实现 def mergeMinValue(lst): #生成字符

Python求解登楼梯问题(京东2016笔试题)

问题:假设一段楼梯共15个台阶,小明一步最多能上3个台阶,那么小明上这段楼梯一共有多少种方法? 解析:从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,从第13个台阶上一步迈2个台阶上来,从第12个台阶上一步迈3个台阶上来),同理,第14个.13个.12个台阶都可以这样推算,从而得到公式f(n) = f(n-1) + f(n-2) + f(n-3),其中n=15.14.13.....5.4.然后就是确定这个递归公式的结束条件了,第一个台阶只有1种上法,第二个台阶有2

Python求解啤酒问题(携程2016笔试题)

问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升,并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的2倍.那么,本来有多少升啤酒呢?解析:由于该酒商只卖整桶酒,简单分析几个桶的容量可知,第二位顾客必须买走剩下的3桶葡萄酒才有可能是第一位顾客的2倍.假设第一位顾客买走的葡萄酒共L升,那么第二位顾客买走的是2L升.也就是说,葡萄酒的总数应该能被3整除.所以,解法就呼之欲出了. Python 解法1 1

用R语言求解非线性方程

从本质上来说,Newtons就是用迭代方式,使近似解(泰勒公式)不断的逼近真实解,当满足精度要求时,即可认为近似解为真实解 下面用R语言实现Newtons法 Newtons<-function(fun,x,ep=1e-5,it_max=100) ##fun为需要求解的方程(组),x为初始解,ep为精度要求,it_max为最大迭代次数{ index<-0 ##指示是否完成迭代成功,满足精度要求 k<-1 ##迭代次数 while(k<=it_max) { x1<-x;obj&l

求解非线性方程的的最优化算法C++程序

http://www.saige.com/shop/list-2008104.htmhttp://www.saige.com/shop/list-2008108.htmhttp://www.saige.com/shop/list-2008110.htmhttp://www.saige.com/shop/list-2008115.htmhttp://www.saige.com/shop/list-2008120.htmhttp://www.saige.com/shop/list-2008123.h

打靶法求解两点边值问题

function varargout = shooting_two_point_boundary(varargin) % ========================================================== % 函数名:shooting_two_point_boundary.m % 基于打靶法计算两点边值问题,仅针对二阶微分方程 % author: xianfa110. % blog: http://blog.sina.com.cn/xianfa110 % 函数形

使用python解线性矩阵方程

这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极其简单的解决方式,也学到了不少东西.先把代码给出. import numpy as np # A = np.mat('1 2 3;2 -1 1;3 0 -1') A = np.array([[1, 2, 3], [2, -1, 1], [3, 0, -1]]) b = np.array([9, 8,