| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6271 人关注过本帖, 2 人收藏
标题:华山论剑 之 [矩阵]
取消只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:21 
华山论剑 之 [矩阵]
应施鹏兄弟的要求就矩阵模块的实现开贴交流,希望众英雄以代码展现自己的思想与风格。

在论坛里不可能有什么物质奖励,能得到的只有大家的认可,而认可度的体现之一即专家分。

这一贴的分数只为吸引大家瞩目,最后将平分给关注者。

而对于实际参与者,只要代码完整实现了矩阵操作,并得到大家的认可,我将以个人名义奖励100专家分。

注意,是“每位”100专家分

这可以算作一次团队开发,成员是论坛所有有兴趣参与的人。既然是个团队项目,就不能任由个人意愿去随意发挥。

现在讨论一下模块的接口标准。下面是初步设定,可以继续讨论。但定稿后,参与者必需严格按接口要求编写模块。

1.模块的编写语言限定为C语言(毕竟这是在C论坛里),所以也就用不到类的概念。矩阵数据的存储类型为结构。

    这里规定结构的名称为MATRIX。
    矩阵元素的数据类型为double。
    由于这次讨论源于fourleaves对三元组行逻辑链接的讨论,所以要求邻接表(或其它矩阵压缩算法)实现,对于二维数组的实现不予考虑(这样的实现奖励专家分)。
    当然,如果有人能自动识别矩阵的稠密度从而能自动切换压缩矩阵与非压缩矩阵,将给予500专家分的奖励。
    MATRIX结构的内部成员定义不作要求。我们不提倡外部程序直接操作MARIX,而是应该通过相应的操作函数来完成。

2.矩阵操作函数接口定义。

    MATRIX * Matrix_creat(int rows, int columns);//创建rows行columns列矩阵,元素初始值为0
    void Matrix_free(MATRIX * mat);//销毁mat矩阵
    int Matrix_rows_len(MATRIX * mat);//获取矩阵mat的行数,mat为空指针时返回0
    int Matrix_cols_len(MATRIX * mat);//获取矩阵mat的列数,mat为空指针时返回0
    int Matrix_set(MATRIX * mat, int row, int column, double value);//设置mat矩阵第row行第column列的元素值为value,操作成功返回0,否则返回一个非0值
    double Matrix_get(MATRIX * mat, int row, int column);//获取mat矩阵第row行第column列的元素值
    MATRIX * Matrix_add(MATRIX * mat1, MATRIX * mat2);//计算两个矩阵相加,返回和矩阵。当两个矩阵不能作加法运算时返回NULL
    MATRIX * Matrix_mul(MATRIX * mat1, MATRIX * mat2);//计算两个矩阵相乘,注意是mat1左乘mat2。如果不能作乘法运算返回NULL
    MATRIX * Matrix_mul_real(MATRIX * mat, double a);//计算矩阵与实数相乘
    MATRIX * Matrix_dot_mul(MATRIX * mat1, MATRIX * mat2);//计算两个矩阵的点乘。如果不能作运算返回NULL
    MATRIX * Matrix_trans(MATRIX * mat);//返回mat的转置矩阵


先这么多吧。由于时间仓促水平有限,可能有不合理的地方,欢迎各位参与讨论并给出修改或补充意见。
   
   
搜索更多相关主题的帖子: 风格 接口 开发 
2012-08-06 19:40
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 3楼 demonleer
矩阵是个很实用的工具,值得用点心做好。基本上这个标准是我边发贴边构思的,肯定有不足之处,多讨论交流。

另外函数名称觉得还舒服么,我这英语也就四级水平,一直有提高英语水平的良好愿望,可惜心有余而力不足。有好的意见尽管提。

重剑无锋,大巧不工
2012-08-06 20:39
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
也许将 MATRIX 改为 SPARSE_MATRIX 更合适一些,或者直接叫 SPARSE 怎么样?

