QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1912|回复: 0
打印 上一主题 下一主题

【美赛必备】 MATLAB 入门教程七篇:点乘和给x轴赋值

[复制链接]
字体大小: 正常 放大

2983

主题

142

听众

9762

积分

升级  95.24%

  • TA的每日心情
    开心
    2017-1-9 14:34
  • 签到天数: 272 天

    [LV.8]以坛为家I

    自我介绍
    吃吃吃

    社区QQ达人

    群组乐考无忧

    群组2014国赛优秀论文解析

    群组2016美赛冲刺培训

    群组2016国赛优秀论文解析

    群组2016国赛备战群组

    跳转到指定楼层
    1#
    发表于 2015-12-12 09:34 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    MATLAB里最核心的内容就是数组和数组运算,在MATLAB里矩阵和数组的差别不大,矩阵作为一种变换或映射算子的体现,在数学上有着严格的运算规则。数组不仅承担matlab软件赋给它的一些运算规则,而且也实现矩阵运算的功能。

    当你需要进行一般的(就像教科书讲的)矩阵(向量)运算时就直接用 *(^)。

    当你需要把两(矩阵)向量 的对应位置相乘(求幂) 那就用 .*(.^)。


    我们知道1*1的矩阵我们叫标量,就是一个数,标量和标量的运算直接用我们熟悉的运算符号就可以了。但是,矩阵的运算,包括向量,标量,矩阵之间的运算有所谓叉乘和点乘之分,比如我们定义了
    • t=1:10;

    复制代码
    我们想计算相应的2t的所有值,就必须用到点乘,符号是“.*”,即:
    • 2.*t

    复制代码
    相应的,还有点除,点乘方等运算,如果涉及到这样的运算,这个“点”符号一定一定不要忘掉,由于”.”符号过于微小,如果你的程序写的很大,这个错误将很难被发现。

    A*B(为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩阵B的行数)

    A.*B(符号数组的乘法,为按参量A与B对应的分量进行相乘。A与B必须为同型阵列,或至少有一个为标量)

    为什么要在sin(1./x)?

    句柄是对图像的标识,MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄。句柄是图形对象的唯一标识符,不同对象的句柄不可能重复和混淆。我们还是下面用简单的例子说明一下!!~~
    • A=[1 2 3;4 5 6;7 8 9];B=A;A*B
    • ans =
    •     30    36    42    66    81    96   102   126   150

    复制代码
    • >> B/A
    • ans =
    •      1     0     0     0     1     0     0     0     1%矩阵这样做是不行的!!!

    复制代码
    • >> A.*B
    • ans =
    •      1     4     9    16    25    36    49    64    81
    • >> B./A
    • ans =
    •      1     1     1     1     1     1     1     1     1

    复制代码
    第二个例子如果有矩阵
    • >> a=[1 2 3];b=[4 5 6];c=[7 8 9];>> a*b??? Error using ==> mtimesInner matrix dimensions must agree.%这个是不行的!!

    复制代码
    • >> a.*b
    • ans =
    •      4    10    18
    • >> a.*c
    • ans =
    •      7    16    27

    复制代码
    • >> a/b
    • ans =
    •       0.41558
    • >> a/c
    • ans =
    •       0.25773
    • %实际上是一个拟合的结果:a=kb,a=kc,k的一个拟合值。

    复制代码
    • >> a./b
    • ans =
    •          0.25          0.4          0.5
    • >> a./c
    • ans =
    •       0.14286         0.25      0.33333

    复制代码
    所以,点乘或者点除都是一对一的乘或者除!!

    特别注意:对于Ax=b的问题,如果A,b已知,那么,x=A\b(x等于A左除b)

    • >> A=[1 2;3 4;5 6];B=[3; 7; 11];>> x=A\B
    • x =
    •             1            1
    • >> A*x
    • ans =
    •             3            7           11

    复制代码
    所以,这种类似的情况,都要是“左除\”来做!

    对于点乘,点除给出了详细的说明,我们继续说说另一个。上回我们在绘图那篇里没有对x轴取值没有详细的说明因为取值这也是一个技巧。在matlab里有二个命令实现,下面介绍一下。

    linspace(x1,x2,N)
    linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。若缺省N,默认点数为100。在matlab的命令窗口下输入help linspace或者doc linspace可以获得该函数的帮助信息。

    给点小建议:
    x=first:increment:last
    创建从first开始,加增量(increment)计数,到last结束的行向量x

    x=linspace(first,last,n)
    创建从first开始,到last结束,有n个元素的行向量x

    以前这是我总是分不清这俩个地方,也总出现错误。两者有什么不同吗?为什么我运行下面两个命令执行的结果是一样的?但是有时候做程序两者不能互换呢?
    • >> x=-2:1:2y=linspace (-2,2,5)
    • x =
    •     -2    -1     0     1     2
    • y =
    •     -2    -1     0     1     2

    复制代码
    有区别的,比如:你要在-1到1之间取400个点,用步长法很难办到,但用linspace就很容易。 其实它们可以互换的,n=[(last-first)+1]/increment,如果你将这两个数换成刚才比例的话,肯定产生的点是相同的啦,呵呵!还是有区别的,如果你知道增量就用步长法,如果不知道增量又懒得算的话,就用linspace。

    logspace(a,b,n)
    其中a、b、n分别表示开始值、结束值、元素个数。生成从10的a次方到10的b次方之间按对数等分的n个元素的行向量。n如果省略,则默认值为50。在matlab的命令窗口中输入help logspace或者doc logspace可以获得更多帮助信息。
    就是将1到2 将的数划成5分1 1.25 1.50 1.75 2 然后取10为底。
    • logspace(1,2,5)
    • ans =
    •            10       17.783       31.623       56.234          100

    复制代码


    52007fce47c47a34b08665dace2a4cca.jpg (95.58 KB, 下载次数: 177)

    52007fce47c47a34b08665dace2a4cca.jpg

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-7-26 19:51 , Processed in 0.278327 second(s), 54 queries .

    回顶部