最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用scipy.optimize的fsolve,root函數(shù)求解非線性方程問題

 更新時間:2022年12月14日 09:21:45   作者:曲草  
這篇文章主要介紹了使用scipy.optimize的fsolve,root函數(shù)求解非線性方程問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

scipy.optimize的fsolve,root函數(shù)求解非線性方程

求解如下方程

在這里插入圖片描述

from scipy.optimize import fsolve, root
import numpy as np

# 定義方程內(nèi)容
def f(x, *arg):
    return arg[0] * 2 ** (1 - x) / (1 - x) + (1 - arg[0]) * 1.6 ** (1 - x) / (1 - x) - arg[0] * 3.85 ** (1 - x) / (
            1 - x) - (1 - arg[0]) * 0.1 ** (1 - x) / (1 - x)

# 參數(shù)p為一個超參數(shù)

results = [[p * 0.1, fsolve(f, x0=0, args=(p * 0.1))[0]] for p in range(2, 10)]

print(np.array(results), '\n')

results = [[p * 0.1, root(f, x0=0, args=(p * 0.1))['x'][0]] for p in range(2, 10)]

print(np.array(results))


# output results
[[ 0.2        -0.94683705]
 [ 0.3        -0.48657472]
 [ 0.4        -0.14263228]
 [ 0.5         0.14636333]
 [ 0.6         0.4114561 ]
 [ 0.7         0.67618002]
 [ 0.8         0.9705809 ]
 [ 0.9         1.3683912 ]] 

[[ 0.2        -0.94683705]
 [ 0.3        -0.48657472]
 [ 0.4        -0.14263228]
 [ 0.5         0.14636333]
 [ 0.6         0.4114561 ]
 [ 0.7         0.67618002]
 [ 0.8         0.9705809 ]
 [ 0.9         1.3683912 ]]

python求解非線性方程組的幾種方式

問題

對此非線性方程組,根據(jù)方程圖像(如下圖)可知,應(yīng)有4組不同的解。以下嘗試用不同的方法求出該方程組的解。


在這里插入圖片描述

1. 利用gekko的GEKKO求解

"""利用gekko求解非線性方程組"""
from gekko import GEKKO

m = GEKKO()
x = m.Var(value=0)  # 給定初值為0
y = m.Var(value=0)  # 給定初值為0

m.Equations([x ** 2 / 4 + y ** 2 == 1,
             (x - 0.2) ** 2 - y == 3])
m.solve(disp=False)
x, y = x.value, y.value
print(x, y)

輸出結(jié)果:

[-1.2961338938] [-0.7615833719]

換不同初值計算得到的結(jié)果如下:

[-1.6818042485] [0.54118722964] #  給定初值為(-2,0)
[1.9760411678] [0.15432222765] #  給定初值為(2,0)
[1.8018969861] [-0.43392604594] #  給定初值為(2,-2)
[1.9760412095] [0.15432236862] #  給定初值為(10,10)
[1.801896954] [-0.4339261545] #  給定初值為(10,-10)

可知,用這種方法并不能得到方程組的全部解,并且最終得到的解為其解集中與給定的初值“距離”較近的一個。

2. 利用scipy.optimize的fsolve求解

optimize庫中的fsolve函數(shù)可以用來對非線性方程組進(jìn)行求解。

from scipy.optimize import fsolve

def f(X):
    x = X[0]
    y = X[1]
    return [x ** 2 / 4 + y ** 2 - 1,
            (x - 0.2) ** 2 - y - 3]

X0 = [0, 0]
result = fsolve(f, X0)
print(result)

輸出結(jié)果:

[-1.29613389 -0.76158337]

換不同初值計算得到的結(jié)果如下:

[-1.68180425  0.54118723] #  給定初值為(-2,0)
[1.97604116 0.15432219] #  給定初值為(2,0)
[ 1.80189699 -0.43392605] #  給定初值為(2,-2)
[1.97604116 0.15432219] #  給定初值為(10,10)
[ 1.80189699 -0.43392605] #  給定初值為(10,-10)

可知,用這種方法也不能得到方程組的全部解,并且最終得到的解與給定初值有關(guān)。

3. 利用scipy.optimize的root求解

from scipy.optimize import fsolve, root

def f(X):
    x = X[0]
    y = X[1]
    return [x ** 2 / 4 + y ** 2 - 1,
            (x - 0.2) ** 2 - y - 3]

X0 = [10, 10]
result1 = fsolve(f, X0)
result2 = root(f, X0)

print(result2)

輸出結(jié)果:

   fjac: array([[-0.2547064 , -0.96701843],
       [ 0.96701843, -0.2547064 ]])
     fun: array([-3.34943184e-12,  2.75734990e-12])
 message: 'The solution converged.'
    nfev: 22
     qtf: array([-1.65320424e-10, -2.73193431e-10])
       r: array([-3.70991104,  0.8956477 ,  0.56891317])
  status: 1
 success: True
       x: array([1.97604116, 0.15432219])

結(jié)果與fsolve函數(shù)得到的結(jié)果相同。

4. 利用scipy.optimize的leastsq求解

from scipy.optimize import leastsq

def f(X):
    x = X[0]
    y = X[1]
    return [x ** 2 / 4 + y ** 2 - 1,
            (x - 0.2) ** 2 - y - 3]

X0 = [10, 10]
h = leastsq(f, X0)
print(h)

輸出結(jié)果:

(array([1.97604116, 0.15432219]), 2)

5. 利用sympy的solve和nsolve求解

5.1 利用solve求解所有精確解

from sympy import symbols, Eq, solve, nsolve

