文档章节

C#判断一个矩阵是否为对称矩阵、反称矩阵

北风其凉
 北风其凉
发布于 2014/04/21 23:08
字数 658
阅读 130
收藏 0

1.判断对称矩阵

对任意i和j,有a[i,j]=a[j,i]

/// <summary>
/// 检查一个矩阵是否为对称矩阵
/// </summary>
/// <param name="matrix">矩阵</param>
/// <returns>true:是对称矩阵 false:不是对称矩阵</returns>
private static bool isSymmetric(double[][] matrix)
{
    //矩阵没有元素的情况
    if (matrix.Length == 0)
    {
        return true;
    }

    //合法性检查:1)matrix应为矩阵;2)matrix应为方阵
    if (!isMatrix(matrix) || matrix.Length != matrix[0].Length)
    {
        throw new Exception("输入不合法");
    }

    //矩阵对称条件:对任意i,j有a[i,j]=a[j,i]
    for (int i = 0; i < matrix.Length; i++)
    {
        for (int j = 0; j < i; j++)
        {
            if (matrix[i][j] != matrix[j][i])
            {
                return false;
            }
        }
    }

    return true;
}

2.判断反称矩阵

对任意i和j,有a[i,j]=-a[j,i]

/// <summary>
/// 检查一个矩阵是否为反称矩阵
/// </summary>
/// <param name="matrix">矩阵</param>
/// <returns>true:是反称矩阵 false:不是反称矩阵</returns>
private static bool isSkewSymmetric(double[][] matrix)
{
    //矩阵没有元素的情况
    if (matrix.Length == 0)
    {
        return true;
    }

    //合法性检查:1)matrix应为矩阵;2)matrix应为方阵
    if (!isMatrix(matrix) || matrix.Length != matrix[0].Length)
    {
        throw new Exception("输入不合法");
    }

    //矩阵反称条件:对任意i,j有a[i,j]=-a[j,i]
    for (int i = 0; i < matrix.Length; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (matrix[i][j] != -matrix[j][i])
            {
                return false;
            }
        }
    }

    return true;
}

3.相关函数

/// <summary>
/// 判断一个二维数组是否为矩阵
/// </summary>
/// <param name="matrix">二维数组</param>
/// <returns>true:是矩阵 false:不是矩阵</returns>
private static bool isMatrix(double[][] matrix)
{
    //空矩阵是矩阵
    if (matrix.Length < 1) return true;

    //不同行列数如果不相等,则不是矩阵
    int count = matrix[0].Length;
    for (int i = 1; i < matrix.Length; i++)
    {
        if (matrix[i].Length != count)
        {
            return false;
        }
    }

    //各行列数相等,则是矩阵
    return true;
}

4.函数调用示例

1)Main函数代码

static void Main(string[] args)
{
    //测试矩阵1:matrix1
    double[][] matrix1 = new double[][] 
    {
        new double[] { 1, 2, 3 },
        new double[] { 2, 1, 2 },
        new double[] { 3, 2, 1 }
    };

    if (isSymmetric(matrix1)) { Console.WriteLine("matrix1 是对称矩阵"); }
    else { Console.WriteLine("matrix1 不是对称矩阵"); }
    if (isSkewSymmetric(matrix1)) { Console.WriteLine("matrix1 是反称矩阵"); }
    else { Console.WriteLine("matrix1 不是反称矩阵"); }

    //测试矩阵2:matrix2
    double[][] matrix2 = new double[][] 
    {
        new double[] { 0, 1, 2 },
        new double[] { -1, 0, 1 },
        new double[] { -2, -1, 0 }
    };

    if (isSymmetric(matrix2)) { Console.WriteLine("matrix2 是对称矩阵"); }
    else { Console.WriteLine("matrix2 不是对称矩阵"); }
    if (isSkewSymmetric(matrix2)) { Console.WriteLine("matrix2 是反称矩阵"); }
    else { Console.WriteLine("matrix2 不是反称矩阵"); }

    //测试矩阵3:matrix3
    double[][] matrix3 = new double[][] 
    {
        new double[] { 1, 2, 3 },
        new double[] { 4, 5, 6 },
        new double[] { 7, 8, 9 }
    };

    if (isSymmetric(matrix3)) { Console.WriteLine("matrix3 是对称矩阵"); }
    else { Console.WriteLine("matrix3 不是对称矩阵"); }
    if (isSkewSymmetric(matrix3)) { Console.WriteLine("matrix3 是反称矩阵"); }
    else { Console.WriteLine("matrix3 不是反称矩阵"); }

    Console.ReadLine();
}

2)示例运行结果

© 著作权归作者所有

北风其凉

北风其凉

粉丝 120
博文 497
码字总数 462305
作品 4
朝阳
程序员
私信 提问
将一个矩阵分解为对称矩阵与反称矩阵之和

1.理论依据 对任意n阶方阵A,有 A=(A+T(A))/2+(A-T(A))/2,其中T(A)是A的转置,(A+T(A))/2是一个对称矩阵,(A-T(A))/2是一个反称矩阵。 2.求出对称矩阵部分的函数 3.求出反称矩阵部分的函数 ...

北风其凉
2014/04/22
130
0
零基础学Python需要学会的五十道习题!全会了基础基本就过了!

小编总结了五十道适合Python初学者的练习题,非常适合练手,分享给大家! 题一、矩阵乘法 在开始之前先给大家点福利,小编准备了Python入门的系统教程等资料,私信小编发送我要资料就可以自动...

糖宝lsh
07/21
86
0
干货 | 万字长文带你复习线性代数!(二)

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/12/10
0
0
matlab-线性代数 判断 矩阵的对称、实对称、反对称

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   实对称矩阵的判断 code res......

志成就
02/21
57
0
图基础知识

前言 图是非常重要的一种数据结构,它是一种多对多的关系,相比线性表、树等,它是最复杂的一种数据结构。 图由顶点和边组成,顶点之间由边连接,如果边有方向,则称为有向图,反之则为无向图...

某昆
2017/09/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

秒杀系统思路

业务分析 技术挑战 请求响应要快:无论成功失败,需要尽快返回给用户 架构设计   前端:静态化   站点层:限制请求数   服务层:乐观锁写缓存   数据库CAP:读写高可用,一致性,扩容...

雷开你的门
29分钟前
11
0
最全的教育行业大数据解决方案,个个针对痛点

大数据的悄然兴起也带动了教育行业的革新,移动教育、云课堂等的出现,使得教育行业再次成为了可以中长期保持高景气的行业。然而,初涉数据领域的教育行业同时也面临着相当大的难题,还需要更...

朕想上头条
33分钟前
7
0
预约模块设计分析

1.预约功能描述: 预约是小程序中常见的一种商品管理系统,商家可根据商品或服务的特性,灵活设置预约细节,为用户提供线上预约服务,如场地预约,商品预定等,实现高效经营。 预约场景: ...

鱼煎
37分钟前
5
0
阿里云日志服务构建网站实时分析大盘实战

场景分析 挖掘数据价值是当前企业级网站共同面临的问题。买买网是一个电商平台网站,每天拥有大量的用户访问和购买记录。为了引导用户直接消费,提升购买率和转化率,不同的用户类别需要推荐...

阿里云官方博客
38分钟前
5
0
TL665xF-EasyEVM开发板硬件处理器、NAND FLASH、RAM

广州创龙结合TI KeyStone系列多核架构TMS320C665x及Xilinx Artix-7系列FPGA设计的TL665xF-EasyEVM开发板是一款DSP+FPGA高速大数据采集处理平台,其底板采用沉金无铅工艺的6层板设计,适用于高...

Tronlong创龙
41分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部