本人小菜鸟...
今儿上午在matlab中,绘制sin(1/t),其中t∈[-1,1]。这道题里边我发现了两个知识点。
我在这里取步长为0.001,一般的话你的代码会不会是这样的:
>> t=(-1:0.001:1);
>> plot(t,sin(1/t))
回车,会出现这样的错误提示:
??? Error using ==> mrdivide
Matrix dimensions must agree.
这是矩阵尺寸必须相符的意思,我们知道,matlab是在用矩阵的形式储存变量,运算变量,这就是matlab的特点,也是它的强大之处。我们都知道,在,matlab中,常用的计算包括:矩阵运算、向量运算。矩阵运算就是符合矩阵性质的运算就是线代里边我们学习过的那些,我们来说说向量运算,向量运算时matlab要求长度一致,即向量所包含的元素个数相同。乘除乘方时,须在运算符号之前加上“.”,表示对应位置数据运算。例如在matlab中 * (乘)就是用矩阵的乘法(属于矩阵运算)去求答案,所以要求乘号两边的变量要满足矩阵运算要求,比如c=a*b,a如果是3行2列,那b就必须是2行n列,得出的c就是个3行n列的矩阵。但有时我们要求a乘b矩阵是:a矩阵的每一个元素去乘以b矩阵的对应元素,得出的数做c的对应位置的元素。比如a=[1 2 3] b=[2 3 4] 则c=a.*b。
本题中的sin(1/t),也是这个道理,t是1行好多列(大约是2000,具体的多少我也不确定哈),你用一个1去除一个一行好多列的矩阵当然会出错,我们的意思是取t中每一个数的倒数,所以我们就必须在“/”后边加上一个“.”变成“./”从而实现对应位置的数据运算。
好了,明白了吧,嘿嘿。
好,那我们就把代码改成这样:
>> t=(-1:0.001:1);
>> plot(t,sin(1./t))
回车,我们发现,matlab并没有按照plot给出相应的绘图,还有一条Warning: Divide by zero. %被0区分
这是什么原因呢?
因为我们t的取值范围是[-1,1]中间包括0这个数值,而我们的sin(1/t)中,t显然是做了分母的,所以,加入 0/0 会出现divide by zero提示。那么这样的问题我们怎么处理呢,对于这种情况,我们经常用一种方法来避免,即把分母加上一个很小的值。matlab有一个自带的变量叫做eps,对于可能出现除0的式子里加上它就可以了,如0/ (0+eps)。
所以我们的代码应该是这个样子的:
>> t = (-1:0.001:1);
>> plot(t,sin(1./(t+eps)))
回车,我们的图线出来啦!
至此,解决!才发现只是这么个小测试就包含这么多的小知识,稍不留心就会犯错误呢,所以matlab,马虎不得哦...
小作业:Matlab 中,怎么描绘y=1/x的图像啊?
答案:x=linspace(0.01,100,100); y=1./x; plot(x,y)...
请发表评论