【SymPy】(七)方程求解(八)矩陣

2021-02-20 二進位人工智慧

【SymPy】(一)SymPy簡介

【SymPy】(二)使用SymPy需要避開的坑

【SymPy】(三)基本操作(四)列印

【SymPy】(五)簡化

【SymPy】(六)微積分

(七)方程求解

(八)矩陣

1 基本操作

2 基本方法

3 矩陣構造函數

4 先進的方法


(七)方程求解
from sympy import *
x, y, z = symbols('x y z')

1 等式

從前面的文章我們知道,SymPy中的符號方程不是用=或==表示的,而是用Eq表示的。

然而,還有一個更簡單的方法:我們知道a=b相當於a−b=0。在SymPy中,任何不在Eq中的表達式都被SynPy的求解函數(如solveset())假定等於0。這意味著我們可以不使用x==y,而使用x-y(被求解函數認為是x-y==0)。

如果要求解的方程已經等於0,則這一點特別有用。我們在編程時不用鍵入Eq:solveset(Eq(expr,0),x),只需使用solveset(expr,x)即可求解方程。例如:

2 求解代數方程

求解代數方程的主要函數是solveset。其語法為:solveset(equation, variable=None, domain=S.Complexes)

式中,等式可以是Eq實例或表達式的形式(假定為零)。

還有一個函數叫做solve,也可以用來解方程。它的語法為solve(equations, variables),後面會介紹它的用途。

當求解一個等式時,solveset的輸出有:有限集,域,映射集

如果無解,則返回一個空集,如果無法找到解決方案,則返回一個條件集合。

在solveset模塊中,使用linsolve求解線性方程組。下面是linsolve的語法示例:

註:解的順序對應於給定符號的順序。

在solveset模塊中,使用nonlinsolve求解非線性方程組。

下面是nonlinsolve的示例。

註:(1)解的順序對應於給定符號的順序。

(2)nonlinsolve不會返回LambertW形式的解(如果存在LambertW形式解的話)。solve則可用於這種情況:

(3)nonlinsolve不能很好地求解具有三角函數的方程組。solve也可用於此類情況(但不能給出所有解決方案)

solveset只給出每個解。要得到包含多重性的多項式的解,使用roots。

roots的輸出{0: 1, 3: 2}意思是:0是重數為1的根,3是重數為2的根。

solveset 無法求解由LambertW(超越方程求解器)求解的方程。而solve可以:

3 求解微分方程

要求解微分方程,可使用dsolve。首先,通過將cls=function傳遞給symbols函數來創建未定義的函數。

f, g = symbols('f g', cls=Function)

f和g現在是未定義的函數。我們可以調用f(x),它表示一個未知函數。

f(x)的未估值導數:

要求解常微分方程,請將其和要求解的函數傳遞給dsolve。

如求解微分方程:

dsolve返回Eq的一個實例。這是因為一般情況下,微分方程的解不能為函數顯式求解。

dsolve解中的任意常數是C1、C2、C3等形式的符號。

(八)矩陣
from sympy import *

要在SymPy中生成矩陣,使用Matrix對象。通過提供構成矩陣的行向量的列表來構造矩陣。

例如,構造矩陣:

為了便於生成列向量,單獨一個元素列表被認為是列向量

矩陣的操作與SymPy或Python中的任何其他對象一樣。

關於SymPy矩陣需要注意的一點是,與SymPy中的其他對象不同,它們是可變的。這意味著可以對它們進行適當的修改。如果需要Matrix的不可變,請使用ImmutableMatrix。

1 基本操作1.1 獲取矩陣形狀

要得到矩陣的形狀,請使用shape:

1.2 訪問行和列

若要獲取矩陣的單個行或列,請使用row或col。例如,M.row(0)將獲取第一行。M.col(-1)將獲取最後一列。

1.3 刪除和插入行和列

要刪除行或列,請使用row_del或r col_del。這些操作將修改矩陣。

要插入行或列,請使用 row_insert或col_insert。

2 基本方法

簡單的加法和乘法操作僅通過使用+、*和**來完成。要求矩陣的逆,則計算-1次方。

求Matrix的轉置,用T:

3 矩陣構造函數

要創建單位矩陣,請使用eye。eye(n)將創建一個n×n單位矩陣。

zeros(n, m)創造一個 n × m 的零矩陣

相似地,ones創建全1矩陣

要創建對角矩陣,請使用diag。diag的參數可以是數字或矩陣。其中數字被解釋為1×1矩陣。輸入的矩陣按對角線排列。其餘元素用0填充。

4 先進的方法4.1  行列式

要計算矩陣的行列式,請使用det。

4.2 簡化的階梯形式

若要將矩陣轉換為簡化的階梯形式,請使用rref

rref返回兩個元素的元組。第一個元素是簡化的行梯隊形式,第二個元素是主元的列索引。

