| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2291 人关注过本帖
标题:我编了一个矩阵求逆函数,试着运行,没有错误,但是黑框里什么都没有,不知 ...
只看楼主 加入收藏
红酥1996
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-10-25
收藏
 问题点数:0 回复次数:6 
我编了一个矩阵求逆函数,试着运行,没有错误,但是黑框里什么都没有,不知道哪里出了问题。
#include<stdio.h>
void inverse(int c[6][6]) //矩阵求逆
{
    int i, j, h, k;
    double p; //定义p作为一个比例系数
    double q[6][12];
    for (i = 0; i<6; i++) //构建高斯矩阵
        for (j = 0; j<6; i++)
            q[i][j] = c[i][j];
    for (i = 0; i<6; i++)
        for (j = 0; j<12; j++)
        {
            if (i + 6 == j)
                q[i][j] = 1;
            else
                q[i][j] = 0;
        }
    for (h = k = 0; k<6; k++, h++) //消除对角线以下元素
        for (i = k + 1; i<6; i++)
        {
            if (q[i][h] == 0)
                continue;
            p = q[k][h] / q[i][h]; //p作为一个比例系数,表示的是同一列相邻两行的数的比值,此处是下一行比上一行
            for (j = 0; j <= 12; j++)
            {
                q[i][j] *= p;
                q[i][j] -= q[k][j]; //把第i行第j列的数消为0
            }
        }
    for (h = k = 5; k>0; h--, k--) //消除对角线以上元素
        for (i = k - 1; i >= 0; i--)
            if (q[i][h] == 0)
                continue;
    p = q[k][h]/q[i][h]; //p作为一个比例系数,表示的是同一列相邻两行的数的比值,此处是上一行比下一行
    for (j = 0; j<12; j++)
    {
        q[i][j] *= p;
        q[i][j] -= q[k][j];
    }
    for (i = 0; i<6; i++) //把对角线上的元素化为1
    {
        p = 1.0/q[i][i];
        for (j = 0; j<12; j++)
            q[i][j] *= p;
    }
    for (i = 0; i<6; i++) //提取逆矩阵
        for (j = 0; j<6; j++)
            c[i][j] = q[i][j + 6];

}

void main()    //这里我想试着运行一下这个函数可以不可以
{
    int i, j;
    double a[6][6] = {1,2,1,2,1,2,2,1,1,1,2,2,1,2,2,1,2,1,1,1,1,2,2,2,1,1,1,1,1,1,2,1,1,2,1,1};
    inverse(a);
    for (i = 0; i<6; i++)
    {
        for (j = 0; j<6; j++)
            printf("%d", a[i][j]);
        printf("\n");
    }
}

编译和连接都没有错误提示,但是运行时候的黑框框是没有任何结果的,如图:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 矩阵 运行 for i++ 一行 
2017-10-25 20:57
红酥1996
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-10-25
收藏
得分:0 
最后是 printf("%lf", a[i][j]);

我发错了
2017-10-25 21:02
凤凰院凶假
Rank: 2
来 自:春天里
等 级:论坛游民
威 望:1
帖 子:36
专家分:33
注 册:2016-12-22
收藏
得分:0 
我用vs2015报了以下错误,初学,不是很懂.希望能对你有所帮助。

图片附件: 游客没有浏览图片的权限,请 登录注册

2017-10-25 21:09
红酥1996
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-10-25
收藏
得分:0 
回复 2楼 红酥1996
刚才的代码我发错了,你能帮我试试这个吗?

#include<stdio.h>
void inverse(int c[6][6]) //矩阵求逆
{
    int i, j, h, k;
    int p; //定义p作为一个比例系数
    int q[6][12];
    for (i = 0; i<6; i++) //构建高斯矩阵
        for (j = 0; j<6; i++)
            q[i][j] = c[i][j];
    for (i = 0; i<6; i++)
        for (j = 0; j<12; j++)
        {
            if (i + 6 == j)
                q[i][j] = 1;
            else
                q[i][j] = 0;
        }
    for (h = k = 0; k<6; k++, h++) //消除对角线以下元素
        for (i = k + 1; i<6; i++)
        {
            if (q[i][h] == 0)
                continue;
            p = q[k][h] / q[i][h]; //p作为一个比例系数,表示的是同一列相邻两行的数的比值,此处是下一行比上一行
            for (j = 0; j <= 12; j++)
            {
                q[i][j] *= p;
                q[i][j] -= q[k][j]; //把第i行第j列的数消为0
            }
        }
    for (h = k = 5; k>0; h--, k--) //消除对角线以上元素
        for (i = k - 1; i >= 0; i--)
            if (q[i][h] == 0)
                continue;
    p = q[k][h]/q[i][h]; //p作为一个比例系数,表示的是同一列相邻两行的数的比值,此处是上一行比下一行
    for (j = 0; j<12; j++)
    {
        q[i][j] *= p;
        q[i][j] -= q[k][j];
    }
    for (i = 0; i<6; i++) //把对角线上的元素化为1
    {
        p = 1/q[i][i];
        for (j = 0; j<12; j++)
            q[i][j] *= p;
    }
    for (i = 0; i<6; i++) //提取逆矩阵
        for (j = 0; j<6; j++)
            c[i][j] = q[i][j + 6];

}

void main()
{
    int i, j;
    int a[6][6] = {1,2,1,2,1,2,2,1,1,1,2,2,1,2,2,1,2,1,1,1,1,2,2,2,1,1,1,1,1,1,2,1,1,2,1,1};
    inverse(a);
    for (i = 0; i<6; i++)
    {
        for (j = 0; j<6; j++)
            printf("%d", a[i][j]);
        printf("\n");
    }

}
2017-10-25 21:12
cq962425
Rank: 1
来 自:as
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-10-25
收藏
得分:0 
我刚刚用DEV运行了一下,说是52行 void  main() 这个有问题 我改成int main() 能运行 是黑框 然后就是停止工作

这个人很懒,什么也没有留下~
2017-10-25 22:02
红酥1996
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-10-25
收藏
得分:0 
回复 5楼 cq962425
是的,我就是这样的,不知道问题出现在哪里
2017-11-11 14:31
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
for (i = 0; i<6; i++) //构建高斯矩阵
        for (j = 0; j<6; i++)--------------j++
            q[i][j] = c[i][j];






以下的循环层次看不出来了

p = q[k][h]/q[i][h]; //p作为一个比例系数,表示的是同一列相邻两行的数的比值,此处是上一行比下一行//但是,运行中出现了下标i的值为-1
    for (j = 0; j<12; j++)
    {
        q[i][j] *= p;
        q[i][j] -= q[k][j];
    }
    for (i = 0; i<6; i++) //把对角线上的元素化为1
    {
        p = 1/q[i][i];
        for (j = 0; j<12; j++)
            q[i][j] *= p;
    }
    for (i = 0; i<6; i++) //提取逆矩阵
        for (j = 0; j<6; j++)
            c[i][j] = q[i][j + 6];

}
2017-11-11 19:22
快速回复:我编了一个矩阵求逆函数,试着运行,没有错误,但是黑框里什么都没有, ...
数据加载中...
 
   



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

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