逆矩阵的定义:假设A是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵B,他能够使得AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。
如果矩阵A和B互逆,则AB=BA=I。由条件AB=BA以及矩阵乘法的定义可知,矩阵A和B都是方阵。再由条件AB=I以及定理“两个矩阵的乘积的行列式等于这两个矩阵的行列式的乘积”可知,这两个矩阵的行列式都不为0。
扩展资料:
对矩阵A施以初等行变换(初等列变换)就相当于在A的左边(右边)乘以相应的初等矩阵,所以可以同时对A和B施以相同的初等行变换(初等列变换)。这样,当矩阵A被变为时,就被变为A的逆矩阵。
广义逆阵(Generalized inverse)又称伪逆,一种对逆阵的推广。一般所说的伪逆是指摩尔-彭若斯广义逆,它是由E H Moore和Roger Penrose分别独立提出的。伪逆在求解线性最小二乘问题中有重要应用。
参考资料来源:百度百科——逆矩阵
public static double[,] Inverse(double[,] Array){int m = 0;int n = 0;
m = ArrayGetLength(0); //获取矩阵的行数
n = ArrayGetLength(1); //获取矩阵的列数
//有正常的逆矩阵必须断言m=n,下面都假设m和n是一样的
//为什么要去2m+1行和列?
//其实应该是m行2n列就好了啊,为什么呢,看下面。
double[,] array=new double[2m+1,2n+1]; //疑为[m,2n]
/
行变换求逆矩阵首先要做的就是把A和I并列放在一起[A|I]
也就是这个形式:
a00,a01,a02,,ann,1,0,0,0,,0
a10,a11,a12,,a1n,0,1,0,0,,0
a20,a21,a22,,a2n,0,0,1,0,,0
an0,an1,an2,,ann,0,0,0,0,,1
下面三个for做的就是这件事
/
//初始化全0
for (int k = 0; k < 2 m + 1; k++){ //疑为k<m
for (int t = 0; t < 2 n + 1; t++){ //疑为t<2n
array[k, t] = 000000000;
}
}
//初始化左面的A
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
array[i, j] = Array[i, j];
}
}
//初始化右面的I
for (int k = 0; k < m; k++){
for (int t = n; t <= 2 n; t++){
if ((t - k) == m){
array[k, t] = 10;
}else{
array[k, t] = 0;
}
}
}
//得到逆矩阵
//这样把A经过行变化变成I,那么右面的I就会变为A逆
for (int k = 0; k < m; k++){
//把对角元素变为1
if (array[k, k] != 1){
double bs = array[k, k];
array[k, k] = 1;
for (int p = k + 1; p < 2 n; p++){
array[k, p] /= bs;
}
}
//全部其他行减第k行,使第k列只有[k,k]元素是1,其余是0。
for (int q = 0; q < m; q++){
if (q != k){
double bs = array[q, k];
for (int p = 0; p < 2 n; p++){
array[q, p] -= bs array[k, p];
}
}else{
continue;
}
}
}
//通过上面的变化
/
[A|I]变为[I|A逆]
所以右面的那一半就是A逆
下面就是把它拿粗来
/
double[,] NI = new double[m, n];
for (int x = 0; x < m; x++){
for (int y = n; y < 2 n; y++){
NI[x, y - n] = array[x, y];
}
}
return NI;
}压力角的渐开线函数,记作inv
渐开线函数的公式为:invα=tgα-α
等号右边第一项的 α是角度值, 而第二项, α是弧度值
也可以按照下面公式,其实一样:
invα=tgα- απ/180
可得25度的渐开线函数等于:0029975345
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)