對比一下numpy與matlab求解的特徵值與特徵向量
特徵值 λ1=λ2=1 λ3=2
特徵值 λ1=-1 λ2=λ3=2
如何求解特徵向量
1.這裡列舉第乙個中λ=1時對應的特徵向量。
(a-λ*e)*x = 0
得(a-e)*x = 0
對a-e進行 行變換 得
[[-2,1,0],[1,0,1],[0,0,0]]
-2*x1+x2 = 0
x1+x3=0
有3-2=1個自由變數,令x1為自由變數
x = [x1 x2 x3]t = [x1 2*x1 -x1]t = x1*[1 2 -1]t
2.這裡列舉第二個中λ=2時對應的特徵向量。
(a-2e)*x = 0
[[-4,1,1],[0,0,0],[0,0,0]]
-4*x1+x2+x3 = 0
有3-1=2個自由變數,令x2 x3為自由變數
x = [x1 x2 x3]t = [(x2+x3)/4,x2,x3]t = x2*[1/4 1 0]t + x3*[1/4 0 1]t
或者是 令x1 x3為自由變數
x = [x1 x2 x3]t = [x1,4x1-x3,x3]t = x1*[1 4 0]t + x3*[0 -1 1]t
import numpy as np
a1 = np.array([[-1,1,0],[-4,3,0],[1,0,2]])
eig_val1,eig_vec1 = np.linalg.eig(a1)
print(eig_val1,'\n',eig_vec1)
a2 = np.array([[-2,1,1],[0,2,0],[-4,1,3]])
eig_val2,eig_vec2 = np.linalg.eig(a2)
print(eig_val2,'\n',eig_vec2)
輸出:
[2. 1. 1.]
[[ 0. 0.40824829 0.40824829]
[ 0. 0.81649658 0.81649658]
[ 1. -0.40824829 -0.40824829]]
[-1. 2. 2.]
[[-0.70710678 -0.24253563 0.30151134]
[ 0. 0. 0.90453403]
[-0.70710678 -0.9701425 0.30151134]]
a1 = [-1,1,0;-4,3,0;1,0,2];
a2 = [-2,1,1;0,2,0;-4,1,3];
[eig_val1, eig_vec1] = eig(a1);
[eig_val2, eig_vec2] = eig(a2);
輸出:
0 0.4082 0.4082
0 0.8165 0.8165
1.0000 -0.4082 -0.4082
2 0 0
0 1 0
0 0 1
-0.7071 -0.2425 0.3015
0 0 0.9045
-0.7071 -0.9701 0.3015
-1 0 0
0 2 0
0 0 2
對比兩者計算結果一樣,只不過matlab的特徵值是用乙個對角矩陣表示
另外我說一下numpy的精確性,我使用matlab與numpy計算了關於實矩陣的複數特徵值問題,計算結果特徵值是一樣的,但是特徵向量大小不一樣,兩者呈乙個比例,其實也是一樣的,特徵向量又沒規定必須是多少。所以我想說的就是,不用懷疑numpy精度比matlab低。
我給matlab**轉化為python**,發現計算出來的結果兩者不一樣,我本來準備去github上給numpy發issue的,但是仔細又看了一遍自己的**,發現原來是自己有個地方轉化錯了,而不是人家numpy精度低。
MATLAB與數學實驗 MATLAB 求解方程
一.常用函式 matlab裡solve fzero fsolve root等函式用於求解方程 組 1.solve函式 主要用於求解代數方程和非線性方程 x1,solve f var f表示方程,var表示求解變數。x1表示求解結果。求解單個方程 syms x a b c ff a x 2 b x c...
python中numpy與matlab的對應關係
通用函式等價表 matlab numpy說明 help func info func or help func orfunc?在ipython環境下 檢視關於func的幫助文件 type func source func orfunc?在ipython環境下 當func不是內建函式時,查詢它的 a ...
Matlab 數值微積分與方程求解
專題六 數值微積分與方程求解 目錄 一 數值微分與數值積分 1.數值微分 2.數值積分 二 線性方程組求解 先說差分。差分可以分為向前差分,向後差分和中心差分。三者分別如下表述 matlab提供了求向前差分的函式diff,其呼叫格式有3種 舉個例子 求向量 1,34,54,32,56,78 的一階向...