入坑MATLAB必会的吐血总结

  本渣想回过头来整理一下MATLAB的一些基本的知识(很多东西比较琐碎,应该系统的梳理梳理),下文中没有提到的,自己用help查即可。

  此文用来存个档,便于回顾。

  由于matlab各版本部分语法存在差异,可能会出现bug,用help查帮助文档即可。

  里面的一些内容仅供参考,知识量有限,仅供入门。

  后期可能会随缘写一点笔记。

  如果没有装Matlab,我这里有一篇建模软件的博客:https://www.cnblogs.com/fangxiaoqi/p/10563509.html

  变量名:字母数字串(第一个字符必须英文字母 | 字符间无空格 | 最多19个字符);

  用%注解;

  检查现存于工作空间(Workspace)的变量,可键入who;

  检查更加详细的信息,可键入whos;

  删除工作空间里的变量clear;

  一些永久常数:

  基本虚数单位 i或j;

  系统的浮点精确度 eps;

  无限大 inf;

  系统所能表示的最大/最小数值 realmax / realmin;

  非数值 NaN;

  圆周率 pi;

  函数的输入/输出参数个数 nargin / nargout;

  搜寻路径:which(空格)文件名

一、线性代数

矩阵

  基本命令:

  • A的转置——A'
  • A的行列式——det(A)
  • 矩阵A的秩——rank(A)
  • A的逆矩阵——inv(A)
  • A的n次幂——A^n
  • 矩阵A和B里的元素相乘——A .* B
  • 选择A的第i行生成一个行向量——ai=A(i,:)
  • 选择A的第j列生成一个列向量——aj=A(:,j)
  • 生成n阶零矩阵——zeros(n)
  • 生成n阶单位矩阵——eye(n)
  • 两个向量的内积——a1 * a2'

其他命令:

  • 存储工作空间变量——save  文件名  变量名
  • 查询函数的用法——help  函数名
  • 列出所有变量的详细资料——whos
  • 演示程序demo——demo

特殊矩阵:

  • 全一矩阵——y = ones(n)      y = ones(m,n)
  • 均匀分布随机矩阵——y = rand(n)      y = rand(m,n)
  • 正态分布随机矩阵——y = randn(n)    y = randn(m,n)
  • 线性等分向量——y = linspace(a,b)    默认100等分    %n等分: y = linspace(a,b,n)
  • 对数等分向量——y = logspace(a,b)   默认50等分      %n等分:y = logspace(a,b,n)
  • 矩阵A中元素的个数——n = numel(A)
  • 以输入元素为对角线元素的矩阵——out = blkdiag(a,b,c...)
  • n阶Hadamard矩阵——H = hadamard(n)
  • Hankel矩阵——H = hankel(c)   第一列元素为c,反三角以下元素为0
  • n阶Hilbert矩阵——H = hilb(n)         H(i,j) = 1/(i+j-1)
  • n阶逆Hilbert矩阵——H = invhilb(n)
  • n阶魔方矩阵——M = magic(n)

向量的范数——n = norm(X)  具体help查询     

矩阵的范数——n = norm(A)  具体help查询

其他运算:

  • 矩阵A的特征值——D = eig(A)
  • 特征向量矩阵X和特征值组成的对角阵D——[X,D] = eig(A)
  • 将非奇异矩阵A正交化为Q——Q = orth(A)      (Q' * Q = 单位矩阵)
  • 由已定义的矩阵A,E,O,A作为矩阵的子块,生成矩阵B——B = [A,E;O,A]
  • 矩阵A的列向量组的极大线性无关组——rref(A)
  • 条件数——c = cond(A)   默认为2条件数             p条件数:c = cond(A,p)

数学定义为矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A) = ‖ A ‖·‖ A逆 ‖

LU = A——[L,U] = lu(A)

LU = PA——[L,U,P] = lu(A)

U为上三角阵,L为下三角阵或其变换形式,P为单位矩阵的行变换矩阵

