Matlab也可以编程,可存为以.m为后缀的文件,称为M文件。M文件有两种:函数和脚本。

函数程序

点击新建图标,在打开的窗口里输入如下内容:

function y = myfunc (x)
y = 2*x.^2 - 3*x + 1;

将文件保存为myfunc.m,保存在当前目录下。这个文件就可以直接在命令窗口使用了,用法如Matlab内置函数,如在命令窗口输入如下内容:

>> x = -2:.1:2;
>> y = myfunc(x);
>> plot(x,y)

这里函数文件和命令窗口都用了变量x和y,这只是巧合,其实只有文件名才是重要的,函数调用的变量名不重要,比如完全可以把上述文件写为:

function nonsense = yourfunc ( inputvector )
nonsense = 2* inputvector .^2 - 3* inputvector + 1;

函数程序结构都类似此程序。函数程序基本要素为:

  • 开头必须是关键词 function
  • 必须有输入输出。
  • 输出变量、函数名和输入变量必须出现在第一行。
  • 输出变量必须要被赋值。

函数可以有多个输入,用逗号隔开,如:

function y = myfunc2d (x,p)
y = 2*x.^p - 3*x + 1;

函数可以有多个输出,放在一个向量里面,如:

function [x2 x3 x4] = mypowers (x)
x2 = x .^2;
x3 = x .^3;
x4 = x .^4;

将此文件保存为mypowers.m,在命令窗口里如下命令画图:

>> x = -1:.1:1
>> [x2 x3 x4] = mypowers(x);
>> plot(x,x,’black’,x,x2,’blue’,x,x3,’green’,x,x4,’red’)

脚本程序

脚本程序与函数程序有诸多不同,如:

  • 无输入输出
  • 可以改变当前工作区中的变量

前面的图有可以由如下脚本程序实现:

x2 = x .^2;
x3 = x .^3;
x4 = x .^4;
plot (x,x,’black ’,x,x2 ,’blue ’,x,x3 ,’green ’,x,x4 ,’red ’)

将此程序输入到一个新文件里,并保存为mygraphs.m。在命令窗口输入:

>> x = -1:.1:1
>> mygraphs

这里程序需要用到命令窗口里定义的变量x。命令窗口的变量名与脚本文件里的变量名必须一致。

许多人用脚本程序做需要输入多行命令的常规计算,因为比较容易修正错误。

程序注释

当程序行数比较多时,加入注释非常重要,以便能让别人看懂自己的程序,也为了自己备忘。不仅要在程序首部加注释,程序的各个部分也应该加必要的注释。在Matlab里,注释都放在符号%后面。

对于函数程序,至少注释函数的目的、输入输出变量。现在我们把前面写的函数程序加上注释:

function y = myfunc (x)
% Computes the function 2x^2 -3x +1
% Input : x -- a number or vector ;
% for a vector the computation is elementwise
% Output : y -- a number or vector of the same size as x
y = 2*x .^2 - 3*x + 1;

对于脚本程序,程序文件首先注释下文件名会非常方便,如:

% mygraphs
% plots the graphs of x, x^2, x^3, and x^4
% on the interval [ -1 ,1]
% fix the domain and evaluation points
x = -1:.1:1;
% calculate powers
% x1 is just x
x2 = x .^2;
x3 = x .^3;
x4 = x .^4;
% plot each of the graphs
plot (x,x,’+-’,x,x2 ,’x-’,x,x3 ,’o-’,x,x4 ,’--’)

文件存为mygraphs.m,用help命令会输出第一个注释块,如输入命令:

>> help mygraphs

命令窗口会输出

  mygraphs
plots the graphs of x, x^2, x^3, and x^4
on the interval [ -1 ,1]
fix the domain and evaluation points

练习

1 写一个带有必要注释的函数程序,计算函数\(x^2e^{-x^2}\),并在区间[-5,5]上画出函数图形。

2 写一个带有必要注释的脚本程序,画出函数\(\sin x\),\(\sin 2x\),\(\sin 3x\),\(\sin 4x\),\(\sin 5x\),\(\sin 6x\) 在区间\([0,2\pi]\)上的图形。

