C语言求矩阵行最简型及其秩

2023-11-08

/*注意:re == row_element;ce == column_element*/
#include <stdio.h>
#include <math.h>
void Matrix_Simplify(void);
unsigned char Matrix_Rank(void);
float matrix[100][100];
unsigned char re=0,ce=0;
unsigned int row,column;
main()
{
    unsigned char a,b;
    
    printf("Please enter the size of the matrix(row)(column)\n");
    scanf("%d %d",&row,&column);
    
    for(a=0;a<row;a++)
    {
        printf("Please enter the elements on line %d, separated by spaces.\n",a+1);
        for(b=0;b<column;b++)
        {
            scanf("%f",&matrix[a][b]);
        }
    }
/*输出初始矩阵*/
    printf("\n The matrix you entered:\n\n");
    for(a=0;a<row;a++)
    {
        for(b=0;b<column;b++)
            printf("%8.4g",matrix[a][b]);
        printf("\n\n");
    }
    
/*把矩阵化为行最简型*/ 
    for(ce=0;ce<column;)
{
/*把aii的值都转化为非0值(寻找该列自aii以下首个非零元所在的行与第i行互换)*/
        if(matrix[re][ce]==0)
        {
            for(a=re;a<row;a++)
            {
                if(matrix[a][ce]!=0)
                    break;
            }
		/*如果aii及以下元素都为0,则此列不做处理,进行下一列的转化*/
            if(a==row)
                ce++;
            else
            {
                for(b=0;b<column;b++)
                {
                    matrix[99][b]=matrix[a][b];
                    matrix[a][b]=matrix[re][b];
                    matrix[re][b]=matrix[99][b];
                }
                Matrix_Simplify();
            }
        }
        else
        {
            Matrix_Simplify();
        }
    }
/*输出转化后的矩阵*/
    printf("Its row simplest matrix form:\n\n");
    for(a=0;a<row;a++)
    {
        for(b=0;b<column;b++)
        {
            if(fabs(matrix[a][b])<0.0001)
                matrix[a][b]=0;
            printf("%8.4g",matrix[a][b]);
        }
        printf("\n\n");
    }
    printf("\n\n Rank of the matrix:%d\n",Matrix_Rank());
}

/*对矩阵的转化过程*/ 
void Matrix_Simplify(void)//第一行第一个元素已经是非零元素。
{
    int i,j;
    float n;
    /*使元素aii都化为1(第i行同乘1/aii)*/   
    n=1/matrix[re][ce];
    for(j=0;j<column;j++)
    {
        matrix[re][j]=n*matrix[re][j];
    }
	/*把非零行的首个元素1所在的列中位于1之上的元素都化为0*/	
    for(i=0;i<re;i++)
    {
        n=-matrix[i][ce]/matrix[re][ce];
        for(j=0;j<column;j++)
        {
            matrix[i][j]=matrix[i][j]+n*matrix[re][j];
        }
    }
	/*把非零行的首个元素1所在的列中位于1之下的元素都化为0*/
    for(i=re+1;i<row;i++) 
    {
        n=-matrix[i][ce]/matrix[re][ce];
        for(j=0;j<column;j++)
        {
            matrix[i][j]=matrix[i][j]+n*matrix[re][j];
        }    
    }   
    re++;
    ce++;
}

/*求矩阵的秩*/ 
unsigned char Matrix_Rank(void)
{
    unsigned char i,j;
    for(i=0;i<row;i++)
    {
		/*计算有多少个非零行即为矩阵的秩*/
        for(j=0;j<column;j++)
        {
            if(matrix[i][j]!=0)
                break;
        }
        if(j==column)
            break;
    }
    return i;
}

比如下面的例子:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言求矩阵行最简型及其秩 的相关文章

  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • C# - Visual Studio 中的 System.OutOfMemoryException

    我遇到问题 当我右键单击 Visual Studio 中的主窗体并转到 视图设计器 时 出现错误 它说 引发了 System OutOfMemoryException 类型的异常 堆栈跟踪 at System Reflection Asse
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