matlab的基础语法,Matlab基础语法

函数

3.1 Introduction to Functions

rand(3,4): 生成一个3*4的矩阵,内含0~1的随机数

1+rand(3,4)9: 生成一个34的矩阵,内含1~10的随机数

edit: 打开edit window,可以自己编辑方程

Within editor window:

function myRand

a = 1+rand(3,4)*9

end

直接保存后就可以在command window里使用了

3.2 Function I/O

就算在editor里用了a变量,而且输出的是a=…但是a并不存在于workspace里,仅仅作输出用——What happens in Vegas, stays in Vegas.

Local variable: a variable that is accessible only by statements inside on function. A local variable exists only during the function call.

Within editor window:

function [a, s] = myRand(low,high)

a = low+rand(3,4)*(high-low);

v = a(:); 意思是把a矩阵里的数字全部变成一个行矩阵

s = sum(v);

end

Within command window:

myRand(2,3) 只输出两个输出值里的第一个(即矩阵)

Within command window:

[x ss] = myRand(2,3) 则输出两个输出值

3.3 Formal Definition of Functions

function [out_arg1, out_arg2, …] = function_name (in_arg1, in_arg2, …)

function name should be new & not exist, to check, use help exist

3.4 Subfunctions

重写上一个公式,用subfunction来实现:

Within editor window:

function [a,s] = myRand(low,high)

a = low+ran(3,4)*(high-low);

s = sumAllElements(a);

function summa = sumAllElements(M)

v = M(:);

summa = sum(v);

在command window里,只能call主公式,不能call subfunction

3.5 Scope

scope: the set of statements that can access a variable

local scope: accessibility by statements in only one function or only in the Command Window

如何使上一个公式里的v在command window里能够调出:

Within editor window:

function [a,s] = myRand(low,high)

a = low+ran(3,4)*(high-low);

s = sumAllElements(a);

function summa = sumAllElements(M)

global v;

v = M(:);

summa = sum(v);

Within command window:

global v 则可输出公式内的v

尽量少用global variable,会造成困惑

3.7 Scripts

可以运行的一套程序,公式的一种

e.g. 关闭界面

Within command window:

edit EndLessionThree

Within editor window:

fprintf(‘This concludes Lesson 3\n’)

pause(5);

quit;

Toolbox

**4.1 Introduction to Programmer’s Toolbox

sqrt: 可以开根数字,也可以开根矩阵(将其中每一个元素开根得到新的矩阵)

Polymorphism: having multiple forms

Polymorphism functions example: sqrt (return an output that has the same shape as the input provided)

Other examples of polymorphism:

sum: sum(vector)是每一个元素的和;sum(matrix)是一个行矩阵,每一个元素是原矩阵中每一列的求和(sum is polymorphic, but the shape is not the same as the input)

max: a = max(vector)输出的是一个最大值;[a b] = max(vector)输出的是两个值

size: s = size(matrix)输出的是两个值;[row col] = size(matrix)则分别输出需要的两个值

4.2 Matrix Building

zeros(5,6): 输出一个5*6的0矩阵

ones(4,2): 输出一个4*2的1矩阵

5*ones(4,2): 输出全是5的矩阵

zeros(4): 输出4*4的0矩阵 — polymorphism

diag([7 3 9 1]): 输出对角线是指定数字,其他为0的正方形矩阵

rand: rand输出一个0~1的随机数;rand(3,4)输出3*4的随机数矩阵;rand(5)输出5*5的随机数矩阵

fix(1 + rand(5,4)*10): 输出1~10的随机整数

randi(10,5,4): 输出1~10的随机整数,得到5*4的矩阵

randi(20,5): 输出1~20的随机整数,得到5*5的矩阵 — polymorphism

randi([5 10],2,3): 输出5~10的随机整数,得到2*3的矩阵

randn(5): 输出5*5的矩阵,内含数按照mean=0,deviation=1的正态曲线抽取的

r = randn(1,1000000); hist(r, 100): 输出钟形曲线,横坐标切割为100份。

Matlab生成的随机数其实是Pseudo Random Number,即每次都是一样的数字顺序

rng(0)使得生成的数从第一个(0.8147)开始

rng(1)就是另一套数列——reset rand, randn & randi

