分析:首先,用dsolve函数,看看有啥结论
y=dsolve('D2y+mu*(y^2-1)*Dy+y=0','y(0)=1','Dy(0)=0')
Warning: Explicit solution could not be found. > In dsolve at 194 y =
[ empty sym ]
得出无解提示,可见dsolve函数不能直接用于一般非线性方程的解析解的求解。
数值解,首先把微分方程转化为显式微分方程的形式。
dy?f(t,y)dtdyx?y,x?,??7令,则原方程化为: dt12?dx?x??dt??dx??7(x?1)x?x??dt122121
初值条件变为:x1(0)=1, x2(0)=0
解法1 使用inline函数描述微分方程组:
f1=inline('[x(2);-7*(x(1)^2-1)*x(2)-x(1)]','t','x'); y0=[1;0];
[t,x]=ode45(f1,[0,40],y0); plot(t,x)
解法2 编写M函数文件vdp.m来描述微分方程组: function fy=vdp(t,x)
fy=[x(2);-7*(x(1)^2-1)*x(2)-x(1)]; 然后在命令窗口中输入: y0=[1;0];
[t,x]=ode45('vdp',[0,40],y0); plot(t,x)
(6)不同求解器Solve的特点 求解器Solve ODE类型 特点 说明 ode45 ode23 ode113 ode23t ode15s ode23s
9.优化问题
非刚性 非刚性 非刚性 适度刚性 刚性 刚性 一步法,4,5阶Runge-Kutta方程,累计截断误差达(Δx)3 一步法,2,3截断误差达(Δx)3 多步法,Adams算法,高低精度均可达10-6~10-3 采用梯形算法 阶大部分场合的首选算法 使用于精度较低的情形 Runge-Kutta方程,累计计算时间比ode45短 适度刚性情形 多步法,Gear's反向数值微分,精度中等 一步法,2阶Rosebrock算法,低精度 若ode45失败时。可尝试使用 当精度较低时,计算时间比ode15s短 (1)无约束最优化问题的数值解法 x=fminunc(Fun,x0) %最简求解语句
[x,f]=fminunc(Fun,x0,options) %一般求解语句 fminsearch的用法与fminuc一样
options的选择
参数名 Display 参数说明 中间结果显示方式,其值可以取off表示不显示中间值,iter逐步显示,notify求解不收敛时给出提示,final只显示终值 表示目标函数的梯度是否已知,可以选择为on或off 表示是否使用大规模问题算法,取值为onGradObj LargeScale MaxIter MaxFunEvals TolFun TolX 或off 方程求解和优化过程最大允许的迭代次数,若方程未求出解,可适当增加此值 方程函数或目标函数的最大调用次数 误差函数的误差限控制量,当函数的绝对值小于此值即终止求解 解的误差限控制量,当解的绝对值小于此值即终止求解
opt=optimset %获得默认的常用变量
opt.TolX=1e-10; %修改解的误差限控制量,或者用set(opt.'TolX',1e-10)
【例1.75】已知二元函数z=f(x,y)=(x^2-2*x).exp(-x^2-y^2-xy),使用MATLAB提供的求解函数求出其最小值 首
先
用
inline
语
句
定
义
目
标
函
数
:
f=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))','x');
然后给出初始值,并将求解控制变量中的Display属性设置为'iter',这
样
可
以
显
示
中
间
的
搜
索
结
果
:
x0=[0;0];ff=optimset;ff.Display='iter';
最后,可以用下面的语句求解出最优解: x=fminsearch(f,x0,ff)
Iteration Func-count min f(x) Procedure 0 1 0
1 3 -0.000499937 initial simplex 2 4 -0.000499937 reflect
.......
71 135 -0.641424 contract inside 72 137 -0.641424 contract outside
Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-04 x =
0.6111 -0.3056
同样的问题用fminunc函数求解,为:
x=fminunc(f,[0;0],ff)
Warning: Gradient must be provided for trust-region algorithm; using line-search algorithm instead. > In fminunc at 367
First-order Iteration Func-count f(x) Step-size optimality 0 3 0 2 1 6 -0.367879 0.5 0.736 2 9 -0.571873 1 0.483 3 15 -0.632398 0.284069 0.144 4 18 -0.638773 1 0.063 5 21 -0.64141 1 0.00952 6 24 -0.641424 1 0.000619 7 27 -0.641424 1 1.8e-06
Local minimum found.
Optimization completed because the size of the gradient is less than the default value of the function tolerance.