例子:

  ①解方程组

  求解方程组$\left\{\begin{array}{c}{5 x_{1}+4 x_{3}+2 x_{4}=3} \\ {x_{1}-x_{2}+2 x_{3}+x_{4}=1} \\ {4 x_{1}+x_{2}+2 x_{3}=1} \\ {x_{1}+x_{2}+x_{3}+x_{4}=0}\end{array}\right.$的解。

clear
format rat %format函数控制输出格式 format rat是小数去用分数输出表示
A=[,,,;,-,,;,,,;,,,];
B=[;;;];
S=length(A(:,))
R=rank(A)
if S==R
X=A\B
else
fprintf('error\n')
end

   ②解线性方程组

  求解线性方程组:

$\left\{\begin{array}{l}{x_{1}-2 x_{2}+3 x_{3}+x_{4}+x_{5}=7} \\ {x_{1}+x_{2}-x_{3}-x_{4}-2 x_{5}=2} \\ {2 x_{1}-x_{2}+x_{3}-2 x_{5}=7} \\ {2 x_{1}+2 x_{2}+5 x_{3}-x_{4}+x_{5}=18}\end{array}\right.$

clear
A=[,-,,,;,,-,-,-;,-,,,-;,,,-,];
b=[;;;];
B=[A,b];
n=length(A(,:))
RA=rank(A)
RB=rank(B)
if RA==RB
if RA==n
X=A\b
else
D=rref(B)
end
else
fprintf('No Solution for the Equations')
end

  ③解齐次线性方程组

$\left\{\begin{array}{c}{x_{1}+x_{2}+x_{3}+4 x_{4}-3 x_{5}=0} \\ {2 x_{1}+x_{2}+3 x_{3}+5 x_{4}-5 x_{5}=0} \\ {x_{1}-x_{2}+3 x_{3}-2 x_{4}-x_{5}=0} \\ {3 x_{1}+x_{2}+5 x_{3}+6 x_{4}-7 x_{5}=0}\end{array}\right.$

clear
A=[,,,,-;,,,,-;,-,,-,-;,,,,-];
R=rank(A)
%X=rref(A)
%仅仅用rref的话,本题的秩=<,方程有非零解,需要自己再去做
%因此不必用rref,MATLAB提供了一个求矩阵令空间的函数null来方便求解
Y=null(A,'r')

  ④求非齐次线性方程组的通解

$\left\{\begin{array}{c}{x_{1}+5 x_{2}-x_{3}-x_{4}=-1} \\ {x_{1}-2 x_{2}+x_{3}+3 x_{4}=3} \\ {3 x_{1}+8 x_{2}-x_{3}+x_{4}=1} \\ {x_{1}-9 x_{2}+3 x_{3}+7 x_{4}=7}\end{array}\right.$

clear
A=[,,-,-;,-,,;,,-,;,-,,];
b=[-;;;];
B=[A,b];
RA=rank(A)
RB=rank(B)
Y=null(A,'r')
n=length(b)
if RA==RB
if RA==n
X=A\B %方程组满秩时,求出唯一解
else
p=pinv(A)*b %在方程组不满秩时,求出特解
Y=null(A,'r') %求出方程组的基础解系
n1=length(Y(,:))
k=sym(['kI']) %这里是ki,是为了把数组k说明成字符型变量
for i=:n1 %求出方程的全部解
k(i)=strcat('k',num2str(i))
p=p+k(i)*Y(:,i)
end
end
else
fprintf('No Solution for the Equations')
end

图形功能

  这一块结合实例来了解相关函数。

  二维图像:

  入坑MATLAB必会的吐血总结

  ①——plot

x=-:0.1:;
y1=*x.^+x.^-;
plot(x,y1,'r')
%x是向量,所以计算一定要表示成点乘

  入坑MATLAB必会的吐血总结

  ②——fplot

%函数
function y2=draw2(x)
y2=sin(x)+x;
end
%在命令行输入
fplot(@draw2,[-,])

  入坑MATLAB必会的吐血总结

  ③——ezplot

y3='x.^2*exp(-x.^2)';
ezplot(y3)

  入坑MATLAB必会的吐血总结

   ④——两曲线

syms x
y=log10(x+sqrt(+x.^));
dy=diff(y,x);%求导函数,但x不能先定义为向量,所以用subs让x1作为一符号代替表达式y中的默认变量
x1=-:0.1:;
y1=subs(y,x1);
dy1=subs(dy,x1);
plot(x1,y1,'r',x1,dy1,'b')

  入坑MATLAB必会的吐血总结

   三维图像:

入坑MATLAB必会的吐血总结

  ①——plot3

t=:0.1:*pi;
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z)

  入坑MATLAB必会的吐血总结

  ②——参数方程

t=:0.1:*pi;
x=/*cos(t)+/;
y=/*sin(t);
z=sqrt(-x.^-y.^);
plot3(x,y,z)

  入坑MATLAB必会的吐血总结

  ③——meshgrid和mesh

s=-:0.1:;
t=-:0.1:;
[x,y]=meshgrid(s,t);%由两向量生成网格点(x,y),与mesh()配合使用
z=x.^-y.^;
mesh(x,y,z);%绘制着色的三维网纹去年

  入坑MATLAB必会的吐血总结

  ④——cylinder

s=-pi/:pi/:pi/;
[X,Y,Z]=cylinder(./s,);%绘制用向量表示的曲线围绕x轴旋转的曲面,与surf()配合使用,相当于mesh()
surf(X,Y,Z);
%mesh(X,Y,Z);

  入坑MATLAB必会的吐血总结

MATLAB的程序结构

  设计一段程序,分别用for循环和while循环求1+2+3+…+100的和,写出完成实验的程序。

clear;
sum=;
for k=:
sum=sum+k;%s=s+k
end
sum

注意:i和j是系统的虚单位,原则上不能作为变量,建议换成k(sum属于系统函数名,同理,所以还是建议写成s)

%while循环
clear;
s=;
k=;
while k<
s=s+k;
k=k+;
end
s

入坑MATLAB必会的吐血总结

%编写函数
function y=fsy42(x)
if x>
y=x*x
else
y=x*x*x
end
%以文件名fsy42.m保存在磁盘上,接着编写程序:
fplot(@fsy42,[-,])

  switch以及一些像break、return、continue之类的程序流程控制语句,过于easy,请自行查询。

补充实例:

入坑MATLAB必会的吐血总结

%算N9
clear;
s=;
k=;
while(s<=)
s=s+/k;
k=k+;
end
N9=k-
%算N20
clear;
s=;
k=;
while(s<=)
s=s+/k;
k=k+;
end
N20=k-

入坑MATLAB必会的吐血总结

clear;
k=;
s=;
while(k<)
n=input('请输入数字:');
if(n>)
s=s+n;
end
k=k+;
end
s
num=sqrt(s)

二、微积分

1.极限和微分

函数类别 MATLAB函数
幂函数 x^a || sqrt(x)
指数函数 a^x || exp(x)
对数函数 log(x)【即lnx】 || log2(x) || log10(x)
三角函数 sin(x) || cos(x) || tan(x) || cot(x) || sec(x) || csc(x)
反三角函数 asin(x) || acos(x) || atan(x) || acot(x) || asec(x) || acsc(x)
绝对值函数 abs(x)

  

   求极限(摘自MATLAB2018说明文档):

>> help limit
--- sym/limit 的帮助 --- limit Limit of an expression.
limit(F,x,a) takes the limit of the symbolic expression F as x -> a.
limit(F,a) uses symvar(F) as the independent variable.
limit(F) uses a = as the limit point.
limit(F,x,a,'right') or limit(F,x,a,'left') specify the direction
of a one-sided limit. Examples:
syms x a t h; limit(sin(x)/x) returns
limit((x-)/(x^-),) returns /
limit((+*t/x)^(*x),x,inf) returns exp(*t)
limit(/x,x,,'right') returns inf
limit(/x,x,,'left') returns -inf
limit((sin(x+h)-sin(x))/h,h,) returns cos(x)
v = [( + a/x)^x, exp(-x)];
limit(v,x,inf,'left') returns [exp(a), ]

   求导(摘自MATLAB2018说明文档):

>> help diff
diff - Differences and Approximate Derivatives This MATLAB function calculates differences between adjacent elements of X along
the first array dimension whose size does not equal : Y = diff(X)
Y = diff(X,n)
Y = diff(X,n,dim)

 补充:pretty函数可以使它作用的表达式更符合数学上的书写习惯。

>> help pretty
--- sym/pretty 的帮助 --- pretty Pretty print a symbolic expression.
pretty is not recommended. Use live scripts instead.
Live scripts provide full math rendering while pretty uses plain-text formatting. pretty(S) prints the symbolic expression S in a format that
resembles type-set mathematics.

2.不定积分与定积分

  计算函数fun关于默认变量的不定积分:int(fun)

  计算函数fun关于变量x的不定积分:int(fun,x)

  计算函数fun关于变量x从a到b的定积分:int(fun,x,a,b)

如果因为版本更新等原因导致语法错误,请参照说明文档。

 例子:

入坑MATLAB必会的吐血总结

clear
syms x a b c
I1=int(sin(a*x)*sin(b*x)*sin(c*x),x)
I2=int(x*exp(x)/(+x)^,x,,)

入坑MATLAB必会的吐血总结

clear
syms t
y=exp(-t^)
F=int(y,t,,x^)
int(x^*diff(F,x),x,-,)

入坑MATLAB必会的吐血总结

clear
syms x
I1=int(+x^,x,-,)+int(exp(-x),x,,)
eval(I1) %用于评估由表达式表示的matlab代码
I2=quad(@sy3_9f,-,)
其中sy3_9f.m如下:
function y=sy3_9f(x)
if x<=
y=+x.^; %系统自动把变量换成向量,故用 .* ./ .^ 这些。而且,凡是维数不匹配,就有可能是把变量作为向量了
else
y=exp(-x);
end
%如果被积函数是一个分段函数,则需要以分段点为界分开积分

  为什么要用quad?

  并非所有的积分都可以用 int() 来完成运算,函数 int() 完成的是符号运算,而不是数值运算,因此,当积分不存在初等形式的原函数时,函数 int() 便不能完成积分运算。

  而 quad() 函数用于计算函数的数值积分

3.二次曲面

  • 椭球面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=asinθcosφy=bsinθsinφz=ccosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

clear
k=;
n=^k-;
[x,y,z]=ellipsoid(,,,,,,n) %ellipsoid——椭圆
mesh(x,y,z);
colormap(gray);
axis equal %或者用参数方程(推荐)
clear
ezmesh('5*sin(a)*cos(b)','4*sin(a)*sin(b)','3*cos(a)',[,pi],[,*pi])
axis equal

  图形:

  入坑MATLAB必会的吐血总结

  • 球面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=Rsinθcosφy=Rsinθsinφz=Rcosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

clear
k=;
n=^k-;
[x,y,z]=sphere(n)
mesh(x,y,z);
colormap(gray);
axis equal %或者用参数方程(推荐)
clear
ezmesh('5*sin(a)*cos(b)','5*sin(a)*sin(b)','5*cos(a)',[,pi],[,*pi])
axis equal

  图形:

  入坑MATLAB必会的吐血总结

  • 抛物面

  椭圆抛物面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=avcosφy=bvsinφz=v²   (0≤v≤+∞, 0≤φ<2π)

  程序:

ezmesh('2*u*cos(v)','3*u*sin(v)','4*u*u',[,],[,*pi])
axis equal

  图形:

  入坑MATLAB必会的吐血总结

  双曲抛物面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=a(u+v)y=b(u-v)z=4uv

        或者:x=auy=bvz=u²-v²         (-∞≤u≤+∞, -∞≤v≤+∞)

  程序:

clear
x=-:0.01:;
y=-:0.1:;
[X,Y]=meshgrid(x,y);
Z=X.*X/-Y.*Y/;
mesh(X,Y,Z)

  图形:

  入坑MATLAB必会的吐血总结

  • 双曲面

  单叶双曲面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=a*secu*cosvy=b*secu*sinvz=c*tanu     (-∞≤u≤+∞, 0≤v≤2π)

  程序:

ezmesh('2*sec(u)*cos(v)','3*sec(u)*sin(v)','2*tan(u)',[-,],[,*pi])
axis equal
title('ezmesh作的单叶双曲面')

  图形:

  入坑MATLAB必会的吐血总结

  双叶双曲面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=a*tanu*cosvy=b*tanu*sinvz=c*secu    (-∞≤u≤+∞, 0≤v≤2π)

  程序:

ezmesh('2*tan(u)*cos(v)','3*tan(u)*sin(v)','2*sec(u)',[-,],[,*pi])
axis equal
title('ezmesh作的双叶双曲面')

  图形:

  入坑MATLAB必会的吐血总结

  • 椭圆锥面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=avcosφy=bvsinφz=cv   ( 0≤φ<2π,-∞≤v≤+∞)

  程序:

ezmesh('2*u*cos(v)','3*u*sin(v)','2*u',[-,],[,*pi])
axis equal
title('ezmesh作的椭圆锥面')

  图形:

   入坑MATLAB必会的吐血总结

  • 椭圆柱面

  直角坐标方程:入坑MATLAB必会的吐血总结

  参数方程:x=acosuy=bsinuz=v   ( 0≤φ<2π,-∞≤v≤+∞)

  程序:

x1='3*cos(u)';
y1='2*sin(u)';
z1='v';
ezmesh(x1,y1,z1,[,*pi,,]);
axis square

  图形:

  入坑MATLAB必会的吐血总结

4.二重积分

  直角坐标

入坑MATLAB必会的吐血总结

%第一问
syms x y
f=x/(+x*y);
int(int(f,y,,),x,,)
%第二问
%
求交点
clear
syms x y
[x,y]=solve(y==x*x+,y==*x,x,y) %在2018里这样,有些版本是加引号和单等号
%
积分
clear
syms x y
f=x/(y+);
int(int(f,y,*x,x*x+),x,,)
%
第三问
clear
syms x y
f=-x-y;
int(int(f,y,,-x),x,,)

  极坐标

  入坑MATLAB必会的吐血总结

入坑MATLAB必会的吐血总结

%第一问
clear
syms r f
int(int(r*r*r,r,,sqrt()),f,,pi/)
%第二问
clear
syms r f
int(int(,r,,sec(f)*tan(f)),f,,pi/)

入坑MATLAB必会的吐血总结

%三叶玫瑰线的一叶
clear
syms r f
int(int(r,r,,cos(*f)),f,-pi/,pi/)
%心脏线
clear
syms r f
int(int(r,r,,-sin(f)),f,,*pi)

5.三重积分

   直角坐标

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

clear
syms z r s
A=int(int(int(z*r,z,r*r,),r,,sqrt()),s,,*pi)-int(int(int(z*r,z,r*r,),r,,sqrt()),s,,*pi)

   柱面坐标

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

clear
syms z r s
int(int(int(z*r,z,r*r,sqrt(-r*r)),r,,),s,,*pi)

   球坐标

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

clear
syms r f g
int(int(int(r*r*r*r*sin(g),r,,),g,,pi),f,,*pi)

6.对弧长的曲线积分

   入坑MATLAB必会的吐血总结

%第一问
clear
syms x y t
x=t;
y=/*sqrt(*t*t*t);
z=/*t*t;
dx=diff(x,t);
dy=diff(y,t);
dz=diff(z,t);
ds=sqrt(dx^+dy^+dz^);
f=x*y*exp(x*y);
int(f*ds,t,,)
%第二问
clear
syms x y t a
x=a*(t-sin(t));
y=a*(-cos(t));
dx=diff(x,t);
dy=diff(y,t);
ds=sqrt(dx^+dy^);
f=y*y;
int(f*ds,t,,)

7.对坐标的曲线积分

   入坑MATLAB必会的吐血总结

%第一问
clear
syms x y a t
x=a*(t-sin(t));
y=a*(-cos(t));
dx=diff(x);
dy=diff(y);
int((*a-y)*dx+dy,t,,*pi) %第二问
clear
syms x y z t a
x=exp(t);
y=exp(-t);
z=a*t;
dx=diff(x);
dy=diff(y);
dz=diff(z);
int(y*dx-x*dy+(x*x+y*y)*dz,t,,)

8.对面积的曲面积分

  入坑MATLAB必会的吐血总结

%
clear
syms x y z
z=-(x*x+y*y);
dzx=diff(z,x);
dzy=diff(z,y);
f1=;
f2=x*x+y*y;
ds=sqrt(+dzx^+dzy^);
I1=int(int(f1*ds,x,,sqrt()),y,,sqrt())
I2=int(int(f2*ds,x,,sqrt()),y,,sqrt()) %
clear
syms x y z
z=-*x-*y/;
dzx=diff(z,x);
dzy=diff(z,y);
ds=sqrt(+dzx^+dzy^);
I=int(int(*ds,y,,(-*x)/),x,,)

9.对坐标的曲面积分

  入坑MATLAB必会的吐血总结

%第一问
clear
syms x y z R r sita
x=r*sin(sita);
y=r*cos(sita);
z=-sqrt(R*R-x*x-y*y);
int(int(x*x*y*y*z*r,r,,R),sita,,*pi)
%第二问
clear
syms x y z
I1=int(int(sqrt(-y*y),y,,),z,,);
I2=int(int(sqrt(-x*x),x,,),z,,);
I=I1+I2

10.级数

  常数项级数与审敛

help symsum
--- sym/symsum 的帮助 --- symsum Symbolic summation.
symsum(f) evaluates the sum of a series, where expression f defines the
terms of a series, with respect to the default symbolic variable
defaultVar determined by symvar. The value of the default variable
changes from to defaultVar - . If f is a constant, the summation is
with respect to 'x'. symsum(f,x) evaluates the sum of a series, where expression f defines
the terms of a series, with respect to the symbolic variable x. The
value of the variable x changes from to x - . symsum(f,a,b) evaluates the sum of a series, where expression f defines
the terms of a series, with respect to the default symbolic variable
defaultVar determined by symvar. The value of the default variable
changes from a to b. Specifying the range from a to b can also be done
using a row or column vector with two elements, i.e., valid calls are
also symsum(f,[a,b]) or symsum(f,[a b]) and symsum(f,[a;b]). symsum(f,x,a,b) evaluates the sum of a series, where expression f
defines the terms of a series, with respect to the symbolic variable x.
The value of the variable x changes from a to b. Specifying the range
from a to b can also be done using a row or column vector with two
elements, i.e., valid calls are also symsum(f,x,[a,b]) or
symsum(f,x,[a b]) and symsum(f,x,[a;b]).

入坑MATLAB必会的吐血总结

clear
syms n
f1=(n-)/(n*^n);
f2=n*n*n/(^n);
I1=symsum(f1,n,,inf)
I2=symsum(f2,n,,inf)

  Taylor展开

  taylor(function,x(变量),a(展开点,缺省时为麦克劳林级数),'Order',n(展开项数))    %详细资料help

  入坑MATLAB必会的吐血总结

clear
syms x n
taylor(cos(x),x,pi/,'Order',)

11.傅里叶级数

   入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

%第1问
clear
syms x
f=x*x*x+x*x;
a0=int(f,x,-pi,pi)/pi;
an=int(f*cos(*x),x,-pi,pi)/pi
bn=int(f*sin(*x),x,-pi,pi)/pi %第2问 matlab2018死活不行 但是2016可以 这软件......
function [a0,a,b]=myfly(f,n)
a0=fourieran(f,);
for i=:n
a(i)=fourieran(f,i);
end
for i=:n
b(i)=fourierbn(f,i);
end %fourieran.m
function an=fourieran(f,n)
syms x
an=int(f*cos(n*x),x,-pi,pi)/pi;
%fourierbn.m
function bn=fourierbn(f,n)
syms x
bn=int(f*sin(n*x),x,-pi,pi)/pi;

12.微分方程和微分方程组

   X=dsolve(‘eqn1’,'eqn2',...),如果没有初值条件,求出通解,如果有初值条件,求出特解。

  入坑MATLAB必会的吐血总结

%第1问
clear
dsolve('Dy=8-3*y','y(0)=2')
%第2问
clear
dsolve('(1+x*x)*D2y=2*x*Dy','y(0)=1','Dy(0)=3')
%第3问
clear
dsolve('D4y-2*D3y+D2y=0','x')
%第4问
clear
dsolve('2*Dx+4*x+Dy-y=exp(t),Dx+3*x+y=0','x(0)=3/2','y(0)=0')

三、概率统计

1.概率统计函数

  M件产品,K件次品,抽取N件,N件中x件次品。

  计算超几何分布的累积概率:            P=hygecdf(x,M,K,N)           %发现其中不多于x件次品的概率          

  计算超几何分布的概率密度分布:     Px=hygepdf(x,M,K,N)         %发现其中恰好x件次品的概率

  逆累积分布计算:                              X=hygeinv(p,M,K,N)           %逆累积,由概率求次品数

  产生超几何分布随机数:                   P=hygernd(M,K,N,m,n)     %产生m行n列的符合超几何分布的随机数

  例子:

设有1000件零件,其中优等品300件,随机抽取50件来检查,计算:

①其中不多于10件优等品的概率。绘出这50件产品中优等品的概率分布图。

②根据①中算得的概率p,进行你累积概率计算,把算得的结果和10进行比较。

③其中恰好10件优等品的概率。给出随机变量的分布概率密度图像。

clear
P1=hygecdf(,,,)
X=hygeinv(P1,,,)
P2=hygepdf(,,,)
x=:;
Px1=hygecdf(x,,,);
Px2=hygepdf(x,,,);
stairs(x,Px1); % stairs(x,y)绘制向量y的阶梯图,阶梯的宽度以向量x指定。
figure()
stairs(x,Px2);

  常用分布函数的字头:

分布 函数字头   
二项分布 bino
几何分布 geo
超几何分布 hyge
泊松分布 poiss
均匀分布 unif
离散均匀分布 unid
指数分布 exp
正态分布 norm
T分布 t
F分布 f
β分布 beta
γ分布 gam

   函数字头与pdf、cdf、inv、rnd组合就能得到相应的函数,具体用法help。

   例子

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

  计算数学期望和方差

分布名 计算命令  
二项分布  [E,D]=binostat(N,P)
超几何分布  [E,D]=hygestat(M,K,N) 
泊松分布  [E,D]=poisstat(Lambda)
均匀分布  [E,D]=unifstat(A,B)
指数分布  [E,D]=expstat(P,Lambda)
正态分布  [E,D]=normstat(μ,σ)

  计算协方差——cov(),具体用法自行help

  计算相关系数——corrcoef(),具体用法自行help

  参数估计(详细help)

常用分布 参数估计命令
泊松分布  [lambdahat,lambdaci]=poissfit(X,α)             返回水平α的λ参数估计和置信区间
均匀分布  [ahat,bhat,aci,bci]=unifit(X,α)           返回水平α的参数估计和置信区间
指数分布  [lambdahat,lambdaci]=expfit(X,α)            返回水平α的参数估计和置信区间
二项分布  [phat,pci]=binofit(X,α)                                      [参数估计,置信区间]
正态分布    [muhat,sigmahat,muci,sigmaci]=normfit(X,α)  返回水平α的期望、方差值和置信区间

2.统计量

  样本的几何均值:    m=geomean(X)

  样本的调和均值:    m=harmmean(X)

  样本的算数平均值:      m=mean(X)

  样本数据的中值:     m=median(X)

  样本的极差:       y=range(X)

  样本的方差:       y=var(X)  ||   y=var(X,1) 

  样本的标准差:      y=std(X)

  协方差矩阵:       C=cov(X)

  任意阶的中心矩:     m=moment(X,order)

  相关系数的计算:     R=corrcoef(X)

  缺失数据的处理:用NaN来标注缺失或不确定的数据,使用以nan开头的函数进行相关的计算。(求和:nansum();求均值:nanmean;最小值:nanmin;最大值:nanmax;中值:nanmedian;标准差:nanstd等等)

  例子:

  入坑MATLAB必会的吐血总结

%第一问
clear
X=[ ;
;
;
];
%几何均值
geom=geomean(X)
%调和均值
harm=harmmean(X)
%算数平均值
meanX=mean(X)
%中值
medianm=median(X)
%极差
rangem=range(X)
%方差
varx=var(X)
var1x=var(X,)
%标准差
stdX=std(X)
%协方差矩阵
covX=cov(X)
%任意阶中心距
moment1=moment(X,)
moment2=moment(X,)
moment3=moment(X,)
moment4=moment(X,)
%相关系数
R=corrcoef(X) %第二问
clear
X=[ ]' * [10 9 8 7 6 5 4 3 2 1];
%几何均值
geom=geomean(X)
%调和均值
harm=harmmean(X)
%算数平均值
meanX=mean(X)
%中值
medianm=median(X)
%极差
rangem=range(X)
%方差
varx=var(X)
%若X为向量,返回X中元素的方差;若X为矩阵,返回一个行向量,每一个元素,为对应列的方差(var(X)是经n-1进行了标准化,n为数据长度)
%对于正态分布,var(X)就成为了σ²的最小方差无偏估计量
var1x=var(X,) %经n进行了标准化,得到关于其均值(惯性矩)的样本数据的二阶矩
%标准差
stdX=std(X)
%协方差矩阵
covX=cov(X)
%任意阶中心距
moment1=moment(X,)
moment2=moment(X,)
moment3=moment(X,)
moment4=moment(X,)
%相关系数
R=corrcoef(X) %第三问
clear
m=magic();
m([ ])=[NaN NaN NaN NaN NaN];
%求和
sum1=nansum(m)
%求均值
mean1=nanmean(m)
%中值
medianm=nanmedian(m)
%方差
varx=nanvar(m)
var1x=nanvar(m,)
%标准差
stdX=nanstd(m)
%其他
nanmin(m)
nanmax(m)

四、数值分析

  有必要先提及一下数值分析的三大工具——插值、拟合、逼近。

  因为在生产和科学实验中,有时候自变量x和因变量y之间的函数关系 y=f(x) 不能写出表达式或者表达式过于复杂需要较大计算量而只能计算函数在若干点的函数值或导数值。如果你想知道其他点的函数值时,就需要估计函数在该点的值,为了估计函数在该点的值,就需要构造一个简单的函数 y=φ(x) ,使函数在观测点的值等于已知值,或者使函数在该点的导数值等于或者接近已知值。

  根据测量数据的类型寻找φ(x)有很多种方法,这里说一下插值和拟合。

  插值——测量数据的数据量小,而且数据值基本上是准确的时候。

  插值的定义:在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点(利用有限个离散点处的取值状况,估算出函数在其他点处的近似值)

  拟合——测量数据的数据量较大,或者测量值和真实值有误差时。

  拟合的定义:把平面上一系列的点,用一条光滑的曲线连接起来。因为这条曲线有无数种可能,从而有各种拟合方法。拟合的曲线一般可以用函数表示,根据这个函数的不同有不同的拟合名字。

  通俗意义上插值、拟合和逼近的区别在于:①拟合是已知点列,从整体上靠近它们;②插值是已知点列并且完全经过点列;③逼近是已知曲线,或者点列,通过逼近使得构造的函数无限靠近它们。

1.数据插值

  一维插值

  入坑MATLAB必会的吐血总结

  函数: yi = interp1(X,Y,xi,method)

  入坑MATLAB必会的吐血总结

  method

     nearest(最近邻点插值)、spline(三次样条函数插值)

     linear(线性插值)、cubic(三次函数插值,新版的三次函数插值最好把cubic改成pchip)

  对于区间[min{xi},max{xi}]之外的数据,Matlab采用外推的方式来计算。

   例子:

  入坑MATLAB必会的吐血总结

  代码:

year=::;
product=[75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,249.633,256.344,267.893];
p1995=interp1(year,product,,'spline')
x=:;
y=interp1(year,product,x,'spline');
plot(year,product,'o',x,y)

  入坑MATLAB必会的吐血总结

  二维插值

  入坑MATLAB必会的吐血总结

  函数:Zi = interp2(X,Y,Z,Xi,Yi,method)

  入坑MATLAB必会的吐血总结

  method和一维插值的那四个一样。

  例子:

  入坑MATLAB必会的吐血总结

  代码:

years=::;
service=::;
wage=[150.697 169.592 187.652
179.323 195.072 250.287
203.212 239.092 322.767
226.505 273.706 426.730
249.633 370.281 598.243];
w=interp2(service,years,wage,,)

  

  入坑MATLAB必会的吐血总结

  代码:

x=:;
y=:;
t=[,,,,,
,,,,,
,,,,,
,,,,,]
subplot(,,)
mesh(x,y,t)
x1=:0.1:;
y1=:0.1:;
[x2,y2]=meshgrid(x1,y1);
t1=interp2(x,y,t,x2,y2,'cubic');
subplot(,,)
mesh(x1,y1,t1)

  入坑MATLAB必会的吐血总结

2.数据拟合

  提到拟合,想先简单点一下最小二乘法

  最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。它的主要思想就是求解未知参数,使得理论值与观测值之差(即误差,或者说残差)的平方和达到最小:$E{\rm{ = }}\sum\limits_{i = 1}^n {{{\rm{e}}_i}^2}  = {\sum\limits_{i = 1}^n {({y_i} - \mathop y\limits^\^ )} ^2}$

  其中,观测值${{y_i}}$就是我们的多组样本,理论值${\mathop y\limits^\^ }$就是我们的假设拟合函数。目标函数也就是在机器学习中常说的损失函数E,我们的目标是得到使目标函数最小化时候的参数。

  进行数据拟合,主要有两个函数: polyfit  和  lsqcurvefit 

  polyfit是多项式曲线拟合函数  p = polyfit(x,y,n)

注:polyval 计算在x中任意元素处的多项式p的估值

  polyfit 求出已知数据x和y的n次拟合多项式f(x)的系数p,其中x、y、p都是向量,x的分量必须是单调的。

  c = lsqcurvefit(fun,c0,x,y)

   lsqcurvefit 用于各种类型曲线的拟合,c0是n维向量,与fun里的参数数目有关,用最小二乘法寻找符合经验公式的最优曲线。可用于非线性函数的数据拟合。

  入坑MATLAB必会的吐血总结

  例子:

  求如下给定数据的二次拟合曲线,并画出原始数据和拟合曲线的图形。x=[0.5,1.0,1.5,2.0,2.5,3.0],y=[1.75,2.45,3.81,4.80,7.00,8.60]

  代码:

x=[0.5,1.0,1.5,2.0,2.5,3.0];
y=[1.75,2.45,3.81,4.80,7.00,8.60];
p=polyfit(x,y,)
x1=0.5:0.05:3.0;
y1=polyval(p,x1);
plot(x,y,'*r',x1,y1,'-b')

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

  例子:

  入坑MATLAB必会的吐血总结

   例子:

  入坑MATLAB必会的吐血总结

clear
t=::;
T=[,,,,,,,,,,,,,,,,,,,,,,,,];
%二次函数
[p2,s2]=polyfit(t,T,);
T2=polyval(p2,t);
subplot(,,)
plot(t,T,'*-',t,T2);
title('二次函数拟合');
p2
deltaT2=sum((T2-T).*(T2-T)) %三次函数
[p3,s3]=polyfit(t,T,);
T3=polyval(p3,t);
subplot(,,)
plot(t,T,'*-',t,T3);
title('三次函数拟合');
p3
deltaT3=sum((T3-T).*(T3-T)) %函数C=a*exp(-b(t-c)²)
Te0=log(T);
[pe,se]=polyfit(t,Te0,);
b=pe();
c=pe()//b;
a=exp(pe()+c);
Te1=polyval(pe,t);
Te2=exp(Te1);
subplot(,,)
plot(t,T,'*-',t,Te2);
title('a*exp(-b(t-c)²)拟合');
a
b
c
deltaTe=sum((Te2-T).*(Te2-T))

入坑MATLAB必会的吐血总结

3.微分方程和微分方程组的数值解

  前面讨论的是微分方程的解析解,这里讨论常微分方程的数值解。(因为有很多的微分方程和方程组是无法求出解析解的)

  常微分方程ODE、偏微分方程PDE。

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

  以ode45为例:

>> help ode45
ode45 - Solve nonstiff differential equations — medium order method This MATLAB function, where tspan = [t0 tf], integrates the system of differential equations from t0 to tf with initial conditions y0. [t,y] = ode45(odefun,tspan,y0)
[t,y] = ode45(odefun,tspan,y0,options)
[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)
sol = ode45(___)

  解初值问题:

  入坑MATLAB必会的吐血总结

function f=fun(x,y)
f=y+*x/y;
%命令行:
ode45(@fun,[,],)

  入坑MATLAB必会的吐血总结

function f=fun(x,y)
f=y+y*y;
%命令行:
ode15s(@fun,[,0.6],)

  入坑MATLAB必会的吐血总结

function example
ode15s(@fun,[,],[,])
%----------%
function f=fun(x,y)
dy1dx = 0.04*(-y())-(-y()).*y()+0.0001*(-y()).^;
dy2dx = -1e4*dy1dx+*(-y()).^;
f=[dy1dx;dy2dx];

  入坑MATLAB必会的吐血总结

入坑MATLAB必会的吐血总结

%
%函数first_ode,假设0≤x≤
function first_ode
[T,Y]=ode45(@fun,[,],)
function f=fun(x,y)
f=-*y;
%命令行
first_ode %
%函数second_ode,假设0≤x≤
function second_ode
[T,Y]=ode15s(@fun,[,],[,])
function f=fun(x,y)
f=[y();*x/(+x*x)*y()];
%命令行输入:
second_ode %
%函数third_ode,假设0≤x≤
function third_ode
[T,Y]=ode45(@fun,[,],[,,,])
function f=fun(x,y)
f=[y();y();y();*y()-y()]
%命令行输入:
third_ode %
%函数fourth_ode,假设0≤t≤
function fourth_ode
[T,Y]=ode45(@fun,[,],[/,])
function f=fun(t,y)
dy1dt=-*y()-y();
dy2dt=y()-*y()-*dy1dt+exp(t);
f=[dy1dt;dy2dt];
%命令行输入:
fourth_ode

4.非线性方程和方程组的求解

  在MATLAB中,解决线性方程(组)和非线性方程(组)可以用solve()、fsolve()、fzero()等函数。
  ①solve()
  用来解代数方程(组)的符号解,eqnN为方程组的第N个方程,varN为第N个变量。
  主要用法:X=solve('eqn1','eqn2',...,'eqnN','var1','var2',...,'varN')

>> help solve
solve - Equations and systems solver This MATLAB function solves the equation eqn for the variable var. S = solve(eqn,var)
S = solve(eqn,var,Name,Value)
Y = solve(eqns,vars)
Y = solve(eqns,vars,Name,Value)
[y1,...,yN] = solve(eqns,vars)
[y1,...,yN] = solve(eqns,vars,Name,Value)
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)

  例子:

  入坑MATLAB必会的吐血总结

  ②fsolve()
  用来解非线性方程(组)的求解。
  主要用法:X=fsolve(fun,x0,options)

>> help fsolve
fsolve - Solve system of nonlinear equations This MATLAB function starts at x0 and tries to solve the equations fun(x) = , an array of zeros. x = fsolve(fun,x0)
x = fsolve(fun,x0,options)
x = fsolve(problem)
[x,fval] = fsolve(___)
[x,fval,exitflag,output] = fsolve(___)
[x,fval,exitflag,output,jacobian] = fsolve(___)

  例子:

  入坑MATLAB必会的吐血总结

%建立存放函数的m文件:
function y=sy35(x)
y()=x()-0.5*sin(x())-0.3*cos(x())
y()=x()-0.5*cos(x())+0.3*sin(x())
%命令行
clear
format short
x0=[0.1,0.1] %x0是变量x的初始值,其维数要与变量x的维数一致。
fsolve(@sy35,x0,optimset('fsolve')) %这里optimset部分是优化设置,可以不用

  ③fzero()
  用来解非线性方程(组)。
  主要用法:类似于fsolve()

>> help fzero
fzero - Root of nonlinear function This MATLAB function tries to find a point x where fun(x) = . x = fzero(fun,x0)
x = fzero(fun,x0,options)
x = fzero(problem)
[x,fval,exitflag,output] = fzero(___)

入坑MATLAB必会的吐血总结

%2.1,初始值为0.
X=fsolve('x-exp(-x)',0.1,optimset('fsolve')) %2.2
clear
f='5*x.^2.*sin(x)-exp(-x)';
x0=fsolve(f,:);
j=;
num()=x0();
for i=:
if (abs(x0(i+)-x0(i)>^(-)))
num(j)=x0(i+);
j=j+;
end
end
num %2.3
%定义函数sy23,可以把x记作x1,y记作x2
function y=sy23(x)
y()=x()-0.7*sin(x())-0.2*cos(x())
y()=x()-0.7*cos(x())-0.2*sin(x())
%命令行:
clear
format short
x0=[0.1,0.1];
fsolve(@sy23,x0,optimset('fsolve')) %2.4
fzero(@(x)x.^.*exp(-x.^)-0.2,)

五、优化问题求解

1.线性规划问题

  线性规划的一般形式:

  目标函数:

  入坑MATLAB必会的吐血总结

  约束条件:

  入坑MATLAB必会的吐血总结

  不等式约束矩阵:

  入坑MATLAB必会的吐血总结

  等式约束矩阵:

  入坑MATLAB必会的吐血总结

  列向量 和 为右端向量,满足约束条件的向量 入坑MATLAB必会的吐血总结被称为可行解,所有可行解的集合称为可行区域,最优解就是达到目标函数值最大的可行解。

  linprog函数——求解线性规划

  X=linprog(f,A,b)

  [X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options)

  f——由目标函数的系数构成的向量
  A——(不等式约束条件)系数矩阵
  b——(不等式约束条件)右端向量
  Aeq——(等式约束条件)系数矩阵
  Beq——(等式约束条件)右端向量
  LB——约束变量的下界
  UB——约束变量的上界
  X0——给定的变量的初始值
  options——控制规划过程的参数系列
  fval——优化结束后得到的目标函数值
  exitflag——=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;>0表示优化过程中变量收敛于解X;<0表示不收敛。
  output——有3个分量,iterations表示优化过程的迭代次数,cgiterations表示PCG迭代次数,algorithm表示优化所采用的运算规则。
  lambda——有4个分量,ineqlin是先行不等式约束条件,eqlin是线性等式约束条件,upper是变量的上界约束条件,lower是变量的下界约束条件。

  入坑MATLAB必会的吐血总结

  入坑MATLAB必会的吐血总结

clear
f=-[,];
A=[,;,;,];
b=[,,];
[X,fval]=linprog(f,A,b)

  入坑MATLAB必会的吐血总结

clear
f=-[,,];
A=[,-,;,,;,,];
b=[,,];
LB=[;;];
[X,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],LB)

  使用linprog()命令时,系统默认参数至少3个,如果要给定第5个参数,那么第4个参数也必须给出,否则系统无法认定是第五个参数,遇到无法给出时,则用空矩阵[]代替。

2.非线性优化问题

  (1) 非线性一元函数的最小值——fminbnd()

  常用格式有:

  X=fminbnd(fun,x1,x2)

  [X,fval,exitflag,output]=fminbnd(fun,x1,x2)

  其中,fun为目标函数,变量x满足边界约束x1≤ x ≤x2,X为返回的满足fun取得最小值的x的值,fval为此时的目标函数值。

  exitflag>0表示计算收敛,exitflag=0表示超过了最大迭代次数,exitflag<0表示计算不收敛。

  output有3个分量,iterations表示优化过程的迭代次数,funcCount是代入函数值的次数,algorithm是优化算法。

>> help fminbnd
fminbnd - Find minimum of single-variable function on fixed interval This MATLAB function returns a value x that is a local minimizer of the scalar valued function that is described in fun in the interval x1 < x < x2. x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
x = fminbnd(problem)
[x,fval] = fminbnd(___)
[x,fval,exitflag] = fminbnd(___)
[x,fval,exitflag,output] = fminbnd(___)

  入坑MATLAB必会的吐血总结

clear
fun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))';
ezplot(fun,[-,])
[X,fval,exitflag,output]=fminbnd(fun,-,)

  入坑MATLAB必会的吐血总结

X =    0.2176

fval =   -1.1312

exitflag =     

output =
iterations:
funcCount:
algorithm: 'golden section search, parabolic interpolation'

  (2) 无约束非线性多元变量的优化

  两个命令:

  fminsearch() 适合处理阶次低但是间断点多的函数

  fminunc() 适合处理高阶连续函数

  Ⅰ、fminsearch()的格式:

  X=fminsearch(fun,X0)

  [X,fval,exitflag,output]=fminsearch(fun,X0,options)

  该命令求解目标函数fun的最小值和相应的x值。

  X0为x的初始值,fval为返回的函数值,exitflag>0表示计算收敛,exitflag=0表示超过了最大迭代次数,exitflag<0表示计算不收敛。exitflag>0表示计算收敛,exitflag=0表示超过了最大迭代次数,exitflag<0表示计算不收敛。(好叭,说过好几遍了)

  options是一个结构,里面有控制优化过程的各种参数,参考optimset()命令来设置,一般情况不必改动(缺省即可)。

>> help fminsearch
fminsearch - Find minimum of unconstrained multivariable function using derivative-free method This MATLAB function starts at the point x0 and attempts to find a local minimum
x of the function described in fun. x = fminsearch(fun,x0)
x = fminsearch(fun,x0,options)
x = fminsearch(problem)
[x,fval] = fminsearch(___)
[x,fval,exitflag] = fminsearch(___)
[x,fval,exitflag,output] = fminsearch(___)

  入坑MATLAB必会的吐血总结

clear
fun1='sin(x)*sin(x)+cos(y)';
fun2='sin(x(1))*sin(x(1))+cos(x(2))';
ezmesh(fun1)
[X,fval]=fminsearch(fun2,[,])

  入坑MATLAB必会的吐血总结

  Ⅱ、fminunc()的格式:

  X=fminunc(fun,X0)

  [X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)

  该命令通过计算寻找多变量目标函数fun的最小值,X0为优化的初始值,X为返回的变量的值,grad返回解点的梯度,hessian返回解点的汉森矩阵,其他参数同上。

>> help fminunc
fminunc - Find minimum of unconstrained multivariable function This MATLAB function starts at the point x0 and attempts to find a local minimum
x of the function described in fun. x = fminunc(fun,x0)
x = fminunc(fun,x0,options)
x = fminunc(problem)
[x,fval] = fminunc(___)
[x,fval,exitflag,output] = fminunc(___)
[x,fval,exitflag,output,grad,hessian] = fminunc(___)

  入坑MATLAB必会的吐血总结

clear
fun='exp(x(1))*(2*x(1)^2+3*x(2)^2+2*x(1)*x(2)+3*x(2)+1)';
X0=[,];
options=optimset('largescale','off','display','iter','tolx',1e-,'tolfun',1e-);
[X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)

3.有约束非线性多变量优化问题

  fmincon()——处理有约束的非线性多元函数的优化问题。

  有约束多变量优化问题的数学模型为:

  求一组变量入坑MATLAB必会的吐血总结,满足在给定的约束条件下,使目标函数入坑MATLAB必会的吐血总结最小。

  目标函数一般为非线性函数,约束条件有:

  入坑MATLAB必会的吐血总结

  fmincon()的格式如下:

  X = fmincon(fun,x0,A,b)
  X = fmincon(fun,x0,A,b,Aeq,beq,Lb,Ub)
  X = fmincon(fun,x0,A,b,Aeq,beq,Lb,Ub,nonlcon,options)
  [X,fval,exitflag,output] = fmincon(fun,x0,...)
  [X,fval,exitflag,output,lambda,grad,Hessian] = fmincon(fun,x0,...)

  fun是目标函数,x0是变量的初始值,X为返回的满足要求的变量的值,返回值fval为目标函数。

  A和b是线性不等式约束,Aeq和Beq表示线性等式约束,Lb和Ub分别为变量的上界和下界约束,nonlcon表示非线性约束条件。

  lambda为拉格朗日乘子,显示哪个约束条件有效,grad表示梯度,hessian为汉森矩阵,options为控制优化过程的优化参数向量。

>> help fmincon
fmincon - Find minimum of constrained nonlinear multivariable function This MATLAB function starts at x0 and attempts to find a minimizer x of the function described in fun subject to the linear inequalities A*x ≤ b. x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(problem)
[x,fval] = fmincon(___)
[x,fval,exitflag,output] = fmincon(___)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)

命令总结 (地址)适用于复习

一、常用对象操作:除了一般windows窗口的常用功能键外。
1、!dir 可以查看当前工作目录的文件。   !dir& 可以在dos状态下查看。
2、who  可以查看当前工作空间变量名,    whos 可以查看变量名细节。
3、功能键:
功能键             快捷键           说明
方向上键           Ctrl+P          返回前一行输入
方向下键           Ctrl+N          返回下一行输入
方向左键           Ctrl+B          光标向后移一个字符
方向右键           Ctrl+F          光标向前移一个字符
Ctrl+方向右键      Ctrl+R          光标向右移一个字符
Ctrl+方向左键      Ctrl+L          光标向左移一个字符
home              Ctrl+A          光标移到行首
End               Ctrl+E          光标移到行尾
Esc               Ctrl+U          清除一行
Del               Ctrl+D          清除光标所在的字符
Backspace         Ctrl+H          删除光标前一个字符                              Ctrl+K          删除到行尾          
                  Ctrl+C          中断正在执行的命令
4、clc可以命令窗口显示的内容,但并不清除工作空间。
二、函数及运算
1、运算符:
+:加,  -:减,  *:乘,  /: 除, \:左除  ^:  幂,‘:复数的共轭转置, ():制定运算顺序。
2、常用函数表:
sin( )    正弦(变量为弧度)   
cot( )    余切(变量为弧度)
sind( )     正弦(变量为度数)  
cotd( )       余切(变量为度数)
asin( )       反正弦(返回弧度)     
acot( )       反余切(返回弧度)    
asind( )     反正弦(返回度数)    
acotd( )     反余切(返回度数)    
cos( )        余弦(变量为弧度)     
exp( )       指数     
cosd( )     余弦(变量为度数)   
log( )        对数   
acos( )     余正弦(返回弧度)   
log10( )    以10为底对数
acosd( )   余正弦(返回度数)     
sqrt( )      开方       
tan( )       正切(变量为弧度)      
realsqrt( ) 返回非负根
tand( )      正切(变量为度数)        
abs( )       取绝对值   
atan( )      反正切(返回弧度)     
angle( )    返回复数的相位角
atand( )    反正切(返回度数)        
mod(x,y)  返回x/y的余数   
sum(  )     向量元素求和
3、其余函数可以用 help elfun 和 help specfun 命令获得。
4、常用常数的值:
pi                    3.1415926…….         
realmin           最小浮点数,2^-1022
realmax          最大浮点数,(2-eps)2^1022
i                      虚数单位              
j                      虚数单位           
Inf                  无限值
eps                浮点相对经度=2^-52           
NaN              空值
三、数组和矩阵:
1、构造数组的方法:增量法 linspace(first,last,num) first和last为起始和终止数,num为需要的数组元素个数。
2、构造矩阵的方法:可以直接用[ ]来输入数组,也可以用以下提供的函数来生成矩阵。
ones( )       创建一个所有元素都为1的矩阵,其中可以制定维数,1,2….个变量
zeros()       创建一个所有元素都为0的矩阵
eye()          创建对角元素为1,其他元素为0的矩阵
diag()        根据向量创建对角矩阵,即以向量的元素为对角元素
magic()     创建魔方矩阵
rand()       创建随机矩阵,服从均匀分布
randn()     创建随机矩阵,服从正态分布
randperm()      创建随机行向量
horcat              C=[A,B],水平聚合矩阵,还可以用cat(1,A,B)
vercat              C=[A;B],垂直聚合矩阵, 还可以用cat(2,A,B)
repmat(M,v,h)          将矩阵M在垂直方向上聚合v次,在水平方向上聚合h次
blkdiag(A,B)     以A,和B为块创建块对角矩阵
length              返回矩阵最长维的的长度
ndims              返回维数
numel              返回矩阵元素个数
size                 返回每一维的长度,[rows,cols]=size(A)
reshape          重塑矩阵,reshape(A,2,6),将A变为2×6的矩阵,按列排列。
rot90               旋转矩阵90度,逆时针方向
fliplr                沿垂轴翻转矩阵
flipud              沿水平轴翻转矩阵
transpose       沿主对角线翻转矩阵
ctranspose     转置矩阵,也可用A’或A.’,这仅当矩阵为复数矩阵时才有区别
inv                  矩阵的逆
det                 矩阵的行列式值
trace               矩阵对角元素的和
norm               矩阵或矢量的范数,norm(a,1),norm(a,Inf)…….
normest          估计矩阵的最大范数矢量
chol                矩阵的cholesky分解
cholinc           不完全cholesky分解
lu                   LU分解
luinc              不完全LU分解
qr                  正交分解
kron(A,B)        A为m×n,B为p×q,则生成mp×nq的矩阵,A的每一个元素都会乘上B,并占据p×q大小的空间
rank              求出矩阵的刺
pinv              求伪逆矩阵
A^p               对A进行操作
A.^P              对A中的每一个元素进行操作
四、数值计算
1、线性方程组求解
(1)AX=B的解可以用X=A\B求。XA=B的解可以用X= A/B求。如果A是m×n的矩阵,当m=n时可以找到唯一解,m<n,不定解,解中至多有m个非零元素。如果m>n,超定系统,至少找到一组解。如果A是奇异的,且AX=B有解,可以用X=pinv(A)×B返回最小二乘解
(2)AX=b,  A=L×U,[L,U]=lu(A),  X=U\(L\b),即用LU分解求解。
(3)QR(正交)分解是将一矩阵表示为一正交矩阵和一上三角矩阵之积,A=Q×R[Q,R]=chol(A),  X=Q\(U\b)
(4)cholesky分解类似。
2、特征值
D=eig(A)返回A的所有特征值组成的矩阵。[V,D]=eig(A),还返回特征向量矩阵。
3、A=U×S×UT,[U,S]=schur(A).其中S的对角线元素为A的特征值。
4、多项式Matlab里面的多项式是以向量来表示的,其具体操作函数如下:
conv             多项式的乘法
deconv         多项式的除法,【a,b】=deconv(s),返回商和余数
poly              求多项式的系数(由已知根求多项式的系数)
polyeig         求多项式的特征值
Polyfit(x,y,n)        多项式的曲线拟合,x,y为被拟合的向量,n为拟合多项式阶数。
polyder         求多项式的一阶导数,polyder(a,b)返回ab的导数
[a,b]=polyder(a,b)   返回a/b的导数。
polyint          多项式的积分
polyval         求多项式的值
polyvalm      以矩阵为变量求多项式的值
residue        部分分式展开式
roots           求多项式的根(返回所有根组成的向量)
注:用ploy(A)求出矩阵的特征多项式,然后再求其根,即为矩阵的特征值。
5、插值常用的插值函数如下:
griddata         数据网格化合曲面拟合
Griddata3      三维数据网格化合超曲面拟合
interp1           一维插值(yi=interp1(x,y,xi,’method’)Method=nearest/linear/spline/pchip/cubic
Interp2           二维插值zi=interp1(x,y,z,xi,yi’method’),bilinear
Interp3           三维插值
interpft          用快速傅立叶变换进行一维插值,help fft。
mkpp            使用分段多项式
spline            三次样条插值
pchip            分段hermit插值
6、函数最值的求解
fminbnd(‘f’,x1,x2,optiset(,))求f在 x1和x2之间的最小值。Optiset选项可以有‘Display’+‘iter’/’off’/’final’,分别表示显示计算过程/不显示/只显示最后结果。fminsearch求多元函数的最小值。fzero(‘f’,x1)求一元函数的零点。X1为起始点。同样可以用上面的选项。
五、图像绘制:

1、基本绘图函数
plot               绘制二维线性图形和两个坐标轴
plot3            绘制三维线性图形和两个坐标轴
fplot             在制定区间绘制某函数的图像。fplot(‘f’,区域,线型,颜色)
loglog          绘制对数图形及两个坐标轴(两个坐标都为对数坐标)semilogx        绘制半对数坐标图形
semilogy     绘制半对数坐标图形
2、线型:   颜色           线型
        y   黄色             .     圆点线         v        向下箭头
        g   绿色             -.   组合           >        向右箭头
        b   蓝色            +    点为加号形        <        向左箭头
        m   红紫色        o    空心圆形           p         五角星形
        c   蓝紫色         *    星号              h         六角星形
        w   白色            .   实心小点        hold on   添加图形
        r   红色             x   叉号形状          grid on  添加网格
        k   黑色            s   方形              -           实线       
        d   菱形            --   虚线             ^         向上箭头     
3、可以用subplot(3,3,1)表示将绘图区域分为三行三列,目前使用第一区域。此时如要画不同的图形在一个窗口里,需要hold on。
附录1.1 管理用命令
函数名             功能描述                 函数名           功能描述
addpath    增加一条搜索路径         rmpath       删除一条搜索路径
demo        运行Matlab演示程序       type           列出.M文件
doc           装入超文本文档           version        显示Matlab的版本号
help          启动联机帮助                what          列出当前目录下的有关文件
lasterr     显示最后一条信息       whatsnew      显示Matlab的新特性
lookfor    搜索关键词的帮助          which        造出函数与文件所在的目录
path       设置或查询Matlab路径

附录1.2管理变量与工作空间用命令 
函数名         功能描述                                  函数名       功能描述
clear      删除内存中的变量与函数               pack          整理工作空间内存
disp      显示矩阵与文本                               save          将工作空间中的变量存盘
length   查询向量的维数                               size           查询矩阵的维数
load      从文件中装入数据                          who,whos   列出工作空间中的变量名

附录1.3文件与操作系统处理命令 
函数名       功能描述                      函数名          功能描述
cd           改变当前工作目录           edit               编辑.M文件
delete     删除文件                         matlabroot    获得Matlab的安装根目录
diary      将Matlab运行命令存盘    tempdir         获得系统的缓存目录
dir          列出当前目录的内容       tempname    获得一个缓存(temp)文件
!             执行操作系统命令

附录1.4窗口控制命令 
函数名      功能描述                                    函数名    功能描述
echo        显示文件中的Matlab中的命令    more    控制命令窗口的输出页面
format      设置输出格式

附录1.5启动与退出命令 
函数名         功能描述      函数名     功能描述
matlabrc      启动主程序    quit        退出Matlab环境
startup        Matlab自启动程序

附录2 运算符号与特殊字符附录
2.1运算符号与特殊字符
函数名    功能描述    函数名    功能描述
+                 加              ...        续行标志
-                  减              ,          分行符(该行结果不显示)
*               矩阵乘          ;         分行符(该行结果显示)
.*              向量乘         %        注释标志
^              矩阵乘方       !         操作系统命令提示符
.^             向量乘方       '         矩阵转置
kron         矩阵kron积   .         向量转置
\               矩阵左除      =        赋值运算
/               矩阵右除     ==      关系运算之相等
.\              向量左除     ~=      关系运算之不等
./              向量右除      <       关系运算之小于
:      向量生成或子阵提取   <=    关系运算之小于等于
()    下标运算或参数定义    >    关系运算之大于
[]             矩阵生成       >=    关系运算之大于等于
&           逻辑运算之与
.         结构字段获取符       |    逻辑运算之或
.         点乘运算,常与其他运算符联合使用(如.\)

~       逻辑运算之非
xor    逻辑运算之异成

附录2.2逻辑函数 
函数名    功能描述                                    函数名                              功能描述
all          测试向量中所用元素是否为真     is*(一类函数)      检测向量状态.其中*表示一个确定的函数(isinf)
any       测试向量中是否有真元素             *isa                     检测对象是否为某一个类的对象
exist     检验变量或文件是否定义             logical                 将数字量转化为逻辑量
find      查找非零元素的下标

附录3 语言结构与调试
附录3.1编程语言 
函数名          功能描述                             函数名       功能描述
builtin    执行Matlab内建的函数               global         定义全局变量
eval      执行Matlab语句构成的字符串     nargchk      函数输入输出参数个数检验
feval     执行字符串指定的文件                script          Matlab语句及文件信息
function    Matlab函数定义关键词

附录3.2控制流程 
函数名        功能描述                                      函数名    功能描述
break         中断循环执行的语句                       if    条件转移语句
case          与switch结合实现多路转移         otherwise    多路转移中的缺省执行部分
else           与if一起使用的转移语句              return    返回调用函数
elseif         与if一起使用的转移语句              switch    与case结合实现多路转移
end           结束控制语句块                           warning    显示警告信息
error         显示错误信息                               while    循环语句
for            循环语句

附录3.3交互输入 
函数名        功能描述         函数名     功能描述
input           请求输入          menu      菜单生成
keyboard    启动键盘管理   pause     暂停执行

附录3.4面向对象编程 
函数名         功能描述                 函数名         功能描述
class           生成对象                  isa                判断对象是否属于某一类
double        转换成双精度型       superiorto     建立类的层次关系
inferiorto    建立类的层次关系     unit8             转换成8字节的无符号整数
inline         建立一个内嵌对象

附录3.5调试 
函数名       功能描述                           函数名           功能描述
dbclear    清除调试断点                     dbstatus        列出所有断点情况
dbcont     调试继续执行                     dbstep           单步执行
dbdown   改变局部工作空间内存       dbstop          设置调试断点
dbmex    启动对Mex文件的调试        sbtype           列出带命令行标号的.M文件
dbquit     退出调试模式                      dbup              改变局部工作空间内容
dbstack   列出函数调用关系

附录4 基本矩阵与矩阵处理
附录4.1基本矩阵 
函数名        功能描述                              函数名       功能描述
eye            产生单位阵                            rand          产生随机分布矩阵
linspace     构造线性分布的向量             randn        产生正态分布矩阵
logspace    构造等对数分布的向量         zeros         产生零矩阵
ones           产生元素全部为1的矩阵          :              产生向量

附录4.2特殊向量与常量 
函数名              功能描述                         函数名     功能描述
ans               缺省的计算结果变量            non         非数值常量常由0/0或Inf/Inf获得
computer     运行Matlab的机器类型         nargin     函数中参数输入个数
eps              精度容许误差(无穷小)          nargout    函数中输出变量个数
flops            浮点运算计数                         pi            圆周率
i                   复数单元                             realmax    最大浮点数值
inf               无穷大                                  realmin     最小浮点数值
inputname   输入参数名                         varargin     函数中输入的可选参数
j                  复数单元                             varargout    函数中输出的可选参数

附录4.3时间与日期 
函数名             功能描述            函数名                功能描述
calender          日历                   eomday              计算月末
clock                时钟                  etime                   所用时间函数 
cputime    所用的CPU时间        now                    当前日期与时间
date                 日期                   tic                      启动秒表计时器
datenum    日期(数字串格式)    toc                     读取秒表计时器
datestr       日期(字符串格式)    weekday               星期函数
datevoc     日期(年月日分立格式)

附录4.4矩阵处理 
函数名        功能描述                                   函数名        功能描述
cat             向量连接                                    reshape     改变矩阵行列个数
diag          建立对角矩阵或获取对角向量    rot90          将矩阵旋转90度
fliplr          按左右方向翻转矩阵元素           tril               取矩阵的下三角部分
flipud        按上下方向翻转矩阵元素           triu              取矩阵的上三角部分
repmat    复制并排列矩阵函数

附录5 特殊矩阵 
函数名         功能描述                            函数名      功能描述
compan       生成伴随矩阵                     invhilb      生成逆hilbert矩阵
gallery         生成一些小的测试矩阵      magic       生成magic矩阵
hadamard    生成hadamard矩阵           pascal      生成pascal矩阵
hankel         生成hankel矩阵                 toeplitz     生成toeplitz矩阵
hilb              生成hilbert矩阵                  wilkinson  生成wilkinson特征值测试矩阵 
附录6 数学函数
附录6.1三角函数 
函数名               功能描述                                   函数名            功能描述
sin/asin           正弦/反正弦函数                          sec/asec       正割/反正割函数
sinh/asinh    双曲正弦/反双曲正弦函数               sech/asech    双曲正割/反双曲正割函数
cos/acos      余弦/反余弦函数                             csc/acsc         余割/反余割函数
cosh/acosh  双曲余弦/反双曲余弦函数               csch/acsch    双曲余割/反双曲余割函数
tan/atan       正切/反正切函数                             cot/acot         余切/反余切函数
tanh/atanh    双曲正切/反双曲正切函数              coth/acoth    双曲余切/反双曲余切函数
atan2           四个象限内反正切函数

附录6.2指数函数 
函数名    功能描述            函数名    功能描述
exp        指数函数             log10     常用对数函数
log         自然对数函数      sqrt       平方根函数

附录6.3复数函数 
函数名    功能描述          函数名    功能描述
abs         绝对值函数      imag       求虚部函数
angle     角相位函数       real        求实部函数
conj       共轭复数函数

附录6.4数值处理 
函数名         功能描述                  函数名     功能描述
fix           沿零方向取整                round      舍入取整
floor        沿-∞方向取整               rem         求除法的余数
ceil         沿+∞方向取整               sign        符号函数

附录6.5其他特殊数学函数 
函数名            功能描述                            函数名    功能描述
airy                 airy函数                              erfcx      比例互补误差函数
besselh     bessel函数(hankel函数)          erfinv    逆误差函数
bessili      改进的第一类bessel函数       expint    指数积分函数
besselk    改进的第二类bessel函数         gamma    gamma函数
besselj    第一类bessel函数                     gammainc    非完全gamma函数
bessely   第二类bessel函数                     gammaln    gamma对数函数
beta               beta函数                            gcd             最大公约数
betainc    非完全的beta函数                    lcm             最小公倍数
betaln            beta对数函数                     log2            分割浮点数
elipj              Jacobi椭圆函数                   legendre     legendre伴随函数
ellipke      完全椭圆积分                          pow2           基2标量浮点数
erf                误差函数                             rat                有理逼近
erfc            互补误差函数                        rats              有理输出

 
上一篇:ES6标准


下一篇:下载abap 源代码