㈠ (矩陣演算法5)矩陣的Gram_Schmidt 正交化與基於其的一種QR分解
矩陣的Gram_Schmidt 正交化是將一組基轉換為一組標准正交基的過程。在二維平面上,已知向量A和向量B,我們希望將它們轉換為一組正交向量。通過計算向量B與A的內積,我們可以找到向量B在A上的投影。然後將向量B減去其在A上的投影,得到的新向量C即與A正交。通過遞歸的方式,我們能夠將一組基轉換為一組正交基。
將一組基轉換為正交基的方法如下:首先,我們選擇一個基向量作為新的正交基向量。然後,我們對下一個基向量進行處理,計算它在當前正交基向量上的投影,並從原向量中減去這部分投影,以確保新向量與當前正交基向量正交。重復此過程直到處理完所有基向量。
以下是一個程序實現:vecmtr為向量類,vecteam為向量組類。在完成正交化後,我們還需要進行單位化,即將每個向量除以其長度,得到單位向量。
在歐氏空間中,向量的長度定義為向量的模。單位向量的長度為1,因此只需將向量除以其長度即可得到單位向量。
基於矩陣Gram_Schmidt 正交化,我們可以實現QR分解,即將矩陣分解為正交矩陣Q與三角矩陣R的乘積。首先,我們將矩陣的列向量進行正交化處理,得到單位正交矩陣Q。然後,通過計算Q與原矩陣的乘積,我們得到上三角矩陣R。通過這種方式,我們成功地將原矩陣分解為了正交矩陣與三角矩陣的乘積。
以下是代碼實現:將原矩陣分塊成列向量,並將正交化過程以矩陣的形式表示。單位化後,我們得到的矩陣與原矩陣相乘即得到上三角矩陣。通過這種方式,我們實現了矩陣的QR分解。
接下來,我將嘗試理解QR分解迭代法得到矩陣相似對角矩陣的原理,同時介紹另一種QR分解方法—採用Householder矩陣進行的QR分解。
㈡ matlab有多少api函數
matlab有多少api函數,因為數量很多,而且不同版本的函數數量也或許不一樣,因為會把常用的需求去添加成新的api函數,不完全統計,matlab的api函數不少於420個。
例如,下面列舉其中的一部分較為常用的api函數。
1.
sym函數--定義符號矩陣
2.
syms函數--定義矩陣的又一函數
3.
sym的另一職能--把數值矩陣轉化成相應的符號矩陣
4.
cat函數--創建多維數組
5.
zeros函數--零矩陣的生成
6.
eye函數--單位矩陣的生成
7.
ones函數--生成全1陣
8.
rand函數--生成均勻分布隨機矩陣
9.
randn函數--生成正態分布隨機矩陣
10.
randperm函數--產生隨機序列
11.
linspace函數--線性等分向量的生成
12.
logspace函數--產生對數等分向量
13.
blkdiag函數--產生以輸入元素為對角線元素的矩陣
14.
compan函數--生成友矩陣
15.
hankel函數--生成Hankel方陣
16.
hilb函數--生成Hilbert(希爾伯特)矩陣
17.
invhilb函數--逆Hilbert矩陣生成
18.
pascal函數--生成Pascal矩陣
19.
toeplitz函數--生成托普利茲矩陣
20.
wilkinson函數--生成Wilkinson特徵值測試陣
21.
dot函數--向量的點積
22.
cross函數--向量叉乘
23.
conv函數--矩陣的卷積和多項式乘法
24.
deconv函數--反褶積(解卷)和多項式除法運算
25.
kron函數--張量積
26.
intersect函數--求兩個集合的交集
27.
ismember函數--檢測集合中的元素
28.
setdiff函數--求兩集合的差
29.
setxor函數--求兩個集合交集的非(異或)
30.
union函數--求兩集合的並集
31.
unique函數--取集合的單值元素
32.
expm函數--方陣指數函數
33.
logm函數--求矩陣的對數
34.
funm函數--方陣的函數運算
35.
sqrtm函數--矩陣的方根
36.
polyvalm函數--求矩陣的多項式
37.
det函數--求方陣的行列式
38.
inv函數--求矩陣的逆
39.
pinv函數--求矩陣的偽逆矩陣
40.
trace函數--矩陣的跡
41.
norm函數--求矩陣和向量的范數
42.
cond函數--求矩陣的條件數
43.
condest函數--1-范數的條件數估計
44.
rcond函數--矩陣可逆的條件數估值
45.
condeig函數--特徵值的條件數
46.
rank函數--矩陣的秩
47.
diag函數--矩陣對角線元素的抽取
48.
tril函數--下三角陣的抽取
49.
triu函數--上三角陣的抽取
50.
reshape函數--矩陣變維
51.
rot90函數--矩陣旋轉語法說明
52.
fliplr函數--矩陣的左右翻轉
53.
flipud函數--矩陣的上下翻轉
54.
flipdim函數--按指定維數翻轉矩陣
55.
repmat函數--復制和平鋪矩陣
56.
rat函數--用有理數形式表示矩陣
57.
rem函數--矩陣元素的余數
58.
sym函數--數值矩陣轉化為符號矩陣
59.
factor函數--符號矩陣的因式分解
60.
expand函數--符號矩陣的展開
61.
simple或simplify函數--符號簡化
62.
numel函數--確定矩陣元素個數
63.
chol函數--Cholesky分解
64.
lu函數--LU分解
65.
qr函數--QR分解
66.
qrdelete函數--從QR分解中刪除列
67.
qinsert函數--從QR分解中添加列
68.
schur函數--Schur分解
69.
rsf2csf函數--實Schur向復Schur轉化
70.
eig函數--特徵值分解
71.
svd函數--奇異值分解
72.
gsvd函數--廣義奇異值分解
73.
qz函數--特徵值問題的QZ分解
74.
hess函數--海森伯格形式的分解
75.
null函數--求線性齊次方程組的通解
76.
symmlq函數--線性方程組的LQ解法
77.
bicg函數--雙共軛梯度法解方程組
78.
bicgstab函數--穩定雙共軛梯度方法解方程組
79.
cgs函數--復共軛梯度平方法解方程組
80.
lsqr函數--共軛梯度的LSQR方法
81.
qmres函數--廣義最小殘差法
82.
minres函數--最小殘差法解方程組
83.
pcg函數--預處理共軛梯度方法
84.
qmr函數--准最小殘差法解方程組
85.
cdf2rdf函數--復對角矩陣轉化為實對角矩陣
86.
orth函數--將矩陣正交規范化
87.
sparse函數--創建稀疏矩陣
88.
full函數--將稀疏矩陣轉化為滿矩陣
89.
find函數--稀疏矩陣非零元素的索引
90.
spconvert函數--外部數據轉化為稀疏矩陣
91.
spdiags函數--生成帶狀(對角)稀疏矩陣
92.
speye函數--單位稀疏矩陣
93.
sprand函數--稀疏均勻分布隨機矩陣
94.
sprandn函數--生成稀疏正態分布隨機矩陣
95.
sprandsym函數--稀疏對稱隨機矩陣
96.
nnz函數--返回稀疏矩陣非零元素的個數
97.
nonzeros函數--找到稀疏矩陣的非零元素
98.
nzmax函數--稀疏矩陣非零元素的內存分配
99.
spfun函數--稀疏矩陣的非零元素應用
100.
spy函數--畫稀疏矩陣非零元素的分布圖形
101.
colmmd函數--稀疏矩陣的排序
102.
colperm函數--非零元素的列變換
103.
dmperm函數--Dulmage-Mendelsohn分解
104.
randperm函數--整數的隨機排列
105.
condest函數--稀疏矩陣的1-范數
106.
normest函數--稀疏矩陣的2-范數估計值
107.
luinc函數--稀疏矩陣的分解
108.
eigs函數--稀疏矩陣的特徵值分解
109.
sin和sinh函數--正弦函數與雙曲正弦函數
110.
asin、asinh函數--反正弦函數與反雙曲正弦函數
111.
cos、cosh函數--餘弦函數與雙曲餘弦函數
112.
acos、acosh函數--反餘弦函數與反雙曲餘弦函數
113.
tan和tanh函數--正切函數與雙曲正切函數
114.
atan、atanh函數--反正切函數與反雙曲正切函數
115.
cot、coth函數--餘切函數與雙曲餘切函數
116.
acot、acoth函數--反餘切函數與反雙曲餘切函數
117.
sec、sech函數--正割函數與雙曲正割函數
118.
asec、asech函數--反正割函數與反雙曲正割函數
119.
csc、csch函數--餘割函數與雙曲餘割函數
120.
acsc、acsch函數--反餘割函數與反雙曲餘割函數
121.
atan2函數--四象限的反正切函數
122.
abs函數--數值的絕對值與復數的幅值
123.
exp函數--求以e為底的指數函數
124.
expm函數--求矩陣以e為底的指數函數
125.
log函數--求自然對數
126.
log10函數--求常用對數
127.
sort函數--排序函數
128.
fix函數--向零方向取整
129.
roud函數--朝最近的方向取整
130.
floor函數--朝負無窮大方向取整
131.
rem函數--求余數
132.
ceil函數--朝正無窮大方向取整
133.
real函數--復數的實數部分
134.
imag函數--復數的虛數部分
135.
angle函數--求復數的相角
136.
conj函數--復數的共軛值
137.
complex函數--創建復數
138.
mod函數--求模數
139.
nchoosek函數--二項式系數或所有的組合數
140.
rand函數--生成均勻分布矩陣
141.
randn函數--生成服從正態分布矩陣
142.
interp1函數--一維數據插值函數
143.
interp2函數--二維數據內插值
144.
interp3函數--三維數據插值
145.
interpn函數--n維數據插值
146.
spline函數--三次樣條插值
147.
interpft函數--用快速Fourier演算法作一維插值
148.
spline函數--三次樣條數據插值
149.
table1函數--一維查表函數
150.
table2函數--二維查表
151.
max函數--最大值函數
152.
min函數--求最小值函數
153.
mean函數--平均值計算
154.
median函數--中位數計算
155.
sum函數--求和
156.
prod函數--連乘計算
157.
cumsum函數--累積總和值
158.
cumprod函數--累積連乘
159.
quad函數--一元函數的數值積分
160.
quad8函數--牛頓?康茲法求積分
161.
trapz函數--用梯形法進行數值積分
162.
rat、rats函數--有理數近似求取
163.
dblquad函數--矩形區域二元函數重積分的計算
164.
quad2dggen函數--任意區域上二元函數的數值積分
165.
diff函數--微分函數
166.
int函數--積分函數
167.
roots函數--求多項式的根
168.
poly函數--通過根求原多項式
169.
real函數--還原多項式
170.
dsolve函數--求解常微分方程式
171.
fzero函數--求一元函數的零點
172.
size函數--符號矩陣的維數
173.
compose函數--復合函數運算
174.
colspace函數--返回列空間的基
175.
real函數--求符號復數的實數部分
176.
image函數--求符號復數的虛數部分
177.
symsum函數--符號表達式求和
178.
collect函數--合並同類項
179.
expand函數--符號表達式展開
180.
factor函數--符號因式分解
181.
simplify函數--符號表達式的化簡
182.
numden函數--符號表達式的分子與分母
183.
double函數--將符號矩陣轉化為浮點型數值
184.
solve函數--代數方程的符號解析解
185.
simple函數--求符號表達式的最簡形式
186.
finverse函數--函數的反函數
187.
poly函數--求特徵多項式
188.
poly2sym函數--將多項式系數向量轉化為帶符號變數的多項式
189.
findsym函數--從一符號表達式中或矩陣中找出符號變數
190.
horner函數--嵌套形式的多項式的表達式
191.
limit函數--求極限
192.
diff函數--符號函數導數求解
193.
int函數--符號函數的積分
194.
dsolve函數--常微分方程的符號解
195.
ezplot函數--畫符號函數的圖形
196.
ezplot3函數--三維曲線圖
197.
ezcontour函數--畫符號函數的等高線圖
198.
ezcontourf函數--用不同顏色填充的等高線圖
199.
ezpolar函數--畫極坐標圖形
200.
ezmesh函數--符號函數的三維網格圖
201.
ezmeshc函數--同時畫曲面網格圖與等高線圖
202.
ezsurf函數--三維帶顏色的曲面圖
203.
ezsurfc函數--同時畫出曲面圖與等高線圖
204.
fourier函數--Fourier積分變換
205.
ifourier函數--逆Fourier積分變換
206.
laplace函數--Laplace變換
207.
ilaplace函數--逆Laplace變換
208.
ztrans函數--求z-變換
209.
iztrans函數--逆z-變換
210.
vpa函數--可變精度演算法計算
211.
subs函數--在一符號表達式或矩陣中進行符號替換
212.
taylor函數--符號函數的Taylor級數展開式
213.
jacobian函數--求Jacobian矩陣
214.
jordan函數--Jordan標准形
215.
rsums函數--互動式計算Riemann
216.
latex函數--符號表達式的LaTex的表示式
217.
syms函數--創建多個符號對象的快捷函數
218.
maple函數--調用Maple內核
219.
mfun函數--Maple數學函數的數值計算
220.
mhelp函數--Maple函數幫助
221.
sym2poly函數--將符號多項式轉化為數值多項式
222.
ccode函數--符號表達式的C語言代碼
223.
fortran函數--符號表達式的Fortran語言代碼
224.
binornd函數--二項分布的隨機數據的產生
225.
normrnd函數--正態分布的隨機數據的產生
226.
random函數--通用函數求各分布的隨機數據
227.
pdf函數--通用函數計算概率密度函數值
228.
binopdf函數--二項分布的密度函數
229.
chi2pdf函數--求卡方分布的概率密度函數
230.
ncx2pdf函數--求非中心卡方分布的密度函數
231.
lognpdf函數--對數正態分布
232.
fpdf函數--F分布
233.
ncfpdf函數--求非中心F分布函數
234.
tpdf函數--求T分布
235.
gampdf函數--求Γ分布函數
236.
nbinpdf函數--求負二項分布
237.
exppdf函數--指數分布函數
238.
raylpdf函數--瑞利分布
239.
weibpdf函數--求韋伯分布
240.
normpdf函數--正態分布的概率值
241.
poisspdf函數--泊松分布的概率值
242.
cdf函數--通用函數計算累積概率
243.
binocdf函數--二項分布的累積概率值
244.
normcdf函數--正態分布的累積概率值
245.
icdf函數--計算逆累積分布函數
246.
norminv函數--正態分布逆累積分布函數
247.
sort函數--排序
248.
sortrows函數--按行方式排序
249.
mean函數--計算樣本均值
250.
var函數--求樣本方差
251.
std函數--求標准差
252.
nanstd函數--忽略NaN計算的標准差
253.
geomean函數--計算幾何平均數
254.
mean函數--求算術平均值
255.
nanmean函數--忽略NaN元素計算算術平均值
256.
median函數--計算中位數
257.
nanmedian函數--忽略NaN計算中位數
㈢ 急求matlab復數矩陣QR分解代碼我知道matlab本身有qr函數 但是我想知道利用householder變換遞歸實現的原理。
實Householder變換和復Householder變換沒有本質區別,只不過是把H=I-2ww^T改成H=I-2ww^H
至於遞歸實現,只要對第一列進行消去後再遞歸就行了
㈣ R語言定義多維數組
R語言定義多維數組
數組有一個特徵屬性叫做維數向量(dim屬性),維數向量是一個元素取正整數值的向量 ,其長度是數組的維數,比如維數向量有兩個元素時數組為二維數組(矩陣)。維數向量的 每一個元素指定了該下標的上界,下標的下界總為1。
一組值只有定義了維數向量(dim屬性)後才能被看作是數組。比如:
z <- 1:1500
dim(z) <- c(3, 5, 100)
這時z已經成為了一個維數向量為c(3,5,100)的三維數組。也可以把向量定義為一維數組 ,例如:
dim(z) <- 1500
數組元素的排列次序預設情況下是採用FORTRAN的數組元素次序(按列次序),即第一下 標變化最快,最後下標變化最慢,對於矩陣(二維數組)則是按列存放。例如,假設數組a的 元素為1:24,維數向量為c(2,3,4),則各元素次序為a[1,1,1], a[2,1,1], a[1,2,1], a[2,2,1], a[1,3,1], …, a[2,3,4]。
用函數array()或matrix()可以更直觀地定義數組。array()函數的完全使用為array(x, dim=length(x), dimnames=NULL),其中x是第一自變數,應該是一個向量,表示數組的元素 值組成的向量。dim參數可省,省略時作為一維數組(但不同於向量)。dimnames屬性可以省 略,不省略時是一個長度與維數相同的列表(list,見後面),列表的每個成員為一維的名 字。例如上面的z可以這樣定義:
z <- array(1:1500, dim=c(3,5,100))
函數matrix()用來定義最常用的一種數組:二維數組,即矩陣。其完全格式為 matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
矩陣運算
矩陣是二維數組,但因為其應用廣泛所以對它定義了一些特殊的運算和操作。
函數t(A)返回矩陣A的轉置。nrow(A)為矩陣A的行數,ncol(A)為矩陣A的列數。
矩陣之間進行普通的加減乘除四則運算仍遵從一般的數組四則運算規則,即數組的對應元 素之間進行運算,所以注意A*B不是矩陣乘法而是矩陣對應元素相乘。
要進行矩陣乘法,使用運算符%%,A%%B表示矩陣A乘以矩陣B(當然要求A的列數等於B的 行數)。例如:
A <- matrix(1:12, nrow=4, ncol=3, byrow=T)
B <- matrix(c(1,0), nrow=3, ncol=2, byrow=T)
A
[,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [4,] 10 11 12
B [,1] [,2] [1,] 1 0 [2,] 1 0 [3,] 1 0
A %*% B
[,1] [,2] [1,] 6 0 [2,] 15 0 [3,] 24 0 [4,] 33 0
另外,向量用在矩陣乘法中可以作為行向量看待也可以作為列向量看待,這要看哪一種觀 點能夠進行矩陣乘法運算。例如,設x是一個長度為n的向量,A是一個 R語言定義多維數組和數組的運算矩陣,則「x %% A %% x」表示二次型 R語言定義多維數組和數組的運算。但是,有時向量在矩陣乘法中的地位並不 清楚,比如「x %% x」就既可能表示內積 R語言定義多維數組和數組的運算也可能表示 R語言定義多維數組和數組的運算陣 R語言定義多維數組和數組的運算。因為前者較常用,所以S選擇表示前者, 但內積最好還是用crossprod(x)來計算。要表示 R語言定義多維數組和數組的運算,可以用「cbind(x) %% x」或「x %*% rbind(x) 」。
函數crossprod(X, Y)表示一般的交叉乘積(內積) R語言定義多維數組和數組的運算,即X的每一列與Y的每一列的內積組成的矩 陣。如果X和Y都是向量則是一般的內積。只寫一個參數X的crossprod(X)計算X自身的內積 R語言定義多維數組和數組的運算。
其它矩陣運算還有solve(A,b)解線性方程組 R語言定義多維數組和數組的運算,solve(A)求方陣A的逆矩陣,svd()計算奇 異值分解,qr()計算QR分解,eigen()計算特徵向量和特徵值