设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3130|回复: 21
打印 上一主题 下一主题

[通用发布] 【C语言发布】非齐次线性方程组的解……(上)

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

1
发表于 2016-9-16 19:01:24 | 显示全部楼层
前排。坐等更新。

另外这代码还得注意程序规范的问题,比如声明的时候通常不加变量名字,只说类型。
还有这个写法到底是啥意思
C 代码复制
  1. scanf("%.0f\t", &[i]);

点评

单纯地写错了而已(捂脸逃)  发表于 2016-9-16 21:46
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2016-9-18 00:01:11 | 显示全部楼层
本帖最后由 RyanBern 于 2016-9-18 00:02 编辑
寒冷魔王 发表于 2016-9-17 01:17
哇,小叶子也做这个了呢~
前排支持!


首先,是因为是叶子所以回复这么认真么/w\

如果要用C++(兼容C89但不兼容C99)编译呢,最好写成...

其实我早就跟叶子说了我不建议这样,但是谁让它是一个 C 语言程序并且自动打开 gcc 的 c99 标准呢……似乎我好像永远活在了 ANSI C 标准中无法自拔。

另外“使用C++编译”似乎是个不准确的说法呢……

用struct Matrix代替double[]的好处是不会和其他的double[]弄混,而且能够直接复制struct Matrix哦~

你确定?除非你显式写出复制的函数,否则是绝对不能这样“直接”复制的。

如果单纯考虑不弄混的话,可以直接定义一个类型,这样就不容易混了。
C 代码复制
  1. typedef double* MatElePr;


另外从你的回帖里我能看出你尽量把程序做得面向对象一点,于是想方设法去写 Constructor Destructor 等东西。其实我在群里是这样教叶子的:不许用 struct,不许有面向对象的思维,给我用纯指针弄。

看来我的反面向对象思维越来越严重了。不过,有关的高性能的数学库确实不会考虑这些封装呢。

点评

当然是因为小叶子啦/w\。  发表于 2016-9-18 00:05

评分

参与人数 1星屑 +128 收起 理由
zaiy2863 + 128 谢谢rb君……

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2016-9-18 08:43:31 | 显示全部楼层
本帖最后由 RyanBern 于 2016-9-18 09:00 编辑
寒冷魔王 发表于 2016-9-18 00:50
/w\感谢您的回复,看到小叶子这么认真所以激动的有些忘乎所以了呢~

关于


C 代码复制
  1. struct A1{
  2.   double data[5];
  3. };

C 代码复制
  1. struct A2{
  2.   double *data;
  3. };


下面两个有本质的区别啊,不要把它们当成一样的了喂!

C 代码复制
  1. printf("%d %d\n", sizeof(struct A1), sizeof(struct A2));


这样会看到很明显的不同。

概况来说,如果是动态分配的内存,是绝对不可以这样玩的。

C 代码复制
  1. struct A{
  2.   double *data;
  3. };
  4.  
  5. int main(int argc, char **argv){
  6.   struct A a1, a2;
  7.   /* suppose we call 'constructors' for a1 and a2 */
  8.   init(&a1, n); init(&a2, n);
  9.   a2 = a1; /* the problem occurs ! */
  10.   a1.data[0] = 1; /* then what is a2.data[0]? */
  11.   /* suppose we call 'destructors' for a1 and a2 */
  12.   finalize(&a1); finalize(&a2); /* core dumped !*/
  13.   return 0;
  14. }


写得有点仓促,但是我觉得意思应该表示清楚了。

点评

像这种指针共享的问题,C语言的话我真没思考过怎么处理,不过C++的话有引用计数智能指针shared_ptr啥的,所以一般不用担心。  发表于 2016-9-18 10:42
/w\ 我说的是“用struct Matrix代替double[]”啦 233  发表于 2016-9-18 10:34
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2016-11-17 19:31:29 | 显示全部楼层
糊了一个 PLU,里面只有 PLU 分解,没有解方程组的部分。

叶子看完了可以把解方程组的部分补上。不知道有没有 BUG,没仔细看过。

源码:
https://github.com/RyanBernX/math/tree/master/lu
说明书:
https://ryanbernx.github.io/math/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-18 18:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表