求解线性方程组

#define OEDER 8//order  秩
u8 SolvingLinearEquations(void)//u16 dat,u8 oeder
{
    int i, j, m, n=OEDER, r=OEDER,  t; //i,j,m,k,t 作为循环计数变量;n表示有n个未知数,即n元;r表示有r个方程组成方程组。 
   
//    scanf("%d %d", &n, &r);  //n表示有n个未知数,即n元;r表示有r个方程组成方程组。  
    float a[8][9] = { 
{1237,    1993,    3389,    9801,    14965,    21417,    36681,    54711,    3000},
{1173,    1623,    7046,    12228,    10086,    13478,    12518,    90697,    3000},
{4224,    88822,    43497,    0,    0,    0,    0,    0,    3000},
{1215,    2163,    10467,    13451,    17180,    29880,    54495,    14843,    3000},

{1774,    2329,    5839,    15747,    19187,    29389,    69734,    397,    3000},
{609,    3133,    7535,    11901,    17120,    23370,    66461,    11706,    3000},
{2171,    2711,    4001,    13346,    18621,    69228,    35721,    0,    3000},
{50536,    81169,    0,    0,    0,    0,    0,    0,    3000},


    
                                                
                                            };        //用二维数组存储方程组参数。11和100课改动。这里的程序限 10 元 20 个方程的方程组。 
   
    printf("请输入方程组参数\r\n");  
    for(j=0; j<n; j++)   
        {
        for(i=0; i<r+1; i++)   
            printf("%f\t", a[j][i]);
            printf("\r\n");
        }                                                
                                            
    if(r<n)   
        printf("方程有无穷解\r\n"); 
    if(r==n) 
    {   
        printf("方程有唯一解\r\n"); 
        for(t=0; t<n-1; t++)      //循环次数:当t=0时,仅将a[1][0],a[2][0],a[2][1]的值转换为0;t=1时,才将其转换成最简型阶梯矩阵。   
            for(m=0; m<n; m++)   //m表示第m列     
                for(j=0; j<n; j++)       //j表示第j行      
                    if(j!=m)     
                    {  
                        float b= a[j][m]/a[m][m]; 
                        for(i=0; i<n+1; i++) //因为一行的每个元素均要进行运算等式两边才会相等。        
                            a[j][i] -= a[m][i]*b;                      
                    } 
        for(j=0; j<n; j++)      //为了将其转换成单位矩阵,见《线性代数》
            {    
                a[j][n] /=a[j][j];    
                a[j][j] /=a[j][j]; 
            }
    }
    for(j=0; j<r; j++)   
        {
            printf("a[%d][%d]:%f\r\n", j,n,a[j][n]);  //输出最终结果,即未知数x,y,z...的值。
        }
        
    for(j=0; j<n; j++)   
        {
        for(i=0; i<r+1; i++)   
            printf("%f\t", a[j][i]);
            printf("\r\n");
        }                
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值