毕竟邻接表只有在矩阵足够“稀疏”时才有优势。如果矩阵很稠还不如直接用二维数组存储,操作也更简单。

我们可以考虑分别实现两种矩阵及相应操作。

重剑无锋,大巧不工
2012-08-06 21:03
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 9楼 Devil_W
乖,别捣乱。等哥们儿有时间再和你玩那个QQ客户端。

重剑无锋,大巧不工
2012-08-06 21:20
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
唉,现在只能用手机上网,向各位道个晚安。

小施不用理那个谁,等明天我网络恢复了再批评他。

话说你俩好像同岁。

重剑无锋,大巧不工
2012-08-06 22:23
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
中午好各位,该正式批评这个邪恶的W了。

矩阵算是一种新兴的数学工具。应该说是中国人最早发明并应用于数学运算,不过使得它一鸣惊人、声名鹊起的是其在量子力学中的应用。

矩阵的应用十分广泛,图论、统计分析、数值分析、物理学、几何学、光学、电学,无处不见其身影。通讯领域、图像处理、人工智能,不胜枚举。

远的不说,在敝人的本门功夫中,电力网络方程及潮流分析等都需要用矩阵来分析。

著名的数学软件matlab译成中文叫矩阵实验室,其所有的运算都是基于矩阵的。

各种科幻电影一想表达出点科学素养就会拿出矩阵来装门面。

黑客帝国的英文片名叫The Matrix

黑客帝国2——The Matrix Reloaded

黑客帝国3——The Matrix Revolutions


给W的课上完了,下面针对另一群人说两句。

大多数人不懂矩阵,这很正常。因为它太过专业,日常生活中很难见到。

但是不懂矩阵却嘲讽它没用的人,我很鄙视。事实上我很厌恶各种不懂装懂的人。

人生而有涯,而知也无涯。我们每个人不可能把世上所有的知识都学会。选择你喜欢的部分去学习享受吧,但不要轻视贬低你不喜欢和不懂的部分。


最后,说说稀疏矩阵(大量元素为0的矩阵)。矩阵在工程上的一个重要应用是解方程组,尤其是线性方程组。方程的数量成百上千很平常,但每个方程的相关变量往往很少(一般也就3到5个)。这样的方程组用普通矩阵表达往往连存储都是个问题更不用说计算。为了解决这类问题,人们针对稀疏矩阵的特点提出了各种压缩方案。

这个贴子要做的就是实现其中一种方案。

如果再有人来这里用不屑的语气说——这种东西早有成熟的函数库了做它有什么用。我就要骂这种装X货了。这是种典型的“气人有笑人无”的小人嘴脸。

这是一次训练,一次实践。

有兴趣的朋友欢迎参与。不懂的这不正好是个交流学习的机会么?

没兴趣但有能力的可以评论,指出个中不足,只要是合理的、有建设性的意见,我依旧欢迎,语气强势点也没关系。

我喜欢狂妄但有实力的人,邪恶的W算是一个吧。(不过不要太嚣张哦,你那个破QQ客户端我也很不屑。你我本就不是一个发展方向的)

但是,如果没能力却要来这里装的,呵呵,很久没好好骂人了。

重剑无锋,大巧不工
2012-08-07 13:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 17楼 鱼∞鱼
我正在考虑这个。就怕我的分到最后不够用呵呵。

重剑无锋,大巧不工
2012-08-07 13:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
可怜的刘翔,希望网友给他的更多的是鼓励,而不是嘲讽。

重剑无锋,大巧不工
2012-08-07 18:01
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 23楼 demonleer
只是个game。

怎么样了,代码开工了没?

重剑无锋,大巧不工
2012-08-07 22:05
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
出差中,手机查看发言都不太方便。很高兴能看到两位的参与,等我回去细看。
给小施一点建议,矩阵中的行与列的标准翻译即是row与column。

重剑无锋,大巧不工
2012-08-08 20:24
快速回复:华山论剑 之 [矩阵]
数据加载中...
 
   



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

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