| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:求助,为什么结果有错。请大家帮忙改错
只看楼主 加入收藏
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
求助,为什么结果有错。请大家帮忙改错
我想把阶梯形矩阵化成其标准型。。

输入
1    2    3
0    1    2
输出
1    0    0
0    1    0
输入
1    2    3   
0    2    0
0    0    1
0    0    0
输出
1    0    0
0    2    0
0    0    1
0    0    0
结果是m<n时输出的不正确,
m>=n时结果正确。
求改正!!!!!!


#include<stdio.h>
#include<stdlib.h>
#define M 30
void main()
{
    float a[M][M],B;
    int i,j,t,m,n;
    //输入行列数进行控制//
    printf("请输入矩阵的行数和列数m与n:\n");
    scanf("%d%d",&m,&n);
    //对矩阵P、A、Q进行初始化//
    printf("请按行输入矩阵A的各个元素\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%f",&a[i][j]);
    for(i=0;i<M;i++)
        for(j=0;j<M;j++)
            if((i>=m)||(j>=n))
                a[i][j]=0;
    printf("初始A矩阵\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",a[i][j]);
        printf("\n");
    }
    for(t=0;t<m;t++)
    {
        for(j=0;j<n;j++)
        {
            if(a[t][t]!=0)
            {
                B=a[t][j]/a[t][t];
                for(i=0;i<m;i++)
                    if(i!=j)
                        a[i][j]=a[i][j]-B*a[i][j];
            }
        }
    }
    printf("化为的A矩阵\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",a[i][j]);
        printf("\n");
    }
}当m<n时出现了错误。。。别的情况都对。。。求改正
搜索更多相关主题的帖子: 标准型 include 
2013-06-07 14:26
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
又是自问自答
细节害死人
  a[i][j]=a[i][j]-B*a[i][j];
应改为  a[i][j]=a[i][j]-B*a[i][t];
2013-06-07 15:40
tremere
Rank: 6Rank: 6
来 自:火星
等 级:侠之大者
帖 子:223
专家分:432
注 册:2013-3-11
收藏
得分:5 
...

极品菜鸟,来学习啦,啦啦啦啦啦啦啦。。。
2013-06-07 16:07
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:5 
额,你这个自答也太快了嘛

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2013-06-07 16:10
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
回复 4楼 菜鸟一支
好吧,现在在弄另一个问题。。。。
我想对A进行变化时,同时对一个n*n的Q矩阵进行相同的列变换。然后输出结果。。。。
得到的是A输出的对,Q输出的不对。
求指正!!!!!!!!!感激不尽!!!!!!!
#include<stdio.h>
#include<stdlib.h>
#define M 30
#define N 30
void main()
{
   
    float a[M][N],c[M][N],B2;
    int i,j,t,m,n;
    //输入行列数进行控制//
    printf("请输入矩阵的行数和列数m与n:\n");
    scanf("%d%d",&m,&n);
    //对矩阵P、A、Q进行初始化//
    printf("请按行输入矩阵A的各个元素\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%f",&a[i][j]);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(i==j)
                c[i][j]=1;
            else c[i][j]=0;
    printf("初始A矩阵\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",a[i][j]);
        printf("\n");
    }
    printf("初始Q矩阵\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",c[i][j]);
        printf("\n");
    }
    //化阶梯型矩阵为标准型,同时对Q矩阵进行相同的变化//
    for(t=0;t<m;t++)
    {
        for(j=0;j<n;j++)
        {
            if(a[t][t]!=0)
            {
                B2=a[t][j]/a[t][t];
                {
                for(i=0;i<m;i++)
                    if(i!=j)
                        a[i][j]=a[i][j]-B2*a[i][t];
                for(i=0;i<n;i++)
                    if(i!=j)
                        c[i][j]=c[i][j]-B2*c[i][t];
                }
            }
        }
    }
    printf("化为的A矩阵\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",a[i][j]);
        printf("\n");
    }
    printf("对应的Q矩阵\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%10.2f",c[i][j]);
        printf("\n");
    }
}
2013-06-07 16:45
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:0 
回复 5楼 木小子雨
刚刚看了一下,
第一:
for(t=0;t<m;t++)
    {
        for(j=0;j<n;j++)
        {
            if(a[t][t]!=0)
            {
                B2=a[t][j]/a[t][t];
                {
                for(i=0;i<m;i++)
                    if(i!=j)
                        a[i][j]=a[i][j]-B2*a[i][t];
                for(i=0;i<n;i++)
                    if(i!=j)
                        c[i][j]=c[i][j]-B2*c[i][t];
                }
            }
        }
    }
你同时对两个矩阵进行变换,但却是在if(a[t][t]!=0)和B2=a[t][j]/a[t][t];的条件下,这两个条件只对矩阵A满足,对矩阵Q显然是不满足的,因为你是把Q存放在c数组中的
第二,程序并没有把某些矩阵变成标准型
如:
输入:1 -1  0   2   1
     0  0   2   1   1
     0  0   0  -1   3
     0  0   0   0   0
输出是:
     1   0   0   0   0
     0   0   2   1   1
     0   0   0   -1   3
     0   0   0   0    0
这显然不是标准型,所以还有待改进啊

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2013-06-08 15:01
快速回复:求助,为什么结果有错。请大家帮忙改错
数据加载中...
 
   



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

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