上学期学了一些matlab的知识,这学期再用时竟然发现已经忘得差不多了(┬_┬)

于是决定重新开始并将它们记录下来,也方便自己以后查漏补缺!

M文件编程

  • 脚本文件

    matlab有自己的命令行窗口,对于简单的命令,可以直接在命令行窗口输入,但随着命令行的增加或者命令本身复杂度的增加,再使用命令行就显得有些不便了,这时就需要脚本文件了。可以说,脚本文件是matlab指令集合的封装。

  • 函数文件  

    函数文件以function开始,end结束,这也是区别于脚本文件的地方。

     在function后面接着定义输出参数,函数名和输入参数,比如:          

             function [x,y,z] = math_count(a,b,c)    

    x,y,z是输出参数,以方框括起来,math_count是函数名,a,b,c是输入参数,以圆括号括起来。

     也可以没有参数,比如:      

           function printresults(x,y)    

    printresults是函数名,x和y是输入参数,没有输出参数。

  • 数据类型 

    matlab共有6中基本数据类型,分别是数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组。这里我们简单地介绍前四种。

  1. 数值类型           

     基本的数值类型包括整数类型和浮点数类型,额外的数值类型还有复数类型、无穷量(Inf)和非数值量(NaN),后面的两种算是matlab的特色类型,当然要记录一下啦!

    • 复数类型

      复数包括实部和虚部两部分,matlab中默认使用i和j作为复数的虚部标志。创建复数时,可以直接利用复数形式进行输入或使用函数complex。      

       z=+2i  %利用复数形式进行输入    

      输出结果:  

                            

       z=complex(,)  %利用complex(x,y)函数进行输入       

      输出结果:

                                   

       z=complex()%利用complex(x),如果x是实数,z=x+0i,如果x是复数,z=x

      输出结果:

            

    • 无穷量(Inf)和非数值量(NaN)

      Matlab中使用Inf和-Inf分别代表正无穷量和负无穷量,NaN代表非数值量。

     正负无穷量通常由于运算溢出而产生的结果,而非数值量是由于0/0或Inf/Inf非正常运算产生的结果,并且这两个NaN是不同的。

     Inf和NaN是Matlab中的特殊变量,除此之外,Matlab还有一些特殊的变量

    1. ans:系统默认的用作保存运算结果的变量名
    2. pi:圆周率
    3. eps:机器零阀值,Matlab中的最小数     

   2.逻辑类型

     Matlab把任何非0值当作为真,输出为1,把零当作假,输出为0.

     逻辑类型数据进行运算时需要用到关系操作符和逻辑运算符。

   对于Matlab的关系操作符,与c/c++基本相同,只有不等号有所不同,在c/c++中不等号为!=,而Matlab中不等号是~ =。

