Scipy入門(求解方程組2)

2021-02-20 Python數據分析之旅

一.非線性方程組

     在前面我們討論的大多數是關於未知數的線性方程組,本節主要討論非線性方程組,簡單的理解為不是關於未知數(不一定是x)的一次方程,比如我們熟悉的x^2-4x+3=0這種方程組但是這種方程比較簡單,我們可以利用一些公式直接解出其解,但是對於x^3-sin(x)=0這種方程,我們是沒有通用公式的解出它的解,這時我們就要採取一些其他方法來求解。本節我們主要採取的是採用迭代循環方法進行求解,比較典型方法有二分法和牛頓法。(其實這兩種方法的基礎就是通過畫圖來大概確定解範圍,從而在相應區間進行求解)

一.畫圖求解範圍

import numpy as npimport matplotlib.pyplot as pltx=np.linspace(-2,2,1000)
f1=x**3-x**2-xf2=x-3 * np.sin(x)f3=np.exp(x)-2f4=np.sin(x)-x**2
fig,axes=plt.subplots(1,4,figsize=(12, 3),sharey=True)
for n,f in enumerate([f1,f2,f3,f4]):    axes[n].plot(x,f,lw=1.5)    axes[n].axhline(0,ls=':',color='k')    axes[n].set_ylim(-5,5)    axes[n].set_xticks([-2,-1,0,1,2])    axes[n].set_xlabel('x',fontsize=18)
axes[0].set_ylabel('f(x)',fontsize=18)
titles = [r'$f(x)=x^3-x^2-x$',r'$f(x)=x-3*sin(x)$',          r'$f(x)=\exp(x)-2$',r'$f(x)=sin(x)-x^2$']for n,title in enumerate(titles): axes[n].set_title(title) fig.tight_layout()plt.show()

運行結果

二.二分法求解

