赞
踩
fzero
函数,可以用来求单变量非线性方程的根。该函数的调用格式如下: z=fzero(filename,x0,tol,trace)
fzero
函数只能给出离 x0 最近的那个根。tol 控制结果的相对精度,默认时取 tol=eps,trace 指定迭代信息是否在运算中显示,为 1 时显示,为 0 时不显示,默认时取 trace=0。function f = fz(x)
f=x-1./x+5;
end
>> fzero(@fz,-5) %以-5作为迭代初值
ans =
-5.1926
>> fzero(@fz,1) %以1作为迭代初值
ans =
0.1926
fsolve
,其调用格式如下: X=fsolve(filename,X0,option)
>> optimset
fsolve
函数)当前的默认参数值,则可在命令行窗口输入命令:>> optimset fsolve
>> option=optimset ('Display', 'off')
function F = myfun(X)
x=X(1);
y=X(2);
z=X(3);
F(1)=sin(x)+y+z^2*exp(x);
F(2)=x+y+z;
F(3)=x*y*z;
end
fsolve
函数求方程的根,程序如下:>> option=optimset('Display','off');
>> X=fsolve(@myfun,[1,1,1],option)
X =
0.0224 -0.0224 -0.0000
>> q=myfun(X)
q =
1.0e-06 *
-0.5931 -0.0000 0.0006
function F = fxyz(X)
x=X(1);
y=X(2);
z=X(3);
F(1)=x^2+y^2+z^2-9;
F(2)=3*x+5*y+6*z;
F(3)=x-3*y-6*z-1;
end
>> X1=fsolve(@fxyz,[-1,1,-1],optimset('Display','off')) %求第一个交点
X1 =
-0.9508 2.4016 -1.5259
>> X2=fsolve(@fxyz,[1,-1,1],optimset('Display', 'off')) %求第二个交点
X2 =
1.4180 -2.3361 1.2377
[x,fval]=fminbnd(filename,x1,x2,option)
:求一元函数在
(
x
1
,
x
2
)
(x1, x2)
(x1,x2) 区间中的极小值点
x
x
x 和最小值 fval。[x,fval]=fminsearch(filename,x0,option)
: 基于单纯形算法求多元函数的极小值点
x
x
x 和最小值 fval。[x,fval]=fminunc(ilename,x0,option)
:基于拟牛顿法求多元函数的极小值点
x
x
x 和最小值 fval。fminbnd
的输入变量
x
1
、
x
2
x1、x2
x1、x2 分别表示被研究区间的左、右边界。fminsearch
和 fminunc
的输入变量
x
0
x0
x0 是一个向量,表示极值点的初值。option 为优化参数,可以通过 optimset 函数来设置。>> f=@(x) x-1./x+5; >> [x,fmin]=fminbnd(f,-10,-1) %求函数在(-10,-1)内的最小值点和最小值 x = -9.9999 fmin = -4.8999 >> fminbnd(f,1,10) %求函数在(1,10)内的最小值点 ans = 1.0001
function f=fxyz0(u)
x=u(1);
y=u(2);
z=u(3);
f=x+y.^2./x/4+z.^2./y+2./z;
end
>> [X,fmin]=fminsearch(@fxyz0,[0.5,0.5,0.5])
X =
0.5000 1.0000 1.0000
fmin =
4.0000
fmincon
函数,专门用于求解各种约束下的最优化问题,其调用格式如下: [x,fval]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
function f=fop(x)
f=0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2) +1/30*x(1)^3;
end
>> x0=[0.5;0.5];
>> A=[-1,-0.5;-0.5,-1];
>> b=[-0.4;-0.5];
>> lb=[0;0];
>> option=optimset;
>> option.LargeScale='off';
>> option.Display='off';
>> [x,f]=fmincon(@fop,x0,A,b,[],[],lb,[],[],option)
x =
0.3396
0.3302
f =
0.2456
linprog
,其调用格式如下: [x,fval]=linprog(f,A,Aeq,beq,Lbnd,Ubnd)
f=[-5;-4;-6];
A=[1,-1,1;3,2,4;3,2,0];
b=[20;42;30];
Aeq=[];
Beq=[];
LB=zeros(3,1);
[x, favl]=linprog(f,A,b,Aeq,Beq,LB)
Optimal solution found.
x =
0
15.0000
3.0000
favl =
-78
[t,y]=solver(filename,tspan,y0)
求解函数 | 采用方法 | 适用场合 |
---|---|---|
ode23 | 2 阶或 3 阶龙格-库塔算法,低精度 | 非刚性 |
ode45 | 4 阶或 5 阶龙格-库塔算法,中精度 | 非刚性 |
ode113 | Adams 算法,精度可到 1 0 − 3 ∼ 1 0 − 6 10^{-3}\sim 10^{-6} 10−3∼10−6 | 非刚性,计算时间比 ode45 短 |
ode23t | 梯形算法 | 适度刚性 |
odel5s | Gear’s 反向数值微分算法,中精度 | 刚性 |
ode23s | 2 阶 Rosebrock 算法,低精度 | 刚性,当精度较低时,计算时间比 odel5s 短 |
ode23tb | 梯形算法,低精度 | 刚性,当精度较低时,计算时间比 odel5s 短 |
function yp=funt(t,y)
yp=(y^2-t-2)/4/(t+1);
end
t0=0;
tf=10;
y0=2;
[t,y]=ode23(@funt,[t0,tf],y0); %求数值解
y1=sqrt(t+1)+1; %求精确解
plot(t,y,'b.',t,y1,'r-'); %通过图形来比较
function xdot=sys(t,x)
xdot= [-2*x(2);x(1)];
end
>> t0=0;
>> tf=20;
>> [t,x]=ode45(@sys,[t0,tf],[1,0]);
>> [t,x] ans = 0 1.0000 0 0.0001 1.0000 0.0001 0.0001 1.0000 0.0001 0.0002 1.0000 0.0002 0.0002 1.0000 0.0002 … 19.6681 -0.8968 0.3116 19.7511 -0.9422 0.2352 19.8340 -0.9747 0.1556 19.9170 -0.9937 0.0738 20.0000 -0.9991 -0.0090
subplot(1,2,1);
plot(t,x(:,2));
subplot(1,2,2);
plot(x(:,2),x(:,1));
axis equal
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。