Ⅰ 高等代数中解线性方程组的方法有几种
高等代数中解线性方程组的方法:斗拆分两大类:
一、直接法:按选元分不选主元法和选主元法(列选、全选)。接不同消元方法又分颤冲:1、高斯消元法。2、高斯主元素法。3、三角解法。4、追赶法。
二、迭代法:1、雅可比迭代法。2、高斯—塞德尔迭代法。3、超松驰茄销歼迭代法。
Ⅱ 如何求解线性方程组
在数学中,线性方程是包含两个变量并且可以在图形上绘制为直线的方程。线性方程组是一组两个或多个线性方程,它们都包含相同的变量集。线性方程组可用于模拟现实世界的问题。可以使用多种不同的方法来解决它们:
绘图
替代
加法消除
减法消除
01
04 的
绘图
白种人老师在黑板上写字
埃里克·拉普托什摄影/混合图像/盖蒂图片社
绘图是滚亩求解线性方程组的最简单方法之一。您所要做的就是将每个方程绘制成一条线,然后找到这些线相交的点。
例如,考虑以下包含变量x和y的线性方程组:
y = x + 3
y = -1 x - 3
这些方程已经以 斜率截距形式编写,因此易于绘制。如果方程不是以斜率截距形式编写的,则需要先简化它们。一旦完成,求解x和y只需要几个简单的步骤:
1. 绘制两个方程。
2. 找到方程相交的点。在这种情况下,答案是 (-3, 0)。
3. 通过将值x = -3 和y = 0 代入原始方程 来验证您的汪闷答案是否正确。
y = x + 3
(0) = (-3) + 3
0 = 0
y = -1 x - 3
0 = -1(-3) - 3
0 = 3 - 3
0 = 0
02
04 的
替代
求解方程组的另一种方法是代换。使用这种方法,您实际上是在简化一个方程并将其合并到另一个方程中,这样您就可以消除其中一个未知变量。
考虑以下线性方程组:
3 x + y = 6
x = 18 -3 y
在第二个等式中,x已经是孤立的。如果不是这种情况,我们首先需要简化方程以隔离x。在第二个等式中分离出x后,我们可以将第一个等式中的x替换为来自第二个等式的等效值: (18 - 3y)。
1. 将第一个等式中的x替换为第二个等式中给定的x值。
3 ( 18 – 3y ) + y = 6
2. 简化等式的每一边。
54 – 9 y + y = 6
54 – 8 y = 6
3. 求解y的方程。
54 – 8年– 54 = 6 – 54
-8年= -48
-8年/-8 = -48/-8
y = 6
4. 代入y = 6 并求解x。
x = 18 -3 y
x = 18 -3(6)
x = 18 - 18
x = 0
5. 验证 (0,6) 是解。
x = 18 -3 y
0 = 18 – 3(6)
0 = 18 -18
0 = 0
03
04 的
加法消除
如果给定的线性方程的一侧是变量,另一侧是常数,则求解系统的最简单方法是消元法。
考虑以下线性方程组:
x + y = 180
3 x + 2 y = 414
1. 首先,把方程写在旁边,这样你就可以很容易地比较每个变量的系数。
2. 接下来,将第一个方程乘以 -3。
-3(x + y = 180)
3. 为什么我们乘以-3?将第一个方程添加到第二个方程以找出答案。
-3x + -3y = -540
+ 3x + 2y = 414
0 + -1y = -126
我们现在已经消除了变量x。
4. 求解变量 y:
y = 126
5. 代入y = 126 以找到x。
x + y = 180
x + 126 = 180
x = 54
6. 验证 (54, 126) 是正确答案。
3 x + 2 y = 414
3(54) + 2(126) = 414
414 = 414
04
04 的
减法消除
另一种通过消除大陵森求解的方法是减去而不是添加给定的线性方程。
考虑以下线性方程组:
y - 12 x = 3
y - 5 x = -4
1.我们可以减去它们来消除y ,而不是添加方程。
y - 12 x = 3
- ( y - 5 x = -4)
0 - 7 x = 7
2. 求解x。
-7 x = 7
x = -1
3. 代入x = -1 求解y。
y - 12 x = 3
y - 12(-1) = 3
y + 12 = 3
y = -9
4. 验证 (-1, -9) 是正确的解决方案。
(-9) - 5(-1) = -4
-9 + 5 = -4
-4 = -4
Ⅲ 线性方程组的解的三种情况是什么
第一种是无解。也就是说,方程之间出现有矛盾的情况。
第二种情况是解为零。这也是其次线性方程组唯一解的情况。
第三种是齐次线性方程组系数矩阵线性相关。这种情况下有无数个解。
线性方程组是各个方程关于未知量均为一次的方程组(例如2元1次方程组)。对线性方程组的研究,中国比欧洲至少早1500年,记载在公元初《九章算术》方程章中。
1、解线性方程组的方法大致可以分为两类:直接方法和迭代法。直接方法是指假设计算过程中不产生舍入误差,经过有限次运算可求得方程组的精确解的方法;迭代法是从解的某个近似值出发,通过构造一个无穷序列去逼近精确解的方法。
2、消去法:Gauss(高斯)消去法——是最基本的和最简单的直接方法,它由消元过程和回代过程构成,基本思想是:将方程组逐列逐行消去变量,转化为等价的上三角形方程组(消元过程);然后按照方程组的相反顺序求解上三角形方程组,得到原方程组的解(回代过程)。
优缺点:简单易行,但是要求主元均不为0,适用范围小,数值稳定性差。
列主元素消去法——基本思想是在每次消元前,在要消去未知数的系数中找到绝对值大的系数作为主元,通过方程对换将其换到主对角线上,然后进行消元。
优点:计算简单,工作量大为减少,数值稳定性良好,是求解中小型稠密线性方程组的最好方法之一。
全主元素消去法——基本思想是在全体待选系数a(ij)(k)中选取主元,并通过行与列的互换把它换到a(kk)(k)的位置,进行消元。
优缺点:这种方法的精度优于列主元素法,它对控制舍入误差十分有效,但是需要同时作行列变换,因而程序比较复杂,计算时间较长。
3、直接三角分解法:消元过程实际上是把系数矩阵A分解成单位下三角形矩阵与上三角形矩阵乘积的过程,其中L为单位下三角形矩阵,U为上三角形矩阵。这种分解过程称为杜利特尔(Doolittle分解),也称为LU分解。当系数矩阵进行三角分解后,求解方程组Ax = b的问题就等价于求解两个三角形方程组Ly=b和Ux=y。
矩阵的直接三角分解——设A为n阶方阵,若A的顺序主子式A(i)均不为0,则矩阵A存在唯一的LU分解;直接三角分解法——如果线性方程组Ax = b的系数矩阵已进行三角分解A=LU,则解方程组Ax=b等价于求解两个三角形方程组Ly=b和Ux=y。
列主元素的三角分解法——设矩阵A非奇异,则存在置换矩阵P,使得PA有唯一的LU分解(即PA=LU),且|l(ij)|≤1。
4、排列阵:单位矩阵经过若干次行变换所得到的矩阵。
5、克劳特(Crout)分解:将矩阵A分解成一个下三角形矩阵L与一个单位上三角形矩阵U的乘积。
6、特殊矩阵的三角分解法:在工程实际计算中,如三次样条插值或用差分法求解常微分方程边值问题,导出的线性方程组的系数矩阵A常常是稀疏的三对角形矩阵或A是对称正定阵,使得A的三角分解也具有更简洁的形式。
Ⅳ 如何用C++用列主元高斯消去法求解线性方程组的解
大二的时候自己写得,包你满意!
四种方法:
Cramer算法解方程组
Gauss列主元解方程组
Gauss全主元解方程组
用Doolittle算法解方程组
//解线性方程组
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
//----------------------------------------------全局变量定义区
const int Number=15; //方程最大个数
double a[Number][Number],b[Number],_a[Number][Number],_b[Number]; //系数行列式
int A_y[Number]; //a[][]中随着横坐标增加列坐标的排列顺序,如a[0][0],a[1][2],a[2][1]...则A_y[]={0,2,1...};
int lenth,_lenth; //方程的个数
double a_sum; //计算行列式的值
char * x; //未知量a,b,c的载体
//----------------------------------------------函数声明区
void input(); //输入方程组
void print_menu(); //打印主菜单
int choose (); //输入选择
void cramer(); //Cramer算法解方程组
void gauss_row(); //Gauss列主元解方程组
void guass_all(); //Gauss全主元解方程组
void Doolittle(); //用Doolittle算法解方程组
int Doolittle_check(double a[][Number],double b[Number]); //判断是否行列式>0,若是,调整为销梁顺序主子式全睁迹>0
void xiaoqu_u_l(); //将行列式Doolittle分解
void calculate_u_l(); //计算Doolittle结果
double & calculate_A(int n,int m); //计算行列式
double quanpailie_A(); //根据列坐标的排列计算的值,如A_y[]={0,2,1},得sum=a[0][ A_y[0] ] * a[1][ A_y[1] ] * a[2][ A_y[2] ]=a[0][0]*a[1][2]*a[2][1];
void exchange(int m,int i); //交换A_y[m],A_y[i]
void exchange_lie(int j); //交换a[][j]与b[];
void exchange_hang(int m,int n); //分别交换a[][]和b[]中的m与n两行
void gauss_row_xiaoqu(); //Gauss列主元消去法
void gauss_all_xiaoqu(); //Gauss全主元消去法
void gauss_calculate(); //根据Gauss消去法结果悉斗并计算未知量的值
void exchange_a_lie(int m,int n); //交换a[][]中的m和n列
void exchange_x(int m,int n); //交换x[]中的x[m]和x[n]
void recovery(); //恢复数据
//主函数
void main()
{
int flag=1;
input(); //输入方程
while(flag)
{
print_menu(); //打印主菜单
flag=choose(); //选择解答方式
}
}
//函数定义区
void print_menu()
{
system("cls");
cout<<"------------方程系数和常数矩阵表示如下:\n";
for(int j=0;j<lenth;j++)
cout<<"系数"<<j+1<<" ";
cout<<"\t常数";
cout<<endl;
for(int i=0;i<lenth;i++)
{
for(j=0;j<lenth;j++)
cout<<setw(8)<<setiosflags(ios::left)<<a[i][j];
cout<<"\t"<<b[i]<<endl;
}
cout<<"-----------请选择方程解答的方案----------";
cout<<"\n 1. 克拉默(Cramer)法则";
cout<<"\n 2. Gauss列主元消去法";
cout<<"\n 3. Gauss全主元消去法";
cout<<"\n 4. Doolittle分解法";
cout<<"\n 5. 退出";
cout<<"\n 输入你的选择:";
}
void input()
{ int i,j;
cout<<"方程的个数:";
cin>>lenth;
if(lenth>Number)
{
cout<<"It is too big.\n";
return;
}
x=new char[lenth];
for(i=0;i<lenth;i++)
x[i]='a'+i;
//输入方程矩阵
//提示如何输入
cout<<"====================================================\n";
cout<<"请在每个方程里输入"<<lenth<<"系数和一个常数:\n";
cout<<"例:\n方程:a";
for(i=1;i<lenth;i++)
{
cout<<"+"<<i+1<<x[i];
}
cout<<"=10\n";
cout<<"应输入:";
for(i=0;i<lenth;i++)
cout<<i+1<<" ";
cout<<"10\n";
cout<<"==============================\n";
//输入每个方程
for(i=0;i<lenth;i++)
{
cout<<"输入方程"<<i+1<<":";
for(j=0;j<lenth;j++)
cin>>a[i][j];
cin>>b[i];
}
//备份数据
for(i=0;i<lenth;i++)
for(j=0;j<lenth;j++)
_a[i][j]=a[i][j];
for(i=0;i<lenth;i++)
_b[i]=b[i];
_lenth=lenth;
}
//输入选择
int choose()
{
int choice;char ch;
cin>>choice;
switch(choice)
{
case 1:cramer();break;
case 2:gauss_row();break;
case 3:guass_all();break;
case 4:Doolittle();break;
case 5:return 0;
default:cout<<"输入错误,请重新输入:";
choose();
break;
}
cout<<"\n是否换种方法求解(Y/N):";
cin>>ch;
if(ch=='n'||ch=='N') return 0;
recovery();
cout<<"\n\n\n";
return 1;
}
//用克拉默法则求解方程.
void cramer()
{
int i,j;double sum,sum_x;char ch;
//令第i行的列坐标为i
cout<<"用克拉默(Cramer)法则结果如下:\n";
for(i=0;i<lenth;i++)
A_y[i]=i;
sum=calculate_A(lenth,0);
if(sum!=0)
{
cout<<"系数行列式不为零,方程有唯一的解:";
for(i=0;i<lenth;i++)
{ ch='a'+i;
a_sum=0;
for(j=0;j<lenth;j++)
A_y[j]=j;
exchange_lie(i);
sum_x=calculate_A(lenth,0);
cout<<endl<<ch<<"="<<sum_x/sum;
exchange_lie(i);
}
}
else
{
cout<<"系数行列式等于零,方程没有唯一的解.";
}
cout<<"\n";
}
double & calculate_A(int n,int m) //计算行列式
{ int i;
if(n==1) {
a_sum+= quanpailie_A();
}
else{for(i=0;i<n;i++)
{ exchange(m,m+i);
calculate_A(n-1,m+1);
exchange(m,m+i);
}
}
return a_sum;
}
double quanpailie_A() //计算行列式中一种全排列的值
{
int i,j,l;
double sum=0,p;
for(i=0,l=0;i<lenth;i++)
for(j=0;A_y[j]!=i&&j<lenth;j++)
if(A_y[j]>i) l++;
for(p=1,i=0;i<lenth;i++)
p*=a[i][A_y[i]];
sum+=p*((l%2==0)?(1):(-1));
return sum;
}
//高斯列主元排列求解方程
void gauss_row()
{
int i,j;
gauss_row_xiaoqu(); //用高斯列主元消区法将系数矩阵变成一个上三角矩阵
for(i=0;i<lenth;i++)
{
for(j=0;j<lenth;j++)
cout<<setw(10)<<setprecision(5)<<a[i][j];
cout<<setw(10)<<b[i]<<endl;
}
if(a[lenth-1][lenth-1]!=0)
{
cout<<"系数行列式不为零,方程有唯一的解:\n";
gauss_calculate();
for(i=0;i<lenth;i++) //输出结果
{
cout<<x[i]<<"="<<b[i]<<"\n";
}
}
else
cout<<"系数行列式等于零,方程没有唯一的解.\n";
}
void gauss_row_xiaoqu() //高斯列主元消去法
{
int i,j,k,maxi;double lik;
cout<<"用Gauss列主元消去法结果如下:\n";
for(k=0;k<lenth-1;k++)
{
j=k;
for(maxi=i=k;i<lenth;i++)
if(a[i][j]>a[maxi][j]) maxi=i;
if(maxi!=k)
exchange_hang(k,maxi);//
for(i=k+1;i<lenth;i++)
{
lik=a[i][k]/a[k][k];
for(j=k;j<lenth;j++)
a[i][j]=a[i][j]-a[k][j]*lik;
b[i]=b[i]-b[k]*lik;
}
}
}
//高斯全主元排列求解方程
void guass_all()
{
int i,j;
gauss_all_xiaoqu();
for(i=0;i<lenth;i++)
{
for(j=0;j<lenth;j++)
cout<<setw(10)<<setprecision(5)<<a[i][j];
cout<<setw(10)<<b[i]<<endl;
}
if(a[lenth-1][lenth-1]!=0)
{
cout<<"系数行列式不为零,方程有唯一的解:\n";
gauss_calculate();
for(i=0;i<lenth;i++) //输出结果
{
for(j=0;x[j]!='a'+i&&j<lenth;j++);
cout<<x[j]<<"="<<b[j]<<endl;
}
}
else
cout<<"系数行列式等于零,方程没有唯一的解.\n";
}
void gauss_all_xiaoqu() //Gauss全主元消去法
{
int i,j,k,maxi,maxj;double lik;
cout<<"用Gauss全主元消去法结果如下:\n";
for(k=0;k<lenth-1;k++)
{
for(maxi=maxj=i=k;i<lenth;i++)
{
for(j=k;j<lenth;j++)
if(a[i][j]>a[maxi][ maxj])
{ maxi=i;
maxj=j;
}
}
if(maxi!=k)
exchange_hang(k,maxi);
if(maxj!=k)
{
exchange_a_lie(maxj,k); //交换两列
exchange_x(maxj,k);
}
for(i=k+1;i<lenth;i++)
{
lik=a[i][k]/a[k][k];
for(j=k;j<lenth;j++)
a[i][j]=a[i][j]-a[k][j]*lik;
b[i]=b[i]-b[k]*lik;
}
}
}
void gauss_calculate() //高斯消去法以后计算未知量的结果
{
int i,j;double sum_ax;
b[lenth-1]=b[lenth-1]/a[lenth-1][lenth-1];
for(i=lenth-2;i>=0;i--)
{
for(j=i+1,sum_ax=0;j<lenth;j++)
sum_ax+=a[i][j]*b[j];
b[i]=(b[i]-sum_ax)/a[i][i];
}
}
void Doolittle() //Doolittle消去法计算方程组
{
double temp_a[Number][Number],temp_b[Number];int i,j,flag;
for(i=0;i<lenth;i++)
for(j=0;j<lenth;j++)
temp_a[i][j]=a[i][j];
flag=Doolittle_check(temp_a,temp_b);
if(flag==0) cout<<"\n行列式为零.无法用Doolittle求解.";
xiaoqu_u_l();
calculate_u_l();
cout<<"用Doolittle方法求得结果如下:\n";
for(i=0;i<lenth;i++) //输出结果
{
for(j=0;x[j]!='a'+i&&j<lenth;j++);
cout<<x[j]<<"="<<b[j]<<endl;
}
}
void calculate_u_l() //计算Doolittle结果
{ int i,j;double sum_ax=0;
for(i=0;i<lenth;i++)
{
for(j=0,sum_ax=0;j<i;j++)
sum_ax+=a[i][j]*b[j];
b[i]=b[i]-sum_ax;
}
for(i=lenth-1;i>=0;i--)
{
for(j=i+1,sum_ax=0;j<lenth;j++)
sum_ax+=a[i][j]*b[j];
b[i]=(b[i]-sum_ax)/a[i][i];
}
}
void xiaoqu_u_l() //将行列式按Doolittle分解
{ int i,j,n,k;double temp;
for(i=1,j=0;i<lenth;i++)
a[i][j]=a[i][j]/a[0][0];
for(n=1;n<lenth;n++)
{ //求第n+1层的上三角矩阵部分即U
for(j=n;j<lenth;j++)
{ for(k=0,temp=0;k<n;k++)
temp+=a[n][k]*a[k][j];
a[n][j]-=temp;
}
for(i=n+1;i<lenth;i++) //求第n+1层的下三角矩阵部分即L
{ for(k=0,temp=0;k<n;k++)
temp+=a[i][k]*a[k][n];
a[i][n]=(a[i][n]-temp)/a[n][n];
}
}
}
int Doolittle_check(double temp_a[][Number],double temp_b[Number]) //若行列式不为零,将系数矩阵调整为顺序主子式大于零
{
int i,j,k,maxi;double lik,temp;
for(k=0;k<lenth-1;k++)
{
j=k;
for(maxi=i=k;i<lenth;i++)
if(temp_a[i][j]>temp_a[maxi][j]) maxi=i;
if(maxi!=k)
{ exchange_hang(k,maxi);
for(j=0;j<lenth;j++)
{ temp=temp_a[k][j];
temp_a[k][j]=temp_a[maxi][j];
temp_a[maxi][j]=temp;
}
}
for(i=k+1;i<lenth;i++)
{
lik=temp_a[i][k]/temp_a[k][k];
for(j=k;j<lenth;j++)
temp_a[i][j]=temp_a[i][j]-temp_a[k][j]*lik;
temp_b[i]=temp_b[i]-temp_b[k]*lik;
}
}
if(temp_a[lenth-1][lenth-1]==0) return 0;
return 1;
}
void exchange_hang(int m,int n) //交换a[][]中和b[]两行
{
int j; double temp;
for(j=0;j<lenth;j++)
{ temp=a[m][j];
a[m][j]=a[n][j];
a[n][j]=temp;
}
temp=b[m];
b[m]=b[n];
b[n]=temp;
}
void exchange(int m,int i) //交换A_y[m],A_y[i]
{ int temp;
temp=A_y[m];
A_y[m]=A_y[i];
A_y[i]=temp;
}
void exchange_lie(int j) //交换未知量b[]和第i列
{ double temp;int i;
for(i=0;i<lenth;i++)
{ temp=a[i][j];
a[i][j]=b[i];
b[i]=temp;
}
}
void exchange_a_lie(int m,int n) //交换a[]中的两列
{ double temp;int i;
for(i=0;i<lenth;i++)
{ temp=a[i][m];
a[i][m]=a[i][n];
a[i][n]=temp;
}
}
void exchange_x(int m,int n) //交换未知量x[m]与x[n]
{ char temp;
temp=x[m];
x[m]=x[n];
x[n]=temp;
}
void recovery() //用其中一种方法求解后恢复数据以便用其他方法求解
{
for(int i=0;i<lenth;i++)
for(int j=0;j<lenth;j++)
a[i][j]=_a[i][j];
for(i=0;i<lenth;i++)
b[i]=_b[i];
for(i=0;i<lenth;i++)
x[i]='a'+i;
a_sum=0;
lenth=_lenth;
}
Ⅳ 平方根法求解线性方程组
1 高斯消去法
高斯消去法也称为逐次消去法,是一个古老的求解线性方程组的方法,特别是由其改进而得到的选主元素消去法、三角分解法仍然是目前计算机上常用的有效方法。
Ⅵ 求解线性方程组的方法
解线性方程组的方法:
①克莱姆法则.用克莱姆法则求解方程组 有两个前提,一是方程的个数要等于未知量的个数,二是系数矩阵的行列式要不等于零。用克莱姆法则求解方程组实际上相当于用逆矩阵的方法求解线性方程组,它建立线性方程组的解与其系数和常数间的关系,但由于求解时要计算n+1个n阶行列式,其工作量常常很大,所以克莱姆法则常用于理论证明,很少用于具体求解。
②矩阵消元法.将线性方程组的增广矩阵通过行的初等变换化为行简化阶梯形矩阵 ,则以行简化阶梯形矩阵为增广矩阵的线性方程组与原方程组同解。当方程组有解时,将其中单位列向量对应的未知量取为非自由未知量,其余的未知量取为自由未知量,即可找出线性方程组的解。
Ⅶ 如何解线性方程组
一般有以下几种方法:
1、计算A^2,A^3 找规律,然后用归纳法证明。
2、若神并r(A)=1,则A=αβ^T,A^n=(β^Tα)^(n-1)A
注:β^Tα =α^Tβ = tr(αβ^T)
3、分拆法:A=B+C,BC=CB,用二项式公式展开。
适用于 B^n 易计算,C的低次幂为零:C^2 或 C^3 = 0
4、用对角化 A=P^-1diagP
A^n = P^-1diag^nP
(7)电脑上解线性方程组的方法扩展阅读:
将一个矩阵分解为比较简单的或具有某种特性的若干矩阵的和或乘积,矩阵的分解法一般有三角分解、谱分解、奇异值分解、满秩分解等。
在线性代数中,相似矩阵是指存在相似关系的矩阵。相似关系是两个矩阵之间的一种等价关系。两个n×n矩阵A与B为相似矩阵当且仅当存在一个n×n的可逆矩阵P。
一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地,行秩是A的线性无关的游雀迹横行的极大数目。通俗一点说,如果把矩阵看成一个个行向量或者列向量,秩就是这些行向量或者列向量的秩,也就是极岁亏大无关组中所含向量的个数。
Ⅷ 如图求解以下线性方程组
方程组的解:x1=-7;x2=-6;x3=-3
求解线性方程组的方法有克莱姆法则,初等变换,矩阵法等。
本题用克莱姆法则求解,求解方法如下:
1、判断方程组系数行列式D是镇孙正否不等于零,如D≠0,则有方程组的解;
2、用方程组的常数项替代各xi变量系数的值,并求其行列式值;
3、根据克凯巧莱姆法则,得到御悔方程组的解,即x1=D1/D,x2=D2/D,x3=D3/D
求解过程如下:
Ⅸ 有没有可以解线性方程组的软件啊。。
matlab,mathematica,maple都可以,maple很扮亩山好上手,我就在用这个。这里可以给你个下载地址,然后进去以后帮助会告诉你怎么解方程组之类。
(其实你只要对矩阵进行操作就可以了,这样反而简单)
http://www.verycd.com/topics/2788587/
另外说实话厅中,克莱默法则是解线性方程组最方便的东西了。耐镇。在网上找计算器的话也都是用克莱默法则去消矩阵。google或者网络一下“矩阵计算器”或者“matrix calculator”,很方便的。