真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python高次方程函數(shù) python求解高次方程

一文讀懂Python 高階函數(shù)

將函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱(chēng)為高階函數(shù)。 函數(shù)式編程就是指這種高度抽象的編程范式。

創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供囊謙企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5場(chǎng)景定制、小程序制作等業(yè)務(wù)。10年已為囊謙眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

變量可以指向函數(shù),函數(shù)的參數(shù)能接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)就稱(chēng)之為高階函數(shù)。如下所示:

map(fun, lst),將傳入的函數(shù)變量func作用到lst變量的每個(gè)元素中,并將結(jié)果組成新的列表返回。

定義一個(gè)匿名函數(shù)并調(diào)用,定義格式如--lambda arg1,arg2…:表達(dá)式

reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, …]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算。

filter() 函數(shù)用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

閉包的定義?閉包本質(zhì)上就是一個(gè)函數(shù)

如何創(chuàng)建閉包?

如何使用閉包?典型的使用場(chǎng)景是裝飾器的使用。

global與nonlocal的區(qū)別:

簡(jiǎn)單的使用如下:

偏函數(shù)主要輔助原函數(shù),作用其實(shí)和原函數(shù)差不多,不同的是,我們要多次調(diào)用原函數(shù)的時(shí)候,有些參數(shù),我們需要多次手動(dòng)的去提供值。

而偏函數(shù)便可簡(jiǎn)化這些操作,減少函數(shù)調(diào)用,主要是將一個(gè)或多個(gè)參數(shù)預(yù)先賦值,以便函數(shù)能用更少的參數(shù)進(jìn)行調(diào)用。

我們?cè)賮?lái)看一下偏函數(shù)的定義:

類(lèi)func = functools.partial(func, *args, **keywords)

我們可以看到,partial 一定接受三個(gè)參數(shù),從之前的例子,我們也能大概知道這三個(gè)參數(shù)的作用。簡(jiǎn)單介紹下:

總結(jié)

本文是對(duì)Python 高階函數(shù)相關(guān)知識(shí)的分享,主題內(nèi)容總結(jié)如下:

怎么用python解一元高次函數(shù)

寫(xiě)個(gè)例子吧,需要安裝numpy數(shù)學(xué)庫(kù)

#!/usr/bin/python

import numpy as np

#求解方程x^2+2x+1=0的根

#方程參數(shù)列表抽象成一下形式:

arg=[1, 2, 1]

#求解

np.roots(args)

運(yùn)行即可求解了,如果沒(méi)有實(shí)根會(huì)給虛根的結(jié)果

python求解多解問(wèn)題怎么讓方程數(shù)量多于未知數(shù)值

目錄

一、多元多次方程

1.1 定義

我們常見(jiàn)的方程組有一元一次方程組,比如x+3=5這種,很簡(jiǎn)單很好解。

二元一次方程組,即方程組中有兩個(gè)未知數(shù),未知數(shù)的最高次數(shù)為1.

二元二次方程組:方程組中有兩個(gè)未知數(shù),未知數(shù)的最高次數(shù)為2.。此類(lèi)方程組均有公式解法或者成形的解法。

但是面臨多元多次方程組,解法錯(cuò)綜復(fù)雜,是數(shù)學(xué)家們研究的內(nèi)容。為了更好的解決此類(lèi)問(wèn)題,我們可以用python來(lái)實(shí)現(xiàn)。

1.2 例子

多元多次方程組例如下面這種,三元二次方程組:

下面這種,二元二次方程組。

第二個(gè)方程組實(shí)在比較復(fù)雜,因此需要借助python。

二、python求解工具包

python求解方程組的工具包較多。例如:

numpy:numpy.linalg.solve 可以直接求解線(xiàn)性方程組,numpy是python非常常用的包,解的方程也較為初級(jí)。

scipy:from scipy.optimize import fsolve,可以求解非線(xiàn)性方程組,使用較為方便,但是解集并不完備,可能漏掉一下解(后文會(huì)給個(gè)例子)scipy可以用于數(shù)學(xué)、科學(xué)、工程領(lǐng)域的常用軟件包,可以處理插值、積分、優(yōu)化,相對(duì)較初級(jí)易用

sympy:此工具包功能相對(duì)強(qiáng)大,支持符號(hào)計(jì)算、高精度計(jì)算、解方程、微積分、組合數(shù)學(xué)、離散數(shù)學(xué)、幾何學(xué)、概率與統(tǒng)計(jì)、物理學(xué)等方面的功能。github地址:

sage,不支持位運(yùn)算,z3約束求解器,等其他工具包,本文不詳述,感興趣的可以查找相應(yīng)的內(nèi)容。

