其他分享
首页 > 其他分享> > Matlab新老版本的差别问题——CAGD课程设计

Matlab新老版本的差别问题——CAGD课程设计

作者:互联网

文章背景

        CAGD,全名——计算机辅助几何设计,这是我们专业开的一门课。

        然后周一周二我们开始了为期两天该课程的课设——航空产品复杂曲面建模与优化综合实验(PS:名字听上去高级,但实际上就是做10道关于曲线曲面的matlab题目,而前面建模我想应该指的是我们上机玩CATIA和Matlab的总的合集吧)。

        这个课设主要就是照着我们的课本在matlab上码代码(对的,没错,这就是课设)。然后因为某些原因我是咱学院楼机房的老主顾,很多东西都在这放着,包括笔记本电脑。而我的电脑Matlab版本是R2021a,机房其他电脑的Matlab版本是R2016a。于是乎在编写这10个题的过程中我就发现了两个小小的问题,想记录下来同时也是分享给大家,这就是这篇文章的由来。

进入正题

那么我究竟发现了哪两个问题呢?接下来给各位一一道来。

1、老版本函数内部不允许函数定义,而新版本可以。

这是机房电脑出现的问题(R2016版本)

 报错的原因是,文件名默认存为了function里的内容,但是在整个函数中却调用了这个函数

        从这个报错的字面意思来看,我们只需要将脚本文件名更改成其他形式,而不是function里面的函数的形式,即将RotationMatrix更改为其他名称。那么我们来尝试一下:

        可以看到,仍然会提示报错。那么原因是什么呢?原因在于,老版本的Matlab,自定义函数必须单独写在一个脚本文件中。故我们将RotationMatrix函数重新存放至另一个脚本文件里面,再运行主函数,问题就解决啦!

 2、关于矩阵计算的维度问题(这里是在矩阵点乘(.*)与点除(./)计算中发现的问题)

         个人认为,这个问题呢,虽然老版本报错,而新版本不会报错,但我觉得这或许不是一个很好的更新。因为我认为这是原理上的问题。不同维度矩阵本身就是不能点乘(点除)的。下面来看例子。首先打开机房的电脑,运行R2016版本的MATLAB。

        问题就是在这个式子上发现的。这个式子在我的电脑上运行毫无问题,但在机房的电脑上出现了报错。 

         矩阵维度不一致。原因其实是omega矩阵是1*3的矩阵,而V是2*3的矩阵。这两个矩阵确实是不能直接进行点乘(.*)计算的。

              

         同样的U*N*(omega.*V)这两个矩阵维度也是不同的(U*N*omega)(这里就不再展示了)。

所以,正确的做法是,将这个式子分开计算改写一下:

然后这个题的结果就正确了:

         那么,是什么问题导致这种情况的发生呢? 现在来打开我的电脑,运行R2021版本的Matlab。我们就按照原先的式子r = (U*N*(omega.*V))./(U*N*omega),来运行该题目。

        竟然运行成功了?这违背了矩阵的计算原理啊!所以,我们再来看看具体的计算,看看问题出在哪。

 

        我们惊奇的发现,在这里,不同维度的矩阵竟然直接能计算出来。并且计算的规则是,omega矩阵的每一列去与V矩阵每一行的两个数依次相乘。但是,这违背了矩阵的计算原理。

所以我认为Matlab这里的更新虽然智能弥补了用户的错误,但这不是一个好更新。

结语

        整篇文章就是我在整个课设过程中发现的两个由于Matlab版本不同产生的问题了。Matlab作为一个强大的工业软件,确实给予了我们极大的帮助。最后,希望有志同道合的友友能够多多交流哇!本人小菜鸡一枚,欢迎大佬指点!

        另外,对我们这个课设内容感兴趣的友友可以私聊找我拿相关资料哇!主要就是关于贝塞尔曲线、B样条曲线、NURBS曲线等各种曲线曲面问题的题目。欢迎大家多多交流哇!

 

 

 

 

标签:课程设计,课设,矩阵,报错,Matlab,版本,omega,CAGD
来源: https://blog.csdn.net/weixin_47723114/article/details/122197963