1 //用矩阵直接三角分解法求解方程组
2 #include<iostream>
3 #include<stdio.h>
4 using namespace std;
5 void main()
6 {
7 int n,i;
8 float *a,*x;
9 cout<<"请输入方程组元的个数:";
10 cin>>n;
11
12 a=new float[n*(n+1)]; //开辟增广矩阵的存储空间
13 x=new float[n]; //开辟方程组解的存储空间
14
15 cout<<"请输入方程组的系数矩阵:"<<endl;
16 for(i=0;i<n*(n+1);i++)
17 {
18 if ((i+1)%(n+1)==0) continue;
19 cin>>*(a+i);
20 }
21
22 cout<<"请输入方程组的常数项:"<<endl;
23 for(i=n;i<n*(n+1);i+=n+1)
24 cin>>*(a+i);
25
26 void DirectLU(float*,int,float*);
27 DirectLU(a,n,x);
28 cout<<"方程组的解是:"<<endl;
29 for(i=0;i<n;i++)
30 cout<<"x["<<i<<"]="<<float(*(x+i))<<endl;
31 }
32 void DirectLU(float*u,int n,float*x)
33 {
34 int i,r,k;
35 for(r=0;r<=n-1;r++)
36 {
37 for(i=r;i<=n;i++)
38 for(k=0;k<=r-1;k++)
39 *(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i));
40 for(i=r+1;i<=n-1;i++)
41 {
42 for(k=0;k<=r-1;k++)
43 *(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));
44 *(u+i*(n+1)+r)/=*(u+r*(n+1)+r);
45 }
46 }
47
48 for(i=n-1;i>=0;i--)
49 {
50 for(r=n-1;r>=i+1;r--)
51 *(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];
52 x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));
53 }
54
55 }