关于m代码转py代码的总结:
一、将全部m代码转py后,输出曲线结果不对
原因分析:1、函数写错;2、两种语言求解精度不一样,产生的误差累积;
解决方法:
1、最开始的笨方法:逐行代码检查;——太浪费时间
确实发现一些语法的问题:主要有:
1.1 np.dot(a,b,c)=np.dot(a,b):矩阵连乘用@,两个矩阵相乘用@或np.dot;
1.2 在py中a=b表示a就是b,b就是a,a变化b也变化,应改为a=b.copy()
2、采样py调用m代码的方式:将部分函数写成py,部分函数仍然是m;通过调用可以检查部分py文件是否写错;(结果子函数没写错,最终结果就是不对)
此处采用py调用octave的形式,实现py调用m代码,主要在py里安装oct2py模块,该模块具体使用请参考官方文档:打开下面连接即可;
GitHub - blink1073/oct2py: Run MFiles from Python - GNU Octave to Python bridge
注意:此种调用方式需要安装octave软件(开源);
综上:是不是可以断定结果的差异是由两种语言之间求解精度不一样导致的呢?
笨人确实开始这么以为的,并且逐行调试py代码以及matlab代码并对比,发现两者之间确实存在求解精度的问题。。。。。。。
后来,细想,上面对比对象错了呀,应该对比的是py调octave的结果 和 octave本身的求解结果,通过对比发现,该两者精度一致,并不存在求解精度的问题;因此,还是本身程序写的不对;
最后,将正确的m代码,在octave下跑,octave和matlab求解结果一致(注意:存在精度差异,但不足以影响控制效果,可忽略);在正确代码基础上,逐行验证错误的py代码,一个循环不行就两个循环,终于发现错误了。。。。。是个小细节的问题。

