matlab培训讲义Word下载.docx
《matlab培训讲义Word下载.docx》由会员分享,可在线阅读,更多相关《matlab培训讲义Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
⏹双击变量查看该程序的所有的该变量
⏹做标记Ctrl+F2更多右键信息
⏹设置断点,F5,F10,F11,GountilCursor
⏹分块执行%%
⏹程序中断:
命令窗口输入Ctrl+C
cell模式%%按住Ctrl+Enter
解方程
●线性方程
●非线性方程
●隐函数方程
●带参数的方程求解
●微分方程
●积分方程
线性方程组Ax=b
x=A\b
矩阵的分解求解线性方程组
矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。
常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。
(具体可以查看帮助文件)
非线性方程求解
●函数:
fzero求解单变量非线性方程的根
基本用法:
z=fzero('
fname'
x0,tol,trace)
例子:
初值的选取
Datacursor获取坐标
ar
fsolve
X=fsolve(@fun,x0,options)
clc;
clear;
closeall
f{1}=inline('
x-0.6*sin(x)-0.3*cos(y)'
);
f{2}=inline('
y-0.6*cos(x)+0.3*sin(y)'
holdon
h=arrayfun(@(i)ezplot(f{i},[-1,1,-1,1]),[1,2]);
set(h
(1),'
color'
'
r'
)
functiony=myfun(x)
y
(1)=x
(1)-0.6*sin(x
(1))-0.3*cos(x
(2));
y
(2)=x
(2)-0.6*cos(x
(1))+0.3*sin(x
(2));
end
隐函数的求解
给定一个隐函数的自变量,通过数值方法求解得到因变量。
输入一个数组:
>
f=@(x)@(y)(exp(y)+x.^y).^(1/y)-x.^2.*y
f1=@(x)arrayfun(@(a)fsolve(f(a),rand),x)
f=
@(x)@(y)(exp(y)+x.^y).^(1/y)-x.^2.*y
f1=
@(x)arrayfun(@(a)fsolve(f(a),rand),x)
f1就是一个匿名函数,输入可以是一个数组。
带参数的非线性方程的求解
a=[1368532112];
b=-fliplr(a);
xy=zeros(2,length(a));
index=1:
length(b);
m=arrayfun(@(t)fsolve(@(x)myfun1(x,a(t),b(t)),xy(:
t)),index,'
UniformOutput'
false);
微分方程
常微分方程求解:
解析解的求解,用dsolve函数。
dsolve('
eq1'
eq2'
...,'
cond1'
cond2'
v'
具体可以查看下帮助文件。
当微分方程不能得到解析解,matlab有许多函数求解微分方程得到数值解。
函数:
ode45
[T,Y]=solver(odefun,tspan,y0,options)
下面看一个例子:
functiondy=myfun_3(x,y)
dy=zeros(2,1);
dy
(1)=cos(y
(1)-sin(x+y
(2))+dy
(2))-sin(2*x/y
(1)+y
(2));
dy
(2)=-2*x*y
(2)+y
(1)+sin(x-dy
(1))*y
(1);
options=odeset('
RelTol'
1e-4,'
AbsTol'
[1e-41e-4]);
[T,Y]=ode45(@myfun_3,[02.5],[10.25],options);
plot(T,Y(:
1),'
r*-'
T,Y(:
2),'
b+-'
二阶微分方程的求解(帮助文件exmple2)
对于多阶方程的求解主要是自己使用相关的算法(欧拉法、二阶或四阶龙格库塔法求解得到数值解)
Ode45ode23等
带参数的微分方程
lorenzeq=@(t,x,beta,rou,sig)[-beta*x
(1)+x
(2)*x(3);
rou*x
(2)+rou*x(3);
-x
(1)*x
(2)+sig*x
(2)-x(3)];
beta=2;
rou=5;
sig=20;
t_final=100;
x0=[001e-10];
[t,x]=ode45(@(t,x)lorenzeq(t,x,beta,rou,sig),[0,t_final],x0);
plot(t,x);
figure;
plot3(x(:
1),x(:
2),x(:
3));
axis([1042-2020-2025])
其他类型
●单个高阶微分方程
●高阶常微分方程
●隐式微分方程
●微分代数方程
●延迟微分方程
●边值问题
●偏微分方程
●Simulink求解
●见《高等应用数学问题的matlab求解》
拟合
线性回归
非线性拟合
Regress查看帮助文件
Cftool
Sftool
参考matlab技术论坛电子期刊第三期
查看一个简单的例子
帮助文件
functionyhat=hougen(beta,x)
b1=beta
(1);
b2=beta
(2);
b3=beta(3);
b4=beta(4);
b5=beta(5);
x1=x(:
1);
x2=x(:
2);
x3=x(:
3);
yhat=(b1*x2-x3/b5)./(1+b2*x1+b3*x2+b4*x3);
loadreaction
beta=nlinfit(reactants,rate,@hougen,beta);
积分
●quad
●quadl
●quad2d
●triplequad
●等
2次积分
3次积分
高次积分
蒙特卡洛法
优化
优化工具箱提供了一般和大型的非线性优化函数,同时提供了了线性规划,二次规划,非线性最小二乘以及非线性方程的求解的工具。
•主要特性:
–无约束非线性极小化问题
–约束性线性极小化、极大极小、多目标优化,半无穷极小化问题。
–二次规划和线性规划问题
–非线性最小二乘和边界曲线拟合问题
–非线性系统方程求解问题
–约束线性最小二乘问题
–大型问题的特殊算法
优化工具箱简介:
下面我们看几个咱们一般常用的函数。
单目标优化问题求解的函数
(1)、函数:
fminband
用于求解一元函数在区间中的极小值
x=fminbnd(fun,x1,x2,options)
例子可以查看下帮助文件。
(2)、函数:
fminsearch
基于单纯形算法求一元函数或多元函数的极小值点和函数值
x=fminsearch(fun,x0,options)
closeall;
f=inline('
x
(1)+x
(2).^2./(4*x
(1))+x(3).^2./x
(2)+2./x(3)'
options=optimset('
PlotFcns'
@optimplotfval,'
Display'
Iter'
[x,fval,exitflag]=fminsearch(f,[0.50.50.5],options);
(3)、函数:
fminunc
基于拟牛顿法求无约束条件下多元函数的极小值点和最小值。
[x,fval]=fminunc(filename,x0,option)
例子省略(帮助文件)。
(4)、函数:
fmincon
专门用于求解各种约束下的最优化问题。
[x,fval]=fmincon(filename,x0,A,b,Aeq,beq,Lb,Ub,Non,option)
建立目标函数;
functiony=myfun_5(x)
y=x
(1).^3+x
(2).^2-4*x
(1)+4;
建立约束非线性条件:
function[c,ceq]=non(x)
c=x
(1).^2-x
(2)+1;
ceq=[];
主程序:
lb=[0,0];
A=[-11];
b=2;
x0=[10,10];
options=optimset;
options.Display='
iter-detailed'
;
options.Algorithm='
interior-point'
%options=optimset('
Algorithm'
sqp'
@optimplotx);
[x,fval,exitflag]=fmincon(@myfun_5,x0,A,b,[],[],lb,[],@non,options);
(5)、函数:
ga
x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
functiony=myfun_6(x)
y=100*(x
(1)^2-x
(2))^2+(1-x
(1))^2;
function[c,ceq]=constrain(x)
c=[1.5+x
(1)*x
(2)+x
(1)-x
(2);
-x
(1)*x
(2)+10];
nvars=2;
lb=[00];
ub=[113];
options=gaoptimset('
{@gaplotbestf,@gaplotmaxconstr},'
iter'
[x,fval]=ga(@myfun_6,nvars,[],[],[],[],lb,ub,@constrain,options);
Ga算法的参数设置:
遗传算法是从一个种群开始对问题的最优解搜索,更有利于全局最优化解的搜索,但遗传算法需要指定各个自变量的范围,不能像最优化工具箱中可以使用无穷区间的概念;
该算法也不依赖于导数信息或其它辅助信息就能进行最优搜索,但遗传算法采用的是概率性规则而不是确定性规则,所以每次得出的结果不完全相同。
多目标优化问题算法:
1、权和法
该法将多目标向量问题转化为所有目标的加权求和的标量问题,即:
加权因子的选取方法许多,有专家打分法、
分法、容限法和加权因子分解法等。
该问题可以用标准的无约束最优化算法进行求解。
直接转化为单目标优化问题求解,可以使用单目标规划函数。
2、
约束法
约束法克服权和法的某些凸型问题。
它对目标函数向量中的主要目标
进行最小化,将其他目标用不等式约束形式写出:
将多目标同样转化为单目标问题,可以使用上面介绍的函数fmincon进行求解。
3、目标达到法
目标函数系列为
,对应地有其目标值系列
。
这个可以目标函数有正负偏差,偏差的大小由加权系数向量
控制,于是目标达到问题可以表达为标准的最优化问题:
指定目标
,定义目标点
权重向量定义从
到可行域空间
的搜索方向,在优化过程中,
的变化改变可行域的大小,约束边界变为唯一解点
Matlab该算法的函数:
fgoalattain
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,...options)
详细看程序。
4、目标达到法改进
目标达到法的一个好处是可以将多目标优化问题转化为非线性规划问题。
但是,在序列二次规划
过程中,一维搜索的目标函数选择不是一件容易的事情,因为在很多情况下,很难决定是使目标函数变大还是变小好,这导致许多目标函数创建过程中的提出。
可以通过将目标达到问题变为最大最小问题来获得更合适的目标函数。
(例如城市规划中确定急救中心、消防中心的位置确定,可取的目标函数应该是到所有地点最大距离的最小值)
fminimax
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
具体可以查看相关的例子。