首页 > 技术文章 > matlab

pjishu 2019-04-24 17:37 原文

1.

clear:清除工作空间的所有变量 

clear all:清除工作空间的所有变量,函数,和MEX文件

2.

y = linspace(x1,x2,n) 生成 n 个点,起点是x1,终点是x2。

3.

plot属性:

LineWidth——指定线宽

MarkerEdgeColor——指定标识符的边缘颜色

MarkerFaceColor——指定标识符填充颜色

MarkerSize——指定标识符的大小

x=linspace(-10,10,20)
y=x
plot(x,y,'r*','markersize',10,'linewidth',20) % 在图上画*,颜色为红色,标记的大小(markersize)为10,线条的宽度为20
xlabel('x')
ylabel('y')

4.

pause:

一般情况下pause(a)表示程序暂停a秒后继续执行,但有时候也存在这种情况,程序中只有pause;并没有参数a,这样的意思是程序暂停,按任意键程序继续执行。

5.

mesh,surf :

绘制曲面:z=e^(-x^2-y^2)
clc;clear;close all;
[X,Y]=meshgrid(-2:0.1:2,-2:0.1:2);
Z=exp(-X.^2-Y.^2);
mesh(X,Y,Z);%线框图
figure();
surf(X,Y,Z);%表面图
6.

logspace(a,b,n):

生成从10的a次方到10的b次方之间按对数等分的n个元素的行向量

 7.

hold on;

加上这句就可以在原图上一直画图了。

8.

n = numel(A)

返回A里面的元素个数

 9.

p = randperm(n)  

返回一行包含从1到n的整数。

randperm(3):   [1     3     2]

10.

exist:
exist主要有两种形式,一个参数和两个参数的,作用都是用于确定某值是否存在:
①. b = exist( a)
      若 a 存在,则 b = 1; 否则 b = 0;
②. b = exist( 'name', 'kind')
      kind 表示 name 的类型,可以取的值为:builtin(内建类型),class(类),dir(文件夹),file(文件或文件夹),var(变量)。
11.

句柄

变量名=@(输入参数列表)运算表达式

① 可以定义一个函数

mysqr=@(x)x.*x  

mysqr(2) % 结果ans = 4

② @+函数名 进行函数名的赋值

function  y=f(x)
y=cos(x);
则可以定义mycos = @f 来调用已定义函数。
并通过 mycos(pi)来使用该函数。
返回 ans = -1

12.

fminunc

返回f(x)取到最小值所对应的x,f(x)值,收敛性

运用到ml里面的代码:

options = optimset('GradObj', 'on', 'MaxIter', 400);  % 设置使用用户自定义的梯度下降公式 ,迭代次数:400

% 为了使得代价函数取最小,采用梯度下降法迭代400次,学习率不用人为设定,函数内部自动探索。

其中设定t为自变量,函数为costFunctionReg,X,y,lambda延用上面的变量, initial_theta:θ的初始值(这里就是t的初始值),costFunctionReg返回 迭代一次所得到的代价函数值以及代价函数对θj的偏导,exit_flag>0表示收敛,theta为最终的theta,J为该theta对应的值

[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options); 

 13.

max

max(A)
返回一个数组各不同维中的最大元素。
如果A是一个向量,max(A)返回A中的最大元素。
如果A是一个矩阵,返回每一列的最大元素,构成一个行向量形式。若[Y,U]=max(A) ,则Y是前面的意思,而U是最大值所对应的索引值(行号),U的第一个元素对应A的第一列 

14.

a(:)

a=magic(3)

a=

8 1 6

3 5 7
4 9 2

a(:) :

ans=

8
3
4
1
5
9
6
7
2

先数第一列,再数第二列。。。。。

15.

[1,2] = [1 2]

 16.

rand(3,1) :

生成一个3*1的矩阵,里面的元素是[0,1]的随机数。

17.

cell

定义2*2的cell数组:A={'I love you',pi;{1,11},complex(3,5)}

>> A(2,1)  % 返回在2,1位置上的元胞

ans = 

    {1x2 cell}

 

>> A{2,1}  % 返回在2,1位置上的元胞的内容

ans = 

    [1]    [11]

 18

strtok

①strtok(str) % 从第一个不是空格的字符开始,一直选到遇到下一个空格为止

a=' asd eere dw ';
strtok(a)  % 返回asd

②a=' a dwdw ! dw ddda ! awd,..';
strtok(a,'!') % 返回第一个!之前的所有字符

③[b,c]=strtok(a,'!') % b存储真正的结果,c存储a中去掉b以后剩下的字符

19

regexprep

newStr = regexprep(str,expression,replace)  % expression:正则表达式,此处将 str 中与 expression 匹配的文本替换为 replace 描述的文本。regexprep 函数在 newStr 中返回更新的文本。

str = 'My flowers may bloom in May';
expression = 'M(\w+)y'; % \w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。+:匹配前面的表达式1次或多次
replace = 'April';

newStr = regexprep(str,expression,replace)  % str中若出现以M为首y为尾,中间有1个以上的任意字符,则把这一子串替换为replace,返回更新后的字符串

 21.

B = repmat(A,M,N)

生成一个新矩阵,把A看成一个元素,形成m行n列的。

 22.

bsxfun(fun,A,B):使用fun对A和B的每个元素进行操作。

如果发现A,B维数一直,则直接一对一搞;否则必须有一个维数为1,然后对它进行扩展,接着利用fun对两个矩阵的每个元素进行运算。

23.

基本运算函数(rdivide(a,b) : a/b ; ldivide(a,b):b/a,这些可以代替基本函数):

24.

diag

①X = diag(v,k)

v为向量,X为矩阵

以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。
例:
>> v=[1 2 3];
>> x=diag(v,-1)
x =
     0     0     0     0
     1     0     0     0
     0     2     0     0
     0     0     3     0

 ②v=diag(X,k)

X为矩阵,v为向量

取矩阵X的第K条对角线元素为向量v

例:

>> aa=randn(3,3)

aa =

   -1.3282   -1.7925    0.4092
   -0.3803    0.5858   -0.4684
   -0.9560    0.7356    0.8292

>> diag(aa)

ans =

   -1.3282
    0.5858
    0.8292

>> diag(aa,1)

ans =

   -1.7925
   -0.4684

>> diag(aa,2)

ans =

    0.4092

优化:

fmincon:

x0是初始值

 

 例题:

 

 没有Aeq,Beq就用[],exitFlag=1表示找到最优值

 

 

 

 如果多了个非线性约束:

则多定义一个函数:

 

 

推荐阅读