本文詳細(xì)講述scipy以及sympy求解多次方程的方法。

三、scipy方法

3.1 使用scipy的fsolve求解

我們只將求解方程的部分。

用fsolve相對(duì)初級(jí),也相對(duì)簡(jiǎn)單易操作,代碼較為簡(jiǎn)單,只用將方程的表達(dá)式寫(xiě)出運(yùn)行即可。fsolve近似看作用最小二乘法求解。不夠很強(qiáng)大,很多情況下解集不完備或者無(wú)法解出。

例如對(duì)于

,首先要定義相應(yīng)的函數(shù):

def solve_function(unsolved_value):

x,y,z=unsolved_value[0],unsolved_value[1],unsolved_value[2]

return [

x**2+y**2-10,

y**2+z**2-34,

x**2+z**2-26,

]

求解函數(shù)三個(gè)公式都為0時(shí)候的解,中括號(hào)內(nèi)為初值[0, 0, 0]

solved=fsolve(solve_function,[0, 0, 0])

全部代碼:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

"""

python解方程

"""

from scipy.optimize import fsolve

def solve_function(unsolved_value):

x,y,z=unsolved_value[0],unsolved_value[1],unsolved_value[2]

return [

x**2+y**2-10,

y**2+z**2-34,

x**2+z**2-26,

]

solved=fsolve(solve_function,[0, 0, 0])

print(solved)

print("Program done!")

"""

運(yùn)行結(jié)果:

[-1. 3. 5.]

Program done!

"""

看出運(yùn)行結(jié)果來(lái)看,此結(jié)果并非完備解集。因?yàn)閤,y,z都是可正可負(fù)。例如1或者-1,3或者-3,5或者-5,但是此工具包只能解出一個(gè)解。

3.2 非完備解

顯而易見(jiàn),x**2-9=0的解為3或者-3

def solve_function(unsolved_value):

x=unsolved_value[0]

return [

x**2-9,

]

solved=fsolve(solve_function,[0])

但是程序只能得出一個(gè)結(jié)果3,但是得不到-3

3.3 非線(xiàn)性方程的解

最簡(jiǎn)單的sin(x)=0.5,則x可能為π/6或者 5π/6

#!/usr/bin/python

# -*- coding: UTF-8 -*-

"""

python解方程

"""

from scipy.optimize import fsolve

from math import sin,cos

def solve_function(unsolved_value):

x=unsolved_value[0]

return [

sin(x)-0.5

]

solved=fsolve(solve_function,[3.14])

print(solved)

solved=fsolve(solve_function,[0])

print(solved)

print("Program done!")

運(yùn)行結(jié)果為:

[2.61799388]

[0.52359878]

Program done!

可以解出π/6或者 5π/6,中括號(hào)內(nèi)為初始迭代的值。

3.4 無(wú)法求解

部分較難情況無(wú)法求解

#!/usr/bin/python

# -*- coding: UTF-8 -*-

"""

python解方程

"""

from scipy.optimize import fsolve

def solve_function(unsolved_value):

x,y=unsolved_value[0],unsolved_value[1]

return [

x*x+2*x*y,

2*x*y-2*y*y

]

solved=fsolve(solve_function,[6, -3])

print(solved)

print("Program done!")

無(wú)法求解會(huì)給出報(bào)錯(cuò),和用最小二乘法迭代得到明顯錯(cuò)誤的解。

[1.64526700e-115 1.33665018e-115]

A:\python\python\lib\site-packages\scipy\optimize\minpack.py:162: RuntimeWarning: The number of calls to function has reached maxfev = 600.

Program done!

warnings.warn(msg, RuntimeWarning)

四、sympy工具包求解

沒(méi)安裝可以在teiminal中pip install sympy,此工具包涉及支持符號(hào)計(jì)算、高精度計(jì)算、模式匹配、繪圖、解方程、微積分、組合數(shù)學(xué)、離散 數(shù)學(xué)、幾何學(xué)、概率與統(tǒng)計(jì)、物理學(xué)等方面的功能。功能較為強(qiáng)大,解方程組時(shí)性能也較好。

4.1 二元一次方程組

較為簡(jiǎn)單,

from sympy import *

# 二元一次方程

x = Symbol('x')

y = Symbol('y')

solved_value=solve([2*x+y-1, x-2*y], [x, y])

print(solved_value)

此方法較為簡(jiǎn)單,但是相應(yīng)的自變量應(yīng)當(dāng)寫(xiě)成符號(hào)的形式,x=Symbol('x')

求解后有分?jǐn)?shù)解:

{x: 2/5, y: 1/5}

Program done!

4.2 多解

多解情況與復(fù)數(shù)解

例如,多個(gè)解的情況,sympy可以很好的進(jìn)行求解