註:rref返回的元組的第一個元素是Matrix類型。第二種是tuple類型。

4.3 零空間(Nullspace)

要找到矩陣的零空間,請使用nullspace,得到輸出張成矩陣零空間的列向量。使用ASCII Pretty Printer格式輸出:

4.4 列空間(Columnspace)

要找到矩陣的零空間,請使用columnspace,得到輸出張成矩陣列空間的列向量。

4.5 特徵值、特徵向量和對角化(Eigenvalues, Eigenvectors, and Diagonalization)

要求矩陣的特徵值,請使用eigenvals。eigenvals返回一個字典:{特徵值:代數重數}

表示M特徵值有-2、3和5,特徵值-2和3的代數重數為1,特徵值5的代數重數2。

要找到矩陣的特徵向量,請使用eigenvects。返回(特徵值:代數重數,[特徵向量])。

從結果我們也可以知道特徵值5的幾何重數為2,因為它有兩個特徵向量。因為所有特徵值的代數重數和幾何重數是相同的,所以M是可對角化的。

使用diagonalize實現對角化,返回一個元組

Tip:要創建一個名為λ的符號,可以對SymPy符號和Python變量使用相同的名稱——lamda(不帶b)。它可以被列印為λ。

如果只需要特徵多項式,請使用charpoly。這比eigenvals更有效,因為有時符號根的計算成本很高。