import numpy as npimport matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"plt.rcParams["font.size"] = "12"f=lambda x: np.exp(x) - 2tol=0.1a,b=-2,2x=np.linspace(-2.1, 2.1, 1000)
fig,ax=plt.subplots(1,1,figsize=(12, 4))
ax.plot(x,f(x),lw=1.5)
ax.axhline(0,ls=':',color='k')ax.set_xticks([-2,-1,0,1,2])ax.set_xlabel('x',fontsize=18)ax.set_ylabel('f(x)',fontsize=18)
fa,fb=f(a),f(b)
ax.plot(a,fa,'ko')ax.plot(b,fb,'ko')ax.text(a,fa+0.5,"a",ha='center',fontsize=18)ax.text(b,fb+0.5,"b",ha='center',fontsize=18)
n=1while b-a>tol:    m=a+(b-a)/2 fm=f(m) ax.plot(m,fm,'ko') ax.text(m,fm-0.5,r"$m_%d$"%n,ha='center') n+=1 if np.sign(fa)==np.sign(fm): a,fa=m,fm else: b,fb=m,fm
ax.plot(m,fm,'r.',markersize=10)ax.annotate("方程根的大約範圍 %.3f"% m, fontsize=14,family="SimHei", xy=(a,fm),xycoords='data', xytext=(-150,+50),textcoords='offset points', arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=-.5"))
ax.set_title("二分法求解方程組")plt.show()print('總的迭代次數為%d'%n)

                                              作者對原始碼進行了改進

運行結果

總的迭代次數為7(由於我們之前已經畫圖大概確定了它的解範圍,因此迭代效率總體來說還是很高的)

三.牛頓法

import numpy as npimport matplotlib.pyplot as pltimport sympyplt.rcParams["font.family"] = "SimHei"plt.rcParams["font.size"] = "12"
tol=0.01xk=2
s_x=sympy.symbols("x")s_f=sympy.exp(s_x)-2
f=lambda x:sympy.lambdify(s_x,s_f)(x)fp=lambda x:sympy.lambdify(s_x,sympy.diff(s_f,s_x))(x)
x=np.linspace(-1,2.1,1000)
fig,ax=plt.subplots(1,1,figsize=(12,4))ax.plot(x,f(x))
ax.axhline(0,ls=':',color='k')
n=0while f(xk)>tol: xk_new=xk-f(xk)/fp(xk) ax.plot([xk,xk],[0,f(xk)],color='k',ls=':') ax.plot(xk,f(xk),'ko') ax.text(xk,-.5,r'$x_%d$'% n,ha='center') ax.plot([xk,xk_new],[f(xk),0],'k-') xk=xk_new n+=1
ax.plot(xk,f(xk),'r.',markersize=15)ax.annotate("方程根的大約範圍為%.3f"%xk, fontsize=14,family="SimHei", xy=(xk,f(xk)),xycoords='data', xytext=(-150,+50),textcoords='offset points', arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=-.5"))
ax.set_title("牛頓法求解")ax.set_xticks([-1,0,1,2])fig.tight_layout()plt.show()print('總的迭代次數為%d'%n)

                                             作者對原始碼進行了改進

運行結果

總的迭代次數為4(由於我們之前已經畫圖大概確定了它的解範圍,因此迭代效率總體來說還是很高的)

相關焦點

  • Scipy使用簡介
    物理常量常用單位special函數庫非線性方程組求解最小二乘擬合計算函數局域最小值計算全域最小值解線性方程組最小二乘解特徵值和特徵向量連續概率分布離散概率分布核密度函數二項分布,泊松分布,伽馬分布 import special as Sprint(S.gamma(4))6.0擬合與優化-optimizeoptimize模塊提供了許多數值優化算法,這裡主要對其中的非線性方程組求解、數值擬合和函數最小值進行介紹非線性方程組求解
  • 科學計算庫Scipy簡易入門
    Scipy是由針對特定任務的子模塊組成:模塊名應用領域scipy.cluster向量計算/Kmeansscipy.constants物理和數學常量scipy.fftpack傅立葉變換scipy.integrate積分程序scipy.interpolate插值scipy.io數據輸入輸出scipy.linalg線性代數程序scipy.ndimagen維圖像包scipy.odr正交距離回歸
  • 基於MATLAB求解三類方程組
    基於MATLAB求解三類方程組第1類 線性方程組線性方程組是指各個方程變量的最高次冪為1次的方程組。線性方程組主要有定解方程組、不定解方程組、超定方程組和奇異方程組。線性方程組的通解為齊次線性方程組的基礎解系加上線性方程組的一個特解。
  • 齊次線性方程組求解
    求解齊次線性方程組是線性代數的重要內容,也是線性代數的核心問題之一,要求同學們必需掌握。
  • 1.5w字,Scipy使用簡介,碼住!
    物理常量常用單位special函數庫非線性方程組求解最小二乘擬合計算函數局域最小值計算全域最小值解線性方程組最小二乘解特徵值和特徵向量連續概率分布離散概率分布核密度函數二項分布,泊松分布,伽馬分布 import special as Sprint(S.gamma(4))6.0擬合與優化-optimizeoptimize模塊提供了許多數值優化算法,這裡主要對其中的非線性方程組求解、數值擬合和函數最小值進行介紹非線性方程組求解
  • 中國突破億階線性方程組高性能求解
    對於與浪潮聯合開發的億階線性方程組MIC加速方案,太原理工大學博士生導師,中國計算數學學會常務理事、副秘書長李明給出了上述評價。「毫不誇張的講,大部分科學與工程問題都要歸結為一個線性方程組的求解問題。」李明教授一開頭說道。他介紹說,線性方程組的求解問題是一個十分古老的問題,早在中國古代數學專著《九章算術》第八章就詳細記載了一次線性方程組的求解方法。
  • 2019考研數學:淺析高斯消元法如何求解線性方程組
    線性方程組是線性代數的核心考點之一,命題率比較高。線性方程組求解的基本方法就是高斯消元法。今天我們就給大家簡單講解如何利用高斯消元法求解線性方程組的解。首先,我們先來了解一下線性方程組和高斯消元法的相關概念。
  • 定量分析方法第04講:Scipy基礎
    線性代數(scipy.linalg)scipy.linalg和numpy.linalgnumpy.matrix與2-D numpy.ndarraynumpy.matrix是矩陣類,具有比numpy.ndarray更方便的接口,用於矩陣操作。
  • MATLAB入門之MATLAB求線性方程組的解
    求解多元一次線性方程組的解,可以轉化為求解矩陣解的問題。例如:求下列線性方程組的解解:此方程可列成兩組不同的矩陣方程形式。一是,設X=[x1;x2;x3;x4]為列向量,矩陣A= [1 4 –7 6;0 2 1 1;0 1 1 3;1 0 1 –1],B=[0;-8;-2;1]為列向量,則方程形式為AX=B,其求解過程用左除:由此可見,A\B 的確與inv(A)*B 相等。
  • Excel求解多元一次、一元二次方程組就是這麼簡單!
    Excel除了日常的數據統計之外,還可以用來求解一元二次、多元一次方程組的解,手動輸入幾個數字,即可驗算結果是否正確,強烈推薦給輔導孩子數學而頭痛的父母們,哈哈!如下圖所示,首先將一元二次方程的系列a、b、c分別輸入到B、C、D列中去,如方程式5x2-4x-1=0,將5輸入到B3單元格,-4輸入到C3單元格,-1輸入到D3單元格;接著在E、F列計算兩個根x1和x2:E3單元格計算第一個根 【x1=(+√(^24))/2a】,輸入公式:=(-C3+SQRT(C3^2-4*B3*D3))/(2*B3);
  • 小學奧數中的二元一次方程組問題應該怎麼求解?
    小學生不會解方程組,沒有方程組該怎麼求解二元一次方程類的應用題?本次課程我們結合一道習題為大家講解小學生的奧數習題怎麼不用方程組來求解,教你輕鬆學奧數。本課程適用於5年級以及五年級以上的學生。嗨,這裡是尖子生數理化教育,小學生的奧數習題,你做了多少了?
  • [公開課]《Python:從計算到算計》第04講: 科學計算(Scipy)
    scipy.io: 數據輸入輸出scipy.integrate: 積分scipy.interpolate: 插值scipy.linalg: 線性代數scipy.optimize: 優化scipy.cluster: 聚類scipy.constants: 物理和數學常量scipy.fftpack
  • 這道小升初數學題,會做的同學太少了,原因:要用方程組求解
    我把這道題分享到朋友圈後,網友們都說超綱了,原因是要用到兩個未知數列出方程組才能求解。這道題真的超綱了嗎?難道不用設未知數列方程組,就不能求解了嗎?請粉絲和網友們仔細思考,看看你能不能做出此題。如果你求解出來了,請寫在下面評論區分享給我們。下面是網友們的解法,我整理了一下解題過程,我們一起來研究一下吧。
  • 一元線性回歸的求解
    w_calculator(x, y):   n = len(x)   w1 = (n*sum(x*y) - sum(x)*sum(y))/(n*sum(x*x) - sum(x)*sum(x))   w0 = (sum(x*x)*sum(y) - sum(x)*sum(x*y))/(n*sum(x*x)-sum(x)*sum(x))   return w0, w12
  • 在R裡面對三元一次方程求解
    我搜索了一下,是如下3個步驟:①利用代入法或加減法,消去一個未知數,得出一個二元一次方程組;③將這兩個未知數的值代入原方程中較簡單的一個方程,求出第三個未知數的值,把這三個數寫在一起的就是所求的三元一次方程組的解。那麼,如果是要在R裡面操作呢,這個時候矩陣的思想就可以幫上忙了。
  • 高等代數|3.2線性方程組解的反問題研究
    摘要:本節我們主要介紹線性方程組的反問題,我們通常在解決線性方程組的問題時,一般都是根據係數矩陣或者增廣矩陣求解或者討論參數進行求解,但是如果告訴你解向量,那該如何去確定通解呢?帶著這個問題,我們來探究下這個問題.
  • 三元一次方程組的解法-3
    一、學習內容1、三元一次方程組的概念2、三元一次方程組的解法3、實際應用那麼怎麼去求解三元一次方程組呢?在求解二元一次方程組時,可以利用代入法或可以利用代入法或加減法消去一個末知末數,化成一元一次方程求解,那麼三元一次方程組呢?我們依然利用消元法,將三元一次方程組轉化為二元一次方程組,再利用消元法將二元一次方程組轉化為一元一次方程解。
  • 量子計算機可解方程組
    量子計算機,可解線性方程組?這已不是神話。中科大6月8日發布消息,該校科學家日前在國際上首次成功實現用量子計算機求解線性方程組的實驗。  何為線性方程組?數學家認為,各個方程關於未知量均為一次的方程組,如2元1次方程組,即為線性方程組。對線性方程組的研究,中國比歐洲至少早1500年。如今,線性方程組已廣泛應用於數值計算、信號處理、經濟學、計算機科學等科學、工程領域。與日常生活緊密相關的氣象預報,就需要建立並求解百萬變量的線性方程組,來實現對溫度、氣壓、溼度等參數的模擬和預測。
  • 加拿大初中數學競賽題:解三元二次方程組,滿分率不到2%
    大家好,今天和大家分享一道加拿大初中數學競賽題,是一道解三元二次方程組的題目。這道題目的難度還是比較大的,不少同學都能夠得到一些分數,但是能夠得到滿分的考生卻不到2%。下面我們一起來看一下這道題目。
  • 三元一次方程組的基礎解法
    我們在解二元一次方程組的時候,利用代入消元法或者加減消元法,將二元一次方程組轉化成一元一次方程,即2→1的過程,然後求解;而在解三元一次方程組時,首先要將其轉化成二元一次方程組,然後再按照二元一次方程組的解法進行求解