一堆matlab文件,matlab笔记:久未使用之后踩的一堆坑

本周科学计算引论结课了,就花了一整天时间把要求的实验报告写了。根据考核说明,算法可以使用各种工具、语言来实现,但由于这门课程的上机实验统一使用的是matlab,再加上我上一次使用matlab大量实践是在劳动节的数学建模华中赛了,还是很有必要重拾起来再熟悉一下。于是乎,一大波坑就等着我去填了。

References:

报错:未找到具有匹配签名的构造函数

我编写了一个二分法的函数求解非线性方程,然而当我调用的时候,却遇到报错:“未找到具有匹配签名的构造函数”,这是怎么回事呢?

我们来冷静分析一下。

b6e7efd0393e58c75b160853e135fecf.png

识破!

原来是我定义的函数名为half,而half也是matlab自带的函数之一,可以使用help functionname查看函数具体的使用方法与功能。

99f4b69edfac7bdb5193cdeb6f5f04b7.png

调用时默认优先使用自带的函数,因此修改函数名为matlab自带函数之外的即可。

报错:矩阵维度必须一致

这是我在画图时遇到的一个问题,首先先补充一下matlab中作函数图像的方法,如下图所示。

df61755f37e59abf439b88f8bf43de60.png

当我尝试使用上述方法作简单的函数图像时,并没有报错,而当我想要作出我实验所需函数(如下所示)的图像时,却出现了“矩阵维度必须一致”的错误信息。1y = asin(1 / (1.878 + 0.75 * cos(x)))

查阅相关资料,我才发现是乘除的时候出现的问题,为此我将其中的除/修改为乘*,并用.^代替^作乘方计算,即将原函数式修改为:1y = asin(1 * (1.878 + 0.75 * cos(x)) .^ (-1))

这样,问题就解决了。

这里我想强调一下在matlab中^与.^的区别:.^是点乘,而^是乘法。

直接用^进行乘法的话,在这里即矩阵乘法,也就是说,必须满足前一个矩阵的列数等于后一个矩阵的行数。

而使用.^点乘操作,是使每一个元素相乘,也就是向量或者矩阵中对应元素相乘,也很好记忆,加个点就是点乘。

函数输出只有一个

这是一个很愚蠢的问题,显然我好久没用了,因为matlab不必使用return返回结果,在函数声明的第一句就确定了返回值的数量和顺序。因此在调用函数的时候,必须也提供对应的变量去接收返回值,否则只能得到第一个返回的元素。

使用diff求导不是导数值

用惯了pytorch,总想着能够自动求导,一查matlab还真有这么一个函数,即diff函数。然而,事实证明它不是我想要的。

我们可以在命令行中使用这一个函数:声明变量x:syms x。它代表着声明符号变量x,只有声明了符号变量才可以进行符号运算,包括求导。

定义一个需要求导的函数:f(x) = sin(x) + x ^ 2。

使用diff函数求导:diff(f(x))。也可以对已经定义好的m文件中的函数直接求导。

这里,我们会得到ans为2*x + cos(x)。

如果想pretty一些,可以使用pretty函数将结果转化成书面格式:pretty(ans)。

然而,当我代入不同的具体数值想得到函数的导数值的时候,发现输出的结果却是0。

使用help查阅diff函数的用法,得到的说明是:1

2

3

4此MATLAB函数计算沿大小不等于1的第一个数组维度的X相邻元素之间的差分:

Y = diff(X)

Y = diff(X,n)

Y = diff(X,n,dim)

原来这个函数的主要用法是对向量或者矩阵中的元素进行差分计算,当用它来求导时,得到的只是一个表达式,且函数一但复杂,得到的就是一个参数众多的逼近格式。

唉,总而言之,还是老老实实地拿起笔自己算出导函数吧。都用矩阵实验室(matlab)了,手动求个导还是得会的呀。

角度制弧度制互换

无论使用计算器还是编程计算,这都是一个需要注意的点,matlab默认使用的是弧度制,在计算出结果之后,可以使用rad2deg函数进行转换。

同样的,我推测角度制转弧度制的函数名为deg2rad,一试,果不其然。这个函数还是挺好记的,英文里有许多同音词与字符的妙用,比如这里的to和2的two,还有at和@,感觉既方便又高级。

保留更多位数

matlab默认是保留4位有效数字,为了提升计算精度,可以使用format long来增加计算过程中保留的位数。

常用操作

难得开一篇写matlab使用的博文,那就在这补上几个我记忆中的较为常用的命令或操作。Ctrl+C终止操作。这跟许多地方都一样,在matlab中,Ctrl+C平时可以用来粘贴剪切板上的内容,而在程序运行时,可以使用它来终止运行,这在死循环的时候非常有用。

clc清空命令行。

bench测试性能。这其实不是一个很常用的命令,可以跟朋友输这个命令看看自己电脑的性能,下图是我的结果。需要注意的是,笔记本电脑电池使用模式的不同对这个排名影响还是挺大的,如果想让排名高一些的话,请确保电池开在最佳性能的模式。另外,不同的电脑的比较对象可能会不一样,比如学校的台式机和我的笔记本在这里比较的对象就不一样。

3a53c68cb69523c12818eb0912105348.png 常用的还有许多,以后在使用中不断增加,先在这占个位。

最近在b站看到matlab的几个有趣彩蛋,挺有意思,感兴趣可以去瞧瞧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值