MATLAB总结与上机指南_matlab总结与上机指南
MATLAB总结与上机指南由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“matlab总结与上机指南”。
化工计算中常用的MATLAB命令总结
化学工程中的计算问题一般比较复杂, 其操作的数据对象通常是数组, 具体计算涉及到插值、求积分、参数拟合、解常微分和偏微分微分方程、解线性和非线性方程等。MATLAB是新一代的科学计算语言, 在解决上述问题上, 相对于FORTRAN、C 和BASIC等传统的计算语言具有明显的优越性。本文针对应用MATLAB 解决化工中的典型问题进行计算常用方法和命令做以小结。1.最小二乘法拟合 1.1 最小二乘拟合直线
函数
lsline 格式
lsline
%最小二乘拟合直线
h = lsline
%h为直线的句柄 1.2约束线性最小二乘
有约束线性最小二乘的标准形式为
minx1Cxd222
sub.to
Axb
Aeqxbeq
lbxub
其中:C、A、Aeq为矩阵;d、b、beq、lb、ub、x是向量。在MATLAB5.x中,约束线性最小二乘用函数conls求解。
函数
lsqlin
格式
x = lsqlin(C,d,A,b)
%求在约束条件Axb下,方程Cx = d的最小二
乘解x。
x = lsqlin(C,d,A,b,Aeq,beq)
%Aeq、beq满足等式约束Aeqxbeq,若没有不等式约束,则设A=[ ],b=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
%lb、ub满足lbxub,若没有等
式约束,则Aeq=[ ],beq=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
% x0为初始解向量,若x没有界,则lb=[ ],ub=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
% options为指定优化参数 [x,resnorm] = lsqlin(…)
% resnorm=norm(C*x-d)^2,即2-范数。[x,resnorm,residual] = lsqlin(…)
%residual=C*x-d,即残差。
[x,resnorm,residual,exitflag] = lsqlin(…)
%exitflag为终止迭代的条件 [x,resnorm,residual,exitflag,output] = lsqlin(…)
% output表示输出优化
信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…)
% lambda为解x的Lagrange乘子
1.3 非线性最小二乘
非线性最小二乘(非线性数据拟合)的标准形式为
minxf(x)f1(x)2f2(x)2fm(x)2L
其中:L为常数
在MATLAB5.x中,用函数leastsq解决这类问题,在6.0版中使用函数lsqnonlin。
f1(x)f2(x) 设F(x)fm(x)则目标函数可表达为minx12F(x)221fi(x)2 2i其中:x为向量,F(x)为函数向量。函数
lsqnonlin 格式
x = lsqnonlin(fun,x0)
%x0为初始解向量;fun为fi(x),i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。
lbxubx = lsqnonlin(fun,x0,lb,ub)
%lb、ub定义x的下界和上界:。
x = lsqnonlin(fun,x0,lb,ub,options)
%options为指定优化参数,若x没有界,则lb=[ ],ub=[ ]。
[x,resnorm] = lsqnonlin(…)% resnorm=sum(fun(x).^2),即解x处函数值。[x,resnorm,residual] = lsqnonlin(…)
% residual=fun(x),即解x处fun的值。[x,resnorm,residual,exitflag] = lsqnonlin(…)
%exitflag为终止迭代条件。[x,resnorm,residual,exitflag,output] = lsqnonlin(…)%output输出优化信息。[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…)
%lambda为
Lagrage乘子。
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…)
%fun
在解x处的Jacobian矩阵。
多项式 2.1 多项式求值
函数名称:polyval 调用格式:y=polyval(p,x),[y,delta]=polyval(p,x,S)返回多项式p在x点处的取值。X可以是向量也可以是矩阵。[y,delta] = polyval(p,x,S)同时还生成误差估计。2.2 多项式求根
函数名称:roots 调用格式:r=roots(c)
返回一个元素为多项式c的根的列向量。行向量中包含按降幂排列的多项式的系数,如果c中包含n+1个元素,则多项式的表达式为:c1sn+…+cns+cn+1。3 插值 3.1 一维插值
函数名称:interp1 调用格式:yi=interp1(x,Y,xi), yi=interp1(x,Y,xi,method)MATLAB中有两类一维数据插值方法:多项式插值法和基于FFT的插值法。函数interp1采用多项式插值法,它用多项式拟合所给出的数据,然后在插值点上根据多项式算出相应的值。调用格式中,xi为需要插值的位置所组成的向量,yi 为根据插值算法求得的值所组成的向量。x,Y为已知的数据点向量。参数method用于确定具体的插值方法,包括:
‘linear’表示采用线性插值方法;‘cubic’表示采用三次插值的方法; ‘nearest’表示采用最近点插值法;‘spline’表示用三次样条插值方法。3.2 二维插值
函数名称:interp2 调用格式
ZI = interp2(X,Y,Z,XI,YI)
返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。
ZI = interp2(Z,XI,YI)
缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按 ’nearest’:最临近插值; ’spline’:三次样条插值; ’cubic’:双三次插值。非线性数据(曲线)拟合非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。今进行曲线拟合,求x使得下式成立:
minx1F(x,xdata)ydata2221(F(x,xdatai)ydatai)2 2i在MATLAB5.x中,使用函数curvefit解决这类问题。函数
lsqcurvefit 格式
x = lsqcurvefit(fun,x0,xdata,ydata)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)[x,resnorm] = lsqcurvefit(…)[x,resnorm,residual] = lsqcurvefit(…)[x,resnorm,residual,exitflag] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)参数说明:
x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据; lb、ub为解向量的下界和上界lbxub,若没有指定界,则lb=[ ],ub=[ ];
options为指定的优化参数;
fun为拟合函数,其定义方式为:x = lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定义为
function F = myfun(x,xdata)F = …
% 计算x处拟合函数值fun的用法与前面相同; resnorm=sum((fun(x,xdata)-ydata).^2),即在x处残差的平方和; residual=fun(x,xdata)-ydata,即在x处的残差; exitflag为终止迭代的条件; output为输出的优化信息; lambda为解x处的Lagrange乘子;
jacobian为解x处拟合函数fun的jacobian矩阵。
数值积分
5.1 一元函数的数值积分
函数名称:
quad、quadl、quad8 调用格式 q = quad(fun,a,b)
%近似地从a到b计算函数fun的数值积分,误差为10。给fun输入向量x,应返回向量y,即fun是一单值函数。q = quad(fun,a,b,tol)
%用指定的绝对误差tol代替缺省误差。tol越大,函数计算的次数越少,速度越快,但结果精度变小。
q = quad(fun,a,b,tol,trace,p1,p2,…)
%将可选参数p1,p2,…等传递给函数fun(x,p1,p2,…),再作数值积分。若tol=[]或trace=[],则用缺省值进行计算。
[q,n] = quad(fun,a,b,…)%同时返回函数计算的次数n … = quadl(fun,a,b,…)
%用高精度进行计算,效率可能比quad更好。… = quad8(fun,a,b,…)
%该命令是将废弃的命令,用quadl代替。
5.2 一元函数的数值积分
函数名称:
dblquad 功能
矩形区域上的二重积分的数值计算
调用格式
q = dblquad(fun,xmin,xmax,ymin,ymax)
调用函数quad在区域[xmin,xmax, ymin,ymax]上计算二元函数z=f(x,y)的二重积分。输入向量x,标量y,则f(x,y)必须返回一用于积分的向量。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol)
用指定的精度tol代替缺省精度10-6,再进行计算。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method)
用指定的算法method代替缺省算法quad。method的取值有@quadl或用户指定的、与命令quad与quadl有相同调用次序的函数句柄。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method,p1,p2,…)
将可选参数p1,p2,..等传递给函数fun(x,y,p1,p2,…)。若tol=[],method=[],则使用缺省精度和算法quad。非线性方程组的解
非线性方程组的标准形式为:F(x)= 0 其中:x为向量,F(x)为函数向量。函数
fsolve 格式
x = fsolve(fun,x0)
用fun定义向量函数,其定义方式为:先定义方程函数function F = myfun(x)。
F =[表达式1;表达式2;…表达式m] 保存为myfun.m,并用下面方式调用:x =
-6fsolve(@myfun,x0),x0为初始估计值。
x = fsolve(fun,x0,options)[x,fval] = fsolve(…)
fval=F(x),即函数值向量 [x,fval,exitflag] = fsolve(…)[x,fval,exitflag,output] = fsolve(…)[x,fval,exitflag,output,jacobian] = fsolve(…)
jacobian为解x处的Jacobian阵。
其余参数与前面参数相似。7 常微分方程数值解
函数名称:ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb 功能
常微分方程(ODE)组初值问题的数值解 参数说明:
solver为命令ode45、ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一。
Odefun 为显式常微分方程y’=f(t,y),或为包含一混合矩阵的方程M(t,y)*y’=f(t,y)。命令ode23只能求解常数混合矩阵的问题;命令ode23t与ode15s可以求解奇异矩阵的问题。
Tspan 积分区间(即求解区间)的向量tspan=[t0,tf]。要获得问题在其他指定时间点t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,tf](要求是单调的)。
Y0 包含初始条件的向量。
Options 用命令odeset设置的可选积分参数。P1,p2,… 传递给函数odefun的可选参数。调用格式
[T,Y] = solver(odefun,tspan,y0)
在区间tspan=[t0,tf]上,从t0到tf,用初始条件y0求解显式微分方程y’=f(t,y)。对于标量t与列向量y,函数f=odefun(t,y)必须返回一f(t,y)的列向量f。解矩阵Y中的每一行对应于返回的时间列向量T中的一个时间点。要获得问题在其他指定时间点t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,tf](要求是单调的)。
[T,Y] = solver(odefun,tspan,y0,options)%用参数options(用命令odeset生成)设置的属性(代替了缺省的积分参数),再进行操作。常用的属性包括相对误差值RelTol(缺省值为1e-3)与绝对误差向量AbsTol(缺省值为每一元素为1e-6)。
[T,Y] =solver(odefun,tspan,y0,options,p1,p2…)
将参数p1,p2,p3,..等传递给函数odefun,再进行计算。若没有参数设置,则令options=[]。