zoukankan      html  css  js  c++  java
  • matlab中由绘制sin(1/t),其中t∈[1,1]想到的

      

      本人小菜鸟...

      今儿上午在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)...

     

  • 相关阅读:
    app应用的下载
    fiddler https 抓包
    Scrapy 框架基础入门
    MongoDB在Windows下安装配置
    Wget 的基础使用
    MongoDB C#驱动中Query几个方法
    Redis数据库2
    Linux下软件安装的四种方式
    Linux命令-4类
    Redis数据库1
  • 原文地址:https://www.cnblogs.com/steararre/p/2495844.html
Copyright © 2011-2022 走看看