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可以简单理解为.没一个窗口程序都有一块内存 ...
随机推荐
- poj2154-color-polyan次二面体+欧拉函数优化
N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...
- 使用AChartEngine第一步:在项目中配置AChartEngine环境
1. 从AChartEngine官网上下载acharengine的jar文件包. 地址:https://code.google.com/p/achartengine/downloads/list 2. ...
- 用Canvas玩3D:点-线-面
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 玩Canvas玩了有两三个礼拜了,平面的东西玩来玩去也就那样,所以就开始折腾3D了. 因为Canvas画布终究还是平面的,所以要有3D就得 ...
- 从无重复大数组找TOP N元素的最优解说起
有一类面试题,既可以考察工程师算法.也可以兼顾实践应用.甚至创新思维,这些题目便是好的题目,有区分度表现为可以有一般解,也可以有最优解.最近就发现了一个这样的好题目,拿出来晒一晒. 1 题目 原文: ...
- Sublime Text 之运行 ES6 (基于babel)
本文同步自我的个人博客:http://www.52cik.com/2015/10/21/sublime-text-run-es6.html 之前在博客园里写过一篇<Sublime Text 之运 ...
- Xamarin.Forms 现已开启对 UWP 的支持
Xamarin.Forms 现已升级到 2.0.0.6482 , 正式开启了对 UWP 的支持. 要创建 UWP 项目, 必须是 VS2015, WIN8.1 下也可以, 但是只有 Windows 1 ...
- JavaScript实例---表格隔行变色以及移入鼠标高亮
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- 如何添加win10命令提示符字体,美化显示效果
如图,win10命令提示符的字体真让人难受的要死,难道就不能改成好看一点的吗?笔者开始了停不下来的百度和Google 在查找了大量零碎或者过时的资料后,终于找到了一篇看起来还是很靠谱的文章: Quic ...
- js1常用的东西
1 .ready 与resize方法.$(inject).ready(function() { var windowWidth = $(document.body).outerWidth(true); ...
- Java 并发-任务执行.
首先来看一下,任务的定义: 所谓的任务,就是抽象,离散的工作单位.你可以简单理解为代码级别的 (Runnable接口) 大多数并发应用程序都是围绕着任务进行管理的. 看一小段代码: package c ...