| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1158 人关注过本帖, 1 人收藏
标题:谁帮我看看这个怎么改才能求解矩阵的解,用的是高斯消元法。
只看楼主 加入收藏
雾城谜梦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-11-19
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:3 
谁帮我看看这个怎么改才能求解矩阵的解,用的是高斯消元法。
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
float *Colpivot(float*c,int n)
{
     int i,j,t,k,r;
     float *x,p;
     x=(float*)malloc(n*sizeof(float));
     for(r=0;r<n;r++)
         x[r]=0;
     for(i=0;i<=n-2;i++)
     {
         k=i;
         for(j=j+1;j<=n-1;j++)
              if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
                   k=j;
              if(k !=i)
                  for(j=i+1;j<=n-1;j++)
                    {
                      p=*(c+i*(n+1)+j);
                       *(c+i*(n+1)+j)=*(c+k*(n+1)+j);
                       *(c+k*(n+1)+j)=p;
                   }
              for(j=i+1;j<=n-1;j++)
              {
                  p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
                  for(t=i;t<=n;t++)
                      *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
              }
       }
   for(i=n-1;i>=0;i--)
   {
        for(j=n-1;j>=i+1;j--);
            (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

        x[i]=(*(c+i*(n+1)+n))/(*(c+i*(n+1)+i));
    }
    return x;
}

int main()
{
    int i,c;
    int j,k;
     float x;
     int c{4}{5}={{2,-1,10,0,-11},{0,3,-1,8,-11},{10,1,2,0,6},{-1,11,-1,3,25}};
     for(j=0;j<=3;j++)
         for(k=0;k<=4;k++)
         printf("c[%d][%d]=%f\n",j,k,c[j][k]);
     x=Colpivot(c[0],4);
     for(i=0;i<=3;i++)
         printf("x[%d]=%f\n",i,x[i]);
     return 0;
}
搜索更多相关主题的帖子: include 高斯 
2016-11-20 12:53
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
代码不对,就算改到能运行,结果也是错的。你还是再想想。
2016-11-20 13:56
雾城谜梦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-11-19
收藏
得分:0 
回复 楼主 雾城谜梦
都没能改到能运行我就放弃了,但是我想知道哪里不对??
2016-11-20 20:19
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
float *Colpivot(float*c,int n)
{
     int i,j,t,k,r;
     float *x,p;
     x=(float*)malloc(n*sizeof(float));
     for(r=0;r<n;r++)
         x[r]=0;
     for(i=0;i<=n-2;i++)
     {
         k=i;
         for(j=j+1;j<=n-1;j++)
              if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
                   k=j;
              if(k !=i)
                  for(j=i+1;j<=n-1;j++)
                    {
                      p=*(c+i*(n+1)+j);
                       *(c+i*(n+1)+j)=*(c+k*(n+1)+j);
                       *(c+k*(n+1)+j)=p;
                   }
              for(j=i+1;j<=n-1;j++)
              {
                  p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
                  for(t=i;t<=n;t++)
                      *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
              }
       }
   for(i=n-1;i>=0;i--)
   {
        for(j=n-1;j>=i+1;j--);
            (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));

        x[i]=(*(c+i*(n+1)+n))/(*(c+i*(n+1)+i));
    }
    return x;
}

int main()
{
    int i;        //这里变量c和后面的数组c重复
    int j,k;
     float *x;     
     float c[4][5]={{2,-1,10,0,-11},{0,3,-1,8,-11},{10,1,2,0,6},{-1,11,-1,3,25}};    //数组声明有问题,是用【】,子函数形参用的是float,而这里是int
     for(j=0;j<=3;j++)
         for(k=0;k<=4;k++)
         printf("c[%d][%d]=%g\n",j,k,c[j][k]);
     x=Colpivot(c[0],4);            //子函数的反回值是float类型指指,而你的x不是指针
     for(i=0;i<=3;i++)
         printf("x[%d]=%g\n",i,x[i]);
     free(x);
     return 0;
}
这样就能运行了。至于其它的就不改了。
2016-11-20 22:05
快速回复:谁帮我看看这个怎么改才能求解矩阵的解,用的是高斯消元法。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.094445 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved