pascal(3,2)是怎么求的?求详细过程。pascal(n,1)和pascal(n,2)分别是
1、pascal这个函数最常用的调用方式是pascal(n),即求n阶Pascal矩阵。Pascal矩阵是从Pascal三角(国内称为杨辉三角或贾宪三角)提取出来的矩阵,其重要性质包括:对称;正定;而且其逆矩阵的元素也都是整数。
2、pascal(n,1) 是n阶Pascal矩阵的下三角 Cholesky分解(但部分列的符号与 chol(P,'lower') 得到的结果有差别)。
所谓的 Cholesky分解,是指把矩阵分解为一个下三角矩阵以及它的共轭转置矩阵的乘积(那标量来类比的话,此分解就好像求平方根,所以分解方法又称平方根法)。与一般的矩阵分解求解方程的方法比较,Cholesky分解效率很高,大约是LU分解两倍。可以看作是当A满足特定条件时,LU三角分解法的一种特殊变形(但算法是完全不同的)。
Cholesky是生于19世纪末的法国数学家,曾就读于巴黎综合理工学院。Cholesky分解是他在学术界最重要的贡献。后来,Cholesky参加了法国军队,不久在一战初始阵亡。
以下代码演示了一些相关性质:
>> L=pascal(5,1);
>> L*L'
ans =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>> P=pascal(5)
P =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>> L*L
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> L
L =
1 0 0 0 0
1 -1 0 0 0
1 -2 1 0 0
1 -3 3 -1 0
1 -4 6 -4 1
>> chol(P,'lower')
ans =
1 0 0 0 0
1 1 0 0 0
1 2 1 0 0
1 3 3 1 0
1 4 6 4 1
3、pascal(n,2) 是对 pascal(n,1) 进行转置然后进行列的重排(左右翻转)得到的。该矩阵相当于单位阵的立方根:
>> L2=pascal(5,2);
>> L2^3
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
4、从上面的介绍,很容易形成一种印象,即先有Pascal矩阵,然后通过Cholesky分解得到 pascal(n,1)。但实际的算法并非如此。MATLAB中的实际算法是,先计算出 L = pascal(n,1),然后再通过 P = L*L' 得到Pascal矩阵。大致的算法如下:
n = 6;
L = diag((-1).^(0:n-1));
L(:,1) = 1;
for j=2:n-1
for i=j+1:n
L(i,j) = L(i-1,j) - L(i-1,j-1);
end
end
P = L*L'
那么 pascal(n,2) 又是怎样求出来的呢?有了上面的 L = pascal(n,1),后面的计算很简单,加上两句:
P2 = rot90(L,3);
if n/2 == round(n/2), P2 = -P2; end
就得到 pascal(n,2) 了。