x = Symbol('x')

solved_value=solve([x**2-9], [x])

print(solved_value)

輸出結(jié)果:

[(-3,), (3,)]

4.3 復(fù)數(shù)解

復(fù)數(shù)解也可以很好解出:

# 復(fù)數(shù)解

solved_value = solve([x ** 2 + 9], [x])

print(solved_value)

solved_value = solve([x ** 4 - 9], [x])

print(solved_value)

"""

運(yùn)行結(jié)果:

[(-3*I,), (3*I,)]

[(-sqrt(3),), (sqrt(3),), (-sqrt(3)*I,), (sqrt(3)*I,)]

"""

復(fù)數(shù)解也能較好解出

4.4 非線(xiàn)性求解

比如三角函數(shù):

程序均能較好解出

# 非線(xiàn)性解

solved_value = solve([sin(x) - 0.5], [x])

print(solved_value)

solved_value = solve([sin(x) - 1], [x])

print(solved_value)

"""

[(0.523598775598299,), (2.61799387799149,)]

[(pi/2,)]

"""

4.5 較為復(fù)雜的二元二次方程

此題較難,無(wú)論人來(lái)算,很難算出,用scipy工具包也迭代不出解。但是sympy強(qiáng)大的功能可以很好的解出此方程。

# 二元二次方程組

x = Symbol('x')

y= Symbol('y')

solved_value=solve([x**2+2*x*y-6,2*x*y-2*y**2+3], [x,y])

print(solved_value)

有四組實(shí)數(shù)解:

[(-(-3 + sqrt(13))*sqrt(sqrt(13)/2 + 2), -sqrt(sqrt(13)/2 + 2)),

((-3 + sqrt(13))*sqrt(sqrt(13)/2 + 2), sqrt(sqrt(13)/2 + 2)),

(-sqrt(2 - sqrt(13)/2)*(-sqrt(13) - 3), -sqrt(2 - sqrt(13)/2)),

(sqrt(2 - sqrt(13)/2)*(-sqrt(13) - 3), sqrt(2 - sqrt(13)/2))]

復(fù)雜的問(wèn)題終于解出,有四組實(shí)數(shù)解!

五、全部代碼

#!/usr/bin/python

# -*- coding: UTF-8 -*-

"""

python解方程

created by xingxinagrui on 2020.2.24

"""

from scipy.optimize import fsolve

from math import sin,cos

from sympy import *

# 1-4 scipy

# 5-7 sympy

part=7

if part==1:

# 求解非線(xiàn)性方程組

def solve_function(unsolved_value):

x=unsolved_value[0]

return [

sin(x)-0.5

]

solved=fsolve(solve_function,[3.14])

print(solved)

solved=fsolve(solve_function,[0])

print(solved)

if part==2:

# 求解三元二次方程組

def solve_function(unsolved_value):

x, y, z = unsolved_value[0], unsolved_value[1], unsolved_value[2]

return [

x ** 2 + y ** 2 - 10,

y ** 2 + z ** 2 - 34,

x ** 2 + z ** 2 - 26,

]

solved = fsolve(solve_function, [0, 0, 0])

print(solved)

if part==3:

#解的非完備性

def solve_function(unsolved_value):

x = unsolved_value[0]

return [

x ** 2 - 9,

]

solved = fsolve(solve_function, [0])

print(solved)

if part == 4:

# 較難無(wú)法求解

def solve_function(unsolved_value):

x, y = unsolved_value[0], unsolved_value[1]

return [

x * x + 2 * x * y,

2 * x * y - 2 * y * y

]

solved = fsolve(solve_function, [6, -3])

print(solved)

if part == 5:

# 二元一次方程

x = Symbol('x')

y = Symbol('y')

solved_value=solve([2*x+y-1, x-2*y], [x, y])

print(solved_value)

if part == 6:

# 多解情況

x = Symbol('x')

solved_value=solve([x**2-9], [x])

print(solved_value)

# 復(fù)數(shù)解

solved_value = solve([x ** 2 + 9], [x])

print(solved_value)

solved_value = solve([x ** 4 - 9], [x])

print(solved_value)

# 非線(xiàn)性解

solved_value = solve([sin(x) - 0.5], [x])

print(solved_value)

solved_value = solve([sin(x) - 1], [x])

print(solved_value)

if part == 7:

# 二元二次方程組

x = Symbol('x')

y= Symbol('y')

solved_value=solve([x**2+2*x*y-6,2*x*y-2*y**2+3], [x,y])

print(solved_value)

print("Program done!")


名稱(chēng)欄目:python高次方程函數(shù) python求解高次方程
分享地址:http://weahome.cn/article/dosjeci.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部