Open tkpang opened 10 months ago
非常感谢,您对与本项目的使用和支持!
关于数据类型float的问题,将下一版更新中得到具体解决,如果可以欢迎您提交代码贡献,Debug辛苦了(= v =)不好意思。亦将在下个版本更新中鸣谢。
是的这个项目也是主要单片机上轻量、易用,方便大家后续开发,欢迎一起维护和贡献这个项目。
如果有遇到任何其他问题或者想要交流的,也非常欢迎直接邮件给我交流哇~ (mail: Amoiensis@outlook.com)。
祝工作学习顺利
具体是哪有问题,为啥我改成float运算正常的
具体是哪有问题,为啥我改成float运算正常的
你好,之前在写的时候应该是避免出现问题的,但具体还没仔细测试,如果有问题,将在这个帖子内进行回复。您那边是修改为float 使用是可以的不?
如果有遇到任何其他问题,欢迎直接邮件给我~ (mail: Amoiensis@outlook.com)。
/ Num Type of Matrix - 矩阵数值类型/ #define MATRIX_TYPE double #define TRANS_TYPE double
这里改成float会出大麻烦,求逆全错。这是我踩的坑,反馈一下,希望标注在注释里。 (背景:我在开发一个单片机项目,希望存储空间小,自己改成了float,结果debug de了三天哈哈哈,希望后面的人看到不要踩坑。)
最后感谢作者提供的轻量矩阵运算库,虽然很多地方不完美,但是纯c轻量在单片机领域真的很有用。
@tkpang 这边可以把具体出现的问题截图或者详述一下吗,这样我们可以更好定位问题,如有问题加快后续完善修改。
具体是哪有问题,为啥我改成float运算正常的
你好,之前在写的时候应该是避免出现问题的,但具体还没仔细测试,如果有问题,将在这个帖子内进行回复。您那边是修改为float 使用是可以的不?
如果有遇到任何其他问题,欢迎直接邮件给我~ (mail: Amoiensis@outlook.com)。
我应该是把程序里出现的double都改成了float,求逆没碰到问题
float类型应该是精度问题会导致求逆有误差,行列初等变换完成后,矩阵应该为对角阵,但如果有一个对角线元素特别小,比如2e-5这种,那和它同行元素因为精度只能到1e-6,就会导致计算误差,这里给出一个测试矩阵:
MATRIX_TYPE array_num[9] = {7.37792587, 3.00000000, 6.00000000,
3.00000000, 5.37792587, 1.00000000,
6.00000000, 1.00000000, 5.37792587};
Matrix *test_3 = Matrix_gen(3, 3, array_num);
M_print(test_3, "test_3");
Matrix *test_5 = M_Inverse(test_3);
M_print(test_5, "test_5");
Matrix *test_7 = M_mul(test_5,test_3);
M_print(test_7,"test_7");
此外float类型确实会导致比较大的求逆误差,建议还是用double类型
/ Num Type of Matrix - 矩阵数值类型/
define MATRIX_TYPE double
define TRANS_TYPE double
这里改成float会出大麻烦,求逆全错。这是我踩的坑,反馈一下,希望标注在注释里。 (背景:我在开发一个单片机项目,希望存储空间小,自己改成了float,结果debug de了三天哈哈哈,希望后面的人看到不要踩坑。)
最后感谢作者提供的轻量矩阵运算库,虽然很多地方不完美,但是纯c轻量在单片机领域真的很有用。