rng('shuffle');[rand,randn,randi(10)]: 则可通过shuffle得到真正的随机数

4.3 Input / Output

Edit one_more

Within editor window:

function a = one_more

x = input('Gimme a number, buddy: ');

a = x + 1;

则在操作界面中,自动调入输入的数字,输出加一的值。

fprintf('This concludes Lesson 3\n’): 在command window里print除了\n以外的文本;\n指“Go to a new line”即换行

Edit check_out

Within editor window:

function check_out(n,price)

total = n*price;

fprintf('%d items at %.2f each\nTotal = $%5.2f\n',n,price,total);

Within command window:

check_out(3,2.71)

3 items at 2.71 each

Total = $ 8.13

解释:

%: scape character; 直接指代后面的三个数值——n, price, total

After each % is a format specifier: n&f — a conversion character (how the argument is to print the output)

%d: print using scientific notation, except for whole numbers

%.2f: f means print using fixed point notation instead of scientific notation (normal decimal notation); .2指小数点后保留两位

\n: to start a new line

%5.2f: 5 means to print using at least 5 spaces, in case it only needs 4 spaces, blank spaces will be inserted before digits.

来源于C语言

如何print "%”?

只要在fprintf里输入连续两个%(%%)即可。

例:

fprintf('12.5%% of 1234 equals %.3f\n',0.125*1234)

则输出:12.5% of 1234 equals 154.250

如何print “\”? — “\\"

fprintf('This is a backslash character: \\\n')

则输出:This is a backslash character: \

如何print “ ‘ "? — “ ‘' "

fprintf('How about a single quote ('')?\n')

则输出:How about a single quote (')?

如果有4个%,但是后面的数值只有3个,安全的输出法是输出到第4个%之前,后面的不输出

如果有4个%,但是后面的数值有5个,会重复输出一遍直到第2个(第二次)%之前

若输入fprintf('%4.1f\n',[1 2 3 4 5 6]),则会每一行都print一个数字直到6个结束

4.4 Plotting

figure(2); plot(a)则可对第二个a进行绘图,可以比较两张图(对a赋值一个vector就可以绘图——还会拟合的,但是只有y值,x值是vector的容量比如说1~10)

plot(t,b)就可以自己设定横坐标了

在一个figure上画两个图:

x1 = 0 : 0.1 : 2*pi; y1 = sin(x1);

x2 = pi/2 : 0.1 : 3*pi; y2 = cos(x2);

plot(x1,y1,x2,y2)

如何改变两条曲线的颜色/样式:

plot(x1,y1,'r',x2,y2,'k:’) 则x1-y1是红色实线,x2-y2是黑色虚线

使用doc plot / help plot来查找line styles的代码

另一个方法来在一个figure上画两个图:

>> plot(x1,y1,'r')

>> hold on

>> plot(x2,y2,'k:')

>> hold off

grid: 在figure上显示网格

title, xlabel, ylabel: 添加图表信息

legend(‘aaa’,’bbb’): 添加多条线的指示信息

axis([a b c d]): 四个数字分别是x,y轴的最大/最小值

close all: 关掉所有的figure

2b0d7b2474741810f859d50021d7addd.png

4.5 Debugging

Syntax errors: red arrow messages

Semantics errors:

Sometimes MATLAB can catch it

Some may cause the wrong result every time

Some may only cause problems occasionally (e.g., with a certain combination of inputs)

Hard to notice and find the cause of

Important to test with a wide variety of inputs

Syntax error examples:

1 = x

ramd(2)

randd(2)

y = rand(1,5); y(6) — runtime error

Using debugger to debug

Example:

Edit rand_int

function x = rand_int(n,m)

x = randi(n,m);

fprintf('The last element on the last row is %d.\n', x(n,m));

Within command window, when entering "rand_int(3,2)”, it shows “索引超出矩阵维度。出错 rand_int (line 3)"

在editor window里点击第三行最前的“-”,得到一个红色的点,是一个运行的停止点,可以在edit里任意添加多少个停止点,这种时候再运行function就是debugger模式,workspace里会显示function内部的变量,点击step来一步一步检查

运行时会出现“K>>”K的意思是这时候可以用keyboard来在公式内部进行操作

这个公式的错误在于对于randi的使用

退出debugger:dbquit或者点击窗口上方的退出键

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值