Todd's Matlab讲义第2讲:Matlab 编程
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 编程的更多相关文章
- Todd's Matlab讲义第4讲:控制误差和条件语句
误差和残量 数值求解方程\(f(x)=0\)的根,有多种方法测算结果的近似程度.最直接的方法是计算误差.第\(n\)步迭代结果与真值\(x^\*\)的差即为第\(n\)步迭代的误差: \begin{e ...
- Todd's Matlab讲义第1讲:向量,函数和作图
向量 Matlab 中最基本的对象是矩阵,向量是特殊的矩阵.行向量是\(1\times n\)矩阵,列向量是\(m\times 1\)矩阵.输入如下行向量: >> v=[0 1 2 3] ...
- Todd's Matlab讲义第5讲:二分法和找根
二分法和if ... else ... end 语句 先回顾一下二分法.要求方程\(f(x)=0\)的根.假设\(c = f(a) < 0\)和\(d = f(b) > 0\),如果\(f ...
- Todd's Matlab讲义第3讲:牛顿法和for循环
方程数值求解 下面几讲,我们将聚集如下方程的解法: \begin{equation} f(x)=0 \tag{3.1}\label{3.1} \end{equation} 在微积分课程中,我们知道,许 ...
- Todd's Matlab讲义第6讲:割线法
割线法 割线法求解方程\(f(x)=0\)的根需要两个接近真实根\(x^\*\)的初值\(x_0\)和\(x_1\),于是得到函数\(f(x)\)上两个点\((x_0,y_0=f(x_0))\)和\( ...
- matlab提速技巧(自matlab帮助文件)
matlab提速技巧(自matlab帮助文件) 1.首先要学会用profiler.1.1. 打开profiler.To open the Profiler, select View -> Pro ...
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...
- Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序
Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...
- MFC控件第一讲.DC编程
MFC控件第一讲.DC编程 一丶简介 什么是DC,DC有什么用. DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的. DC可以简单理解为.没一个窗口程序都有一块内存 ...
随机推荐
- jquery实现文件异步上传
前言 这里用了2个JS插件,一个是Jquery原生js,我的版本是jquery-1.7.2.min.js,另一个是jquery.form.js.这个form.js 是关键,不可少哦.另外, 我的服务器 ...
- Opencv实现运动检测
运动检测多种多样,这里的需求只是检测到有运动物体就行了,而且 要尽量减少误报的情况.另外尽量降低CPU的消耗,因为最终需要在树莓派上面运行. 看了一些中文的文章,发现无法很好地理解别人说的内容,反而是 ...
- Qt opencv程序运行异常
搭建了两次qt opencv vs ,经常出现程序运行异常.找了几个原因如下: 1.opencv的路径未配置或配置有误. 2.qt中pro文件包含不正确. 3.测试opencv程序不正确.如视频或图片 ...
- Java并发编程-CopyOnWriteArrayList
CopyOnWriteArrayList原理 首先每次写操作,都将数组copy一份,并赋值给arrays 读操作读不加锁 写操作加锁 ReentrantLock 因为每次写都要copy数组,这是一项繁 ...
- cocos2d-x 3.6 mac下的试用(粒子,触摸事件,图片)
戏说 虽然公司再如何如何,咱程序员在干好课外学习的情况下也是要努力做好本职工作的. 工作中的lua也写多了,深入了解Cocos2d-x当然还是要倒腾倒腾C++,对于一个C#用了这么多年,工作用lua的 ...
- Object C学习笔记26-文件管理(二)
上一篇简单的介绍了如何获取文件属性,删除,拷贝文件等,本文继续记录Object C中文件IO操作. 一. 获取文件的执行主目录 在Object C中提供了一个方法 NSHomeDirectory() ...
- jquery封装常用方法
var git = { //true表示格式正确 checkEmail: function (str) { -]{,})(\S*)/g) == null) { return false; } else ...
- CNN 手写数字识别
1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...
- C#线程模型脉络
今天在看同事新买到的<C#本质论 Edition 4>的时候,对比下以前Edtion3的新特性时针对Async/Await关键字时发现对一些线程方面的定义还理解的不是很透彻,脉络还不是很清 ...
- window下为apache配置ssl证书
转载自 子非鱼 的博客稍作修改 第一步:依赖 配置Apache服务器支持https协议和SSL证书,最基本的要求是Apache包含openssl模块.还好apache/bin目录下有libeay32. ...