相關焦點

  • Scipy入門(求解方程組2)
    一.非線性方程組     在前面我們討論的大多數是關於未知數的線性方程組,本節主要討論非線性方程組,簡單的理解為不是關於未知數(不一定是x)的一次方程,比如我們熟悉的x^2-4x+3=0這種方程組但是這種方程比較簡單,我們可以利用一些公式直接解出其解,但是對於x^3-sin(x)=0這種方程,我們是沒有通用公式的解出它的解,這時我們就要採取一些其他方法來求解。
  • Matlab求解微分代數方程 (DAE)
    周末有位同學請教了一個問題,他要求解一個微分方程組,但微分方程變量之間還有個線性方程組關係,這個就是典型的微分代數方程 ,Matlab裡面有專門的求解方法
  • 在R裡面對三元一次方程求解
    三元一次方程大家應該是不陌生的,形如 aX + bY + cZ = d 的就是,其中X,Y,Z是未知的變量,a,b,c,d 都是已知的常量,通常呢,需要至少3個沒有線性關係的已知等式才能求唯一解。我搜索了一下,是如下3個步驟:①利用代入法或加減法,消去一個未知數,得出一個二元一次方程組;③將這兩個未知數的值代入原方程中較簡單的一個方程,求出第三個未知數的值,把這三個數寫在一起的就是所求的三元一次方程組的解。那麼,如果是要在R裡面操作呢,這個時候矩陣的思想就可以幫上忙了。
  • 利用python的sympy求解微積分
    python中有一個sympy科學計算庫,專門用來解決數學的運算問題。
  • python快速求解不定積分和定積分
    基本概念sympy介紹conda install sympy接下來,我們將介紹利用第三方庫sympy來完成積分的計算。python求解不定積分接下來,我們將介紹上述的不定積分的求解。2)求解的結果中省略了常數C,需要自己加上。
  • 一維有限深勢阱的轉移矩陣法求解
    大學物理課程中「波函數 薛丁格方程」的教學探討[J]. 物理與工程, 2018, 28(4): 78-82, 87.LI A J, ZHOU Z R, ZHU H F. Discussions on the teaching of 「Wave function and Schrodinger equation」 in college physics[J].
  • 波動方程 熱傳導方程 求解方法
    號那天考的全國大學生數學競賽(CMC賽)的令人振奮的消息(雖然沒有一等獎,但能得二等獎已經出乎我的預料了)以後還要繼續加油正文偏微分方程中波動方程和熱傳導方程的求解方法都是分離變量法分離變量法的思想貫穿著這兩種方程。甚至可以用分離變量法求解少部分的拉普拉斯方程。拉普拉斯方程的求解方法相比于波動方程和熱傳導方程更為複雜,需要採用更多的數學工具。這邊是一些關于波動方程以及熱傳導方程的求解例子。並不難,但是在計算積分的時候需要較為小心,爭取不要計算錯誤。
  • 對極幾何的基礎矩陣和本質矩陣2
    上一篇文章介紹了基礎矩陣F和本質矩陣E理論推導,下面主要介紹如何求解F矩陣。
  • 基於MATLAB求解三類方程組
    線性方程組的一般形式為矩陣形式為  AX=B其中,A為係數矩陣;B為常數矩陣。線性方程組解的判定方法如果係數矩陣A的秩不等於增廣矩陣[A,B]的秩,那麼方程組無解;如果係數矩陣A的秩等於增廣矩陣[A,B]的秩且等於方程變量個數n,那麼方程組有唯一解;如果係數矩陣A的秩不等於增廣矩陣[A,B]的秩且小於方程變量個數n,那麼方程組有無窮多解;採用MATLAB計算的相關基礎代碼
  • AI攻破高數核心,1秒內精確求解微分方程、不定積分
    一階常微分方程,和它的解從一個二元函數F(x,y)說起。有個方程F(x,y)=c,可對y求解得到y=f(x,c)。至於生成過程,舉個例子:現在,求積分和求解微分方程兩個訓練集都有了。那麼問題也來了,AI要怎麼理解這些複雜的式子,然後學會求解方法呢?
  • 三次方程的求解之路
    今天,這個方程的解法早已成為初中生的必備常識,然而回顧歷史,人類直到13世紀才找到完全解決它的辦法。   在一元二次方程問題被徹底解決後,一元三次方程的求解吸引了更多人的關注。儘管類似「x^3+ax+b=0(三次方程的特殊形)」這樣形式的三次方程在古希臘時代就有人研究過,但是由於缺乏必要的數學工具,當時人們對這個方程仍然知之甚少。
  • 一元二次方程求解過程推導
    一元二次方程的解法主要有配方法、公式法和因式分解法等。首先介紹配方法。將一元二次方程化為如下形式若解得以上是用配方法求解一元二次方程的過程,目的就是為了等式左邊配成一個完全平方式,如果等式右邊為非負,則方程在實數範圍內有解。
  • 求解二次方程的新方法
    從中學的數學課堂上,我們知道尋找二次方程的根方法無外乎因式分解,或者配方法,再或者跳去求解過程,直接代入求根公式中。從某種意義上說,以上說的這些方法算不上不同方法,因為求根公式本就是通過配方法而推導得來的。對求解任意二次方程的探索可追溯到4000多年前的古巴比倫時期。4000多年來,許多數學領域的知名人物都在這個現在看來十分簡單的問題上留下了自己的記錄。
  • 《應用複變函數理論求解多元高次不定方程整數解》,創新方程求解
    內容簡介本書首次倡導應用複變函數理論,來探討多元高次不定方程整數解的求解問題。其中,第一分冊推導出了幾個必要的基本公式。而第二分冊則是應用這些基本公式,從另一個角度,用另一個方法,證明了費爾瑪大定理,並進行了更複雜不定方程整數解的求解工作。
  • R語言中求解一元方程的根
    在R語言中可以使用uniroot函數求解一元方程的根。>該函數的結果是一個包含4部分的列表:求解的根root和在該點的函數值f.root;迭代次數iter和求解方程的近似估計的精度estim.prec。
  • AI攻破高數核心,1秒內求解微分方程、不定積分,性能遠超Matlab
    一階常微分方程,和它的解從一個二元函數F(x,y)說起。有個方程F(x,y)=c,可對y求解得到y=f(x,c)。至於生成過程,舉個例子:現在,求積分和求解微分方程兩個訓練集都有了。那麼問題也來了,AI要怎麼理解這些複雜的式子,然後學會求解方法呢?
  • 2019考研數學:淺析高斯消元法如何求解線性方程組
    線性方程組求解的基本方法就是高斯消元法。今天我們就給大家簡單講解如何利用高斯消元法求解線性方程組的解。首先,我們先來了解一下線性方程組和高斯消元法的相關概念。一、線性方程組二、高斯消元法1.線性方程組的初等變換我們對線性方程組可以做如下的三種變換:(1)將一個非零常數(2)將一個方程的若干倍加到另一個方程上;(3)交換兩個方程的位置。我們將線性方程組的這三種變換稱之為線性方程組的初等變換。
  • 先從求解符號微分方程講起
    本次公眾號將介紹符號微分方程的求解方法,包括求解符號微分方程的通解和特解。在MATLAB中,求解符號微分方程通解的命令格式為:y=dsolve('equation','x');其中,equation為符號微分方程,x為符號自變量。利用該命令可以非常方便的求出符號微分方程的解析通解。舉例說明:求微分方程y'=x+1的通解y=f(x)。
  • 你的第一個有限元求解器——僅十行MATLAB代碼
    有限元分析話題中有不少討論有限元求解器的問題,但大都停留在概念層面,未見實際代碼。望本文能略起拋磚引玉之作用。以下代碼是基於MATLAB編寫。考慮一平面有界區域 ,設其邊界為 。我們求解泊松方程之狄利克雷邊值問題。
  • 線性代數(行列式與矩陣)複習導學
    本講義為大家講解的行列式與矩陣的知識,有如下考點:行列式按行(列)展開定理(拉普拉斯定理),數字型行列式的計算,特殊行列式的計算;矩陣的運算,伴隨矩陣和逆矩陣,矩陣方程,分塊矩陣的運算,初等變換,矩陣的秩。