Amoiensis / Matrix_hub

A lib of Matrix operation for C language. (矩阵运算库--C语言)
Apache License 2.0
234 stars 53 forks source link

Matrix Inverse Problem #4

Open 1u2e opened 2 years ago

1u2e commented 2 years ago

哈喽,你好呀,最近发现了这个C语言矩阵运算库的宝库,进行了一些学习和测试。发现在矩阵求逆M_Inverse时,如果矩阵维度为1,会无法求出结果,麻烦您有空看一下。由于对您矩阵求逆运算原理不太看得懂,因此,打了个补丁如下,能正常求解: 1651886199(1)

Amoiensis commented 2 years ago

您好,谢谢您对于本项目的关注和使用!

  1. 确实存在这个问题,感谢您的发现,该问题将在下一版中得到修正(将同步完善方阵、可逆等报错检测等);
  2. 对了,这里矩阵计算,采用的是初等变换的方法求解;以求解A矩阵的逆为例(假定A可逆,不可逆情况在程序中有对应处理和报错提示):(其中Λ为对角矩阵) MommyTalk1652371159503 [注意] 此处采用均为初等变换,而初等变换中行、列变换具有很好的转换(对应)关系,从而可以实现求逆。
  3. 希望本项目能够帮助到您,也非常希望您能和我一起完善和丰富这个项目,欢迎提交代码完善功能、周边应用都是可以的。 [e.g.] 本人之前就使用前代版本,实现部分最优化算法等,Optimization-Algorithm(最优化算法):https://github.com/Amoiensis/Optimization-Algorithm
1u2e commented 2 years ago

感谢您的回复,最近也在您的矩阵运算库上进行一些学习和探索。在使用矩阵求逆功能时,发现内存管理有点小问题,造成了内存泄漏。初步debug下来,觉得是Etrans_4_Inverse函数free结构Etrans_struct时有问题,比如一个节点不为空,它的下一个节点为空,那么该节点就不能得到正确的free。因此,初步进行了如下修改: image

Amoiensis commented 2 years ago

您好,是的,确实存在这个内存泄漏的问题,感谢您的发现! 确实存在最后退出的时候,遗漏了最后一个结构体的释放,该问题将在下一版中得到修正。将采用您展示的这种修改方案(下一版的说明中将涉及),感谢您的关注和支持! 非常期待您发现和提出更多的相关问题和应用,让我们一起完善这个项目~

Amoiensis commented 2 years ago

你好,在2022.05.28 发布的Matrix_Hub v1.51 中,已经修正上述两个问题:

  1. 一维矩阵求逆报错;
  2. 初等变换结构体内存释放;.

处理方法为修正 “Etrans_4_Inverse” 函数,具体修改如下:

内存泄漏+一维矩阵求逆_修正

[补充] @1u2e 在v1.51版的更新中,特意@了你并进行了说明,感谢您的关注和支持; 非常期待您发现和提出更多的相关问题和应用,让我们一起完善这个项目~