3.字符和字符串

  字符和字符串分别是字符数组和字符串数组中的文本。

  1. 字符数组是一个字符序列,如c='Hello Word!'
  2. 字符串数组是文本片段的容器,字符串数组提供一组用于将文本处理为数据的函数。从R2017a开始,字符串也可以使用双引号创建,如str="You are best!"
  3. string函数

    R2016b以后,可以使用字符串数组string代替字符数组。官方文档表明,还可以按照标准数组运算对字符串数组

   进行索引、重构和串联,还可以使用 + 运算符向字符串追加文本。(一切都在向c++看齐啊)

 4.函数句柄

  函数句柄是一种间接调用函数的方式,相当于对一个函数取别名。

  例如:如果你有一个函数为myfunction,现在给定语句   

           f=@myfunction   %f是一个句柄,可以通过f调用myfunction  

     可以通过函数句柄构造匿名函数或指定回调函数,也可以函数句柄将一个函数传递给另一个函数,或者从主函数内部调用局部函数

    下面给出通过函数句柄间接调用函数的例子:

    在命令行窗口输入:     

           Handle=@sin;  %也可以自己建立函数,通过函数句柄间接调用
          >> x=:pi/:pi; %通过冒号创建一维数组,0是第一个数,每次以pi/4为单位递增,pi是最后一个数
          >> y=Handle(x)

  输出结果:

            

  有同学可能会问,直接调用不也是可以吗,的确可以,但函数句柄有更多的优点,列举几个

  1. 提高运行速度。matlab对函数的调用每次都要搜索所有的路径,使用函数句柄可以减少搜索,提高运行速度。
  2. 使用更方便。比如说,我在这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝          过来。因为你创建的函数句柄中已经包含了路径。
  • 控制流

    Matlab的控制流也与c/c++大体相同,唯一要注意的是每个条件都有相应的end关键字。

    • 顺序结构
    • 选择结构
      • if—end
      • if—else—end
      • if—elseif—else—end  

    示例:

    新建脚本文件,保存为exe1_1    

            x=input('enter''x'':');%input函数返回你输入的整数,提示信息用''括起来,如果想要输出单引号,两个单引号'' ''即可
            if(x>)
              y=;
            elseif(x==)
             y=;
            else y=-;
            end      %不要忘记加end,Matlab不会自动补全end,最好一开始就写下来,养成良好的编程习惯至关重要
            disp(y)    %disp作为输出函数

  在命令行窗口调用exe1_1,输入-5

  得到结果:

           

  • switch—case结构  
  • 注意Matlab与c/c++语言的switch-case结构不一样:只要条件满足,立即返回,这也是为什么不用加break的原因。    

  示例:新建脚本文件,保存为ex1_2     

             month=;
          switch month
       case {,,}
      season='spring' 
       case {,,}
      season='summer'
       case {,,}
      season='autumn'
       otherwise
      season='winter'
      end

  得到结果:

       

  注意

  1.M文件的搜索路径必须与当前路径一致,否则运行会出错,搜索路径即保存M文件的位置。可以直接修改当前路径与搜索路径一致,也可以添加搜索路径,这样就一劳永逸了。  

          

  2.如果遇到不认识的函数,可以利用help/doc命令在命令行查找,格式为help/doc function,function为函数名,养成查阅文档的习惯很重要!         

  •  循环结构   

    • while,for语句
    • break、continue、return ——行尾可以不用加分号   

      每一个关键字后面都要有与之对应的end关键字

 范例:

    使用0.618法(黄金分割法)极小化f(t)=exp(-t)+exp(t),区间为[-1,1]。(即逼近函数在已知区间的极小值,找到对应的t

   0.618法主要思想:

       0.618法在给定区间[a,b]内适当插入两点a1,a2,并计算其函数值。

       a1,a2将区间分成三段,通过函数值大小的比较,删去其中一段,使搜索区间得以缩小,

       然后再在保留下来的区间上作同样的处理,如此迭代下去,从而得到极小点的数值近似解。

    0.618法主要步骤:

     1.在区间[a,b]内分别按照0.618和0.382的比例处取点a1 ,a2, 把[a,b]分为三段。 

     2.如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+0.618*(b-a)   

    3.如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=a+0.382*(b-a)

    4.如果满足迭代条件或者超出给定迭代次数,程序终止,否则继续运行下去。    

新建名为fai.m的函数和zero_soe.m的函数

                   function z= fai(t)
              %  fai函数
              % 给定函数
              z=*exp(-t)+*exp(t);
             end     
              function [k] = zero_soe(a0,b0,iter,tol)
            %UNTITLED3 精确线性搜索之0.618法
            % a0,b0分别代表左端点,右端点
             % iter代表给定的迭代次数
            % tol代表误差限
            m=a0+0.382*(b0-a0); %试探点lameda0
            n=a0+0.618*(b0-a0); %试探点u0
            ym=fai(m);
            yn=fai(n);
            count=; %现有的迭代次数
            while(count<iter)
             if(ym>yn)
             if(b0-m<=tol)
             k=n;
             return;
            else
             a0=m;
             m=n;
             ym=yn;
             n=a0+0.618*(b0-a0);
             yn=fai(n);
             count=count+;
            end
             else
             if(n-a0<=tol)
             k=m;
            return;
             else
              b0=n;
             n=m;
            yn=ym;
             m=a0+0.382*(b0-a0);
            ym=fai(m);
             count=count+;
            end
            end
            end
            if(count>=iter)
            disp('迭代次数超过给定次数!') ;
            end
            end

 得到结果:

      

 通过求导可知函数的极小值对应的t等于0,可知极小化的结果是正确的。

(皆大欢喜[]~( ̄▽ ̄)~*)

常用的函数命令

  • 输入命令  
  1. clc:清除命令行窗口
  2. clf :即clear figure,清楚图形窗口
  3. clear:清除工作区的变量,clear all是清除全部变量
  4. format:设置命令行窗口显示格式
  5. iskeyword:确认输入是否为关键字,如果没有输入,则输出全部的关键字
  6. who:显示当前变量名列表
  7. whos:显示变量详细列表
  8. which:查看关键字的路径  
  • 帮助          
  1. help:命令行窗口中函数的帮助
  2. doc:帮助浏览器中的参考页
  3. demo:帮助浏览器中查看示例
  4. lookfor:在所有帮助条目中查看关键字

        

常用快捷键  

  • Ctrl+R :注释(对多行有效)
  • Ctrl+T :取消注释(对多行注释有效) 
  • Ctrl+Z :取消上一次操作  
  • Ctrl+I     :自动缩进(对多行有效)
  • Ctrl+[     :减少缩进(对多行有效)
  • Ctrl+]     :增加缩进(对多行有效)  
  • ↑光标键 :选择最近的一次命令  
  • Esc:清除当前行

参考资料:

  

还没有写完,以后慢慢补吧~

  

Matlab 编程入门(一):编程基础的更多相关文章

  1. Scala编程入门---函数式编程之集合操作

    集合的函数式编程: 实战常用: //map案例实战:为List中的每个元素都添加一个前缀. List("leo","Jen","peter" ...

  2. Scala编程入门---函数式编程

    高阶函数 Scala中,由于函数时一等公民,因此可以直接将某个函数传入其他函数,作为参数.这个功能是极其强大的,也是Java这种面向对象的编程语言所不具备的. 接收其他函数作为函数参数的函数,也被称作 ...

  3. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  4. 最基础的Python的socket编程入门教程

    最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...

  5. [转] linux操作系统下c语言编程入门--基础知识

    点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译        2. Makefile的编写        3. 程序库 ...

  6. Python编程入门(第3版)|百度网盘免费下载|零基础入门学习资料

    百度网盘免费下载:Python编程入门(第3版) 提取码:rsd7 目录  · · · · · · 第1章 编程简介 11.1 Python语言 21.2 Python适合用于做什么 31.3 程序员 ...

  7. 【Linux教程】Linux系统零基础编程入门,想当大神?这些你都要学

    ✍ 文件和文件系统 文件是Linux系统中最重要的抽象,大多数情况下你可以把linux系统中的任何东西都理解为文件,很多的交互操作其实都是通过文件的读写来实现的. 文件描述符 在Linux内核中,文件 ...

  8. 函数响应式编程(FRP)从入门到”放弃”——基础概念篇

    前言 研究ReactiveCocoa一段时间了,是时候总结一下学到的一些知识了. 一.函数响应式编程 说道函数响应式编程,就不得不提到函数式编程,它们俩到底有什么关系呢?今天我们就详细的解析一下他们的 ...

  9. Matlab与.NET混合编程解决人脸识别问题

    原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...

随机推荐

  1. C++类继承--构造函数时先构造基类

    以下说明继承类函数构造时,先构造基类: 析构基类时,若没加上virtual,只析构基类,不析构派生类: 析构派生类时,同时会析构基类: 1. 基类析构函数有virtual #include <s ...

  2. 139.00.007 Git学习-Cheat Sheet

    @(139 - Environment Settings | 环境配置) Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了. 友情附赠国外网 ...

  3. Netty相关面试题

    1.BIO.NIO和AIO的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大. 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源. N ...

  4. csdn中使用Git的一些注意问题

    1.生成的密钥必须在当前用户文档目录下的.ssh文件夹.----否则不行 2.生成的密钥文件命名---必须命名为id_ras文件----否则不行

  5. SQL Server ->> THROW字句对比RAISERROR子句

    SQL Server 2012开始引入了THROW字句用于替代从SQL Server开始沿用至今的RAISERROR.既然作用相同,都是在TRY... CATCH代码块后不抓错误然后抛出错误,它们之间 ...

  6. React - React Developer Tools开发者工具的安装与使用(Chrome调试插件)

    原文地址:http://www.cnplugins.com/zhuanti/how-to-use-react-tools.html 虽然我们曾经在React开发者工具的基础介绍里面有概括性的介绍过Re ...

  7. Day04——Python模块

    一.模块简介 模块是实现了某个功能的代码集合,比如几个.py文件可以组成代码集合即模块.其中常见的模块有os模块(系统相关),file模块(文件操作相关) 模块主要分三类: 自定义模块 :所谓自定义模 ...

  8. python 字符编码、格式化

      数据类型-布尔值一个布尔值只有True.False两种值,要么是True,要么是False 布尔值可以用and.or和not运算 空值是Python里一个特殊的值,用None表示 Python对b ...

  9. OKEX期现对冲JS源代码分享(基于Fmz, Botvs实现)

    什么是期现对冲?此策略风险和收益如何?期现对冲是利用期货和现货之间存在的差价进行套利.因为在交割日的时候,期货会按现货价格成交,当期货和现货一旦出现差价时,就可以通过做空期货做多现货(或做多期货卖出现 ...

  10. 通讯聊天工具(pingin)

    pidgin需要添加插件才可以进行QQ,msn,facebook等聊天 sudo apt-get install pidgin(ubuntu 可以直接进行安装) sudo add-apt-reposi ...