Todd's Matlab讲义第2讲:Matlab 编程的更多相关文章

  1. Todd's Matlab讲义第4讲:控制误差和条件语句

    误差和残量 数值求解方程\(f(x)=0\)的根,有多种方法测算结果的近似程度.最直接的方法是计算误差.第\(n\)步迭代结果与真值\(x^\*\)的差即为第\(n\)步迭代的误差: \begin{e ...

  2. Todd's Matlab讲义第1讲:向量,函数和作图

    向量 Matlab 中最基本的对象是矩阵,向量是特殊的矩阵.行向量是\(1\times n\)矩阵,列向量是\(m\times 1\)矩阵.输入如下行向量: >> v=[0 1 2 3] ...

  3. Todd's Matlab讲义第5讲:二分法和找根

    二分法和if ... else ... end 语句 先回顾一下二分法.要求方程\(f(x)=0\)的根.假设\(c = f(a) < 0\)和\(d = f(b) > 0\),如果\(f ...

  4. Todd's Matlab讲义第3讲:牛顿法和for循环

    方程数值求解 下面几讲,我们将聚集如下方程的解法: \begin{equation} f(x)=0 \tag{3.1}\label{3.1} \end{equation} 在微积分课程中,我们知道,许 ...

  5. Todd's Matlab讲义第6讲:割线法

    割线法 割线法求解方程\(f(x)=0\)的根需要两个接近真实根\(x^\*\)的初值\(x_0\)和\(x_1\),于是得到函数\(f(x)\)上两个点\((x_0,y_0=f(x_0))\)和\( ...

  6. matlab提速技巧(自matlab帮助文件)

    matlab提速技巧(自matlab帮助文件) 1.首先要学会用profiler.1.1. 打开profiler.To open the Profiler, select View -> Pro ...

  7. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  8. Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序

    Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...

  9. MFC控件第一讲.DC编程

    MFC控件第一讲.DC编程 一丶简介 什么是DC,DC有什么用. DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的.  DC可以简单理解为.没一个窗口程序都有一块内存 ...

随机推荐

  1. 20145208《Java程序设计》第3周学习总结

    20145208 <Java程序设计>第3周学习总结 教材学习内容总结 认识对象 类类型 在第三章的学习中,我了解到JAVA可区分为基本类型和类类型两种类型,在上周的学习中我学习了JAVA ...

  2. DLL函数中内存分配及释放的问题

    DLL函数中内存分配及释放的问题 最近一直在写DLL,遇到了一些比较难缠的问题,不过目前基本都解决了.主要是一些内存分配引起问题,既有大家经常遇到的现象也有特殊的 情况,这里总结一下,做为资料. 错误 ...

  3. ubuntu 安装编译nginx,并实现HLS推送,,可以实现摄像头直播

    1.安装nginx的依赖包  zlib pcre openssl(可以源码安装也可以直接系统安装) sudo apt-get install libpcre3 libpcre3-dev zlib1g- ...

  4. mysql慢查询分析工作pt-query-digest的使用

    一.简单安装 wget percona.com/get/pt-query-digest chmoe u+x pt-query-digest 二.简单使用 ./pt-query-digest /var/ ...

  5. SQL脚本循环修改数据库字段类型

    数据库在设计的时候也许考虑不全面,导致某些字段类型不太准确.比如设计的时候是varchar(1024),但是实际使用的时候却发现太小了,装不下,于是需要修改字段类型为ntext什么的. 我最近就遇到了 ...

  6. [Aaronyang] 写给自己的WPF4.5 失传的第一本古老秘籍[多扩展显示器编程]

    世界上只有想不通的人,没有走不通的路 --Aaronyang的博客(www.ayjs.net)-www.8mi.me =============时隔两年后再看WPF,有些秘籍不太适合公开,公开了就不值 ...

  7. HOW TO REMOTELY DEBUG APPLICATION RUNNING ON TOMCAT FROM WITHIN INTELLIJ IDEA

    This post would look into how to tackle and debug issues in scenarios where they only occur in produ ...

  8. Windows7下出现“不支持此接口”的解决方案

    今天学校里的辅导员突然找到我说Windows 7下什么文件夹都打不开了,提示“不支持此接口”.怀疑是病毒所致,但运行杀毒软件没有结果.重启也问题依旧. 上网查了之后找到了修复方法: 在命令行中输入fo ...

  9. 从零开始设计SOA框架(二):请求/响应参数的设计

    每个接口都有请求参数.响应参数.其中请求参数分为公共参数和业务参数.响应参数分为两类:正常的响应参数.统一的错误参数   一.请求参数 1.公共参数:每个接口都有的参数,主要包含appkey.时间戳. ...

  10. 关于obj和基本类通过函数参数传进去执行是否改变原来的值

    var obj = { p1 : 1, p2 : 2 }; (function(_/* 这个东东是地址的应用哦 */){ _.p1 = 3, _.p2 = 4 })(obj) var i = 2; ( ...