x, y = symbols('x y')
eqs = [Eq(x ** 2 / 4 + y ** 2, 1),
       Eq((x - 0.2) ** 2 - y, 3)]

print(solve(eqs, [x, y]))

輸出結(jié)果:

[[-1.68180424847377 + 1.56760579250585e-32*I
  0.541187229573922 - 3.01196919624356e-31*I]
 [-1.29613389377477 + 1.95607066863502e-32*I
  -0.761583371898353 + 3.93313832308616e-31*I]
 [1.80189698634479 - 1.95607066863926e-32*I
  -0.433926045139482 - 8.10475677027422e-31*I]
 [1.97604115590375 - 1.56760579250161e-32*I
  0.154322187463913 + 7.18358764343162e-31*I]]

可以看出,用這種方法能夠得到方程組的全部解,并且為精確解,缺點是求解時間較長。

5.2 利用nsolve求解數(shù)值解

from sympy import symbols, Eq, nsolve
x, y = symbols('x y')
eqs = [Eq(x ** 2 / 4 + y ** 2, 1),
       Eq((x - 0.2) ** 2 - y, 3)]

X0 = [3, 4]
print(nsolve(eqs, [x, y], X0))

輸出結(jié)果:

Matrix([[1.97604115590375], [0.154322187463913]])

nsolve為數(shù)值求解,需要指定一個初始值,初始值會影響最終得到哪一個解(如果有多解的話),而且初始值設(shè)的不好,則可能找不到解。

scipy.optimize.root求解速度快,但只能得到靠近初始值的一個解。對形式簡單、有求根公式的方程,sympy.solve能夠得到所有嚴(yán)格解,但當(dāng)方程組變量較多時,它求起來會很慢。而且對于不存在求根公式的復(fù)雜方程,sympy.solve無法求解。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python基于OpenCV實現(xiàn)人臉檢測并保存

    Python基于OpenCV實現(xiàn)人臉檢測并保存

    這篇文章主要介紹了Python基于OpenCV實現(xiàn)人臉檢測并保存,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作

    pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作

    這篇文章主要介紹了pandas快速處理Excel,替換Nan,轉(zhuǎn)字典的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • OpenCV半小時掌握基本操作之圖像輪廓

    OpenCV半小時掌握基本操作之圖像輪廓

    這篇文章主要介紹了OpenCV基本操作之圖像輪廓,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 操作Windows注冊表的簡單的Python程序制作教程

    操作Windows注冊表的簡單的Python程序制作教程

    這篇文章主要介紹了操作Windows注冊表的簡單的Python程序制作教程,包括遠(yuǎn)程對注冊表進(jìn)行修改的實現(xiàn),需要的朋友可以參考下
    2015-04-04
  • python處理yaml文件的操作方法

    python處理yaml文件的操作方法

    yaml文件是一種數(shù)據(jù)序列化語言,廣泛用于配置文件、日志文件、等,本文給大家介紹python處理yaml文件的操作方法,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 利用Python通過獲取剪切板數(shù)據(jù)實現(xiàn)百度劃詞搜索功能

    利用Python通過獲取剪切板數(shù)據(jù)實現(xiàn)百度劃詞搜索功能

    大家是不是嫌棄每次打開百度太麻煩?今天教大家利用Python通過獲取剪切板數(shù)據(jù)實現(xiàn)百度劃詞搜索功能,用程序直接打開網(wǎng)頁,需要的朋友可以參考下
    2021-06-06
  • Python如何實現(xiàn)在字符串里嵌入雙引號或者單引號

    Python如何實現(xiàn)在字符串里嵌入雙引號或者單引號

    今天小編就為大家分享一篇Python如何實現(xiàn)在字符串里嵌入雙引號或者單引號,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python中常見的導(dǎo)入方式總結(jié)

    Python中常見的導(dǎo)入方式總結(jié)

    這篇文章主要介紹了Python中常見的導(dǎo)入方式總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • python經(jīng)典練習(xí)百題之猴子吃桃三種解法

    python經(jīng)典練習(xí)百題之猴子吃桃三種解法

    這篇文章主要給大家介紹了關(guān)于python經(jīng)典練習(xí)百題之猴子吃桃三種解法的相關(guān)資料, Python猴子吃桃子編程是一個趣味性十足的編程練習(xí),在這個練習(xí)中,我們將要使用Python語言來模擬一只猴子吃桃子的過程,需要的朋友可以參考下
    2023-10-10
  • 詳解Python NumPy中矩陣和通用函數(shù)的使用

    詳解Python NumPy中矩陣和通用函數(shù)的使用

    在NumPy中,矩陣是ndarray的子類,與數(shù)學(xué)概念中的矩陣一樣,NumPy中的矩陣也是二維的,可以使用 mat 、 matrix 以及 bmat 函數(shù)來創(chuàng)建矩陣。本文將詳細(xì)講解NumPy中矩陣和通用函數(shù)的使用,感興趣的可以了解一下
    2022-06-06

最新評論

铅山县| 图木舒克市| 安化县| 衡水市| 勃利县| 常州市| 嘉定区| 尉犁县| 云南省| 阿尔山市| 丰台区| 宜城市| 三江| 镇江市| 太仆寺旗| 玉林市| 元氏县| 嘉禾县| 紫阳县| 大洼县| 叙永县| 兰州市| 高雄市| 满洲里市| 南乐县| 大冶市| 蓬莱市| 潼关县| 鄂温| 万安县| 讷河市| 屯门区| 邵阳县| 铜山县| 九龙坡区| 巴中市| 元阳县| 宽甸| 来凤县| 霍城县| 都匀市|