数学建模社区-数学中国
标题:
怎么进行一位精确搜索
[打印本页]
作者:
silence123
时间:
2013-4-6 09:23
标题:
怎么进行一位精确搜索
fminbnd 这里不会写了
5 ^) ?/ B6 q5 w& J5 a/ q" G
%用最速下降法求解问题;
?) r0 ?7 F% q9 R
eps=0.1; %给出误差线;
3 `3 ]" E+ j5 Q& I; R
p=[];
8 h7 [/ C+ X+ m
syms y z lamd
( b& P! R- }1 q/ |" U# ~
f=exp(y^2+z^2-y*z)*cos(y+z);
$ v5 T2 Q: \' _, b. N) z# Z
grd=jacobian(f,[y,z]);
9 O% y* ~4 P8 u
x=[1 1];%给出起始点;
' Y& l9 ?" x; [
X=subs(grd,[y,z],x); %计算x点出的梯度;
/ U/ v; {' b5 l* }1 A' D& ~6 R
XX=sqrt(X(1)^2+X(2)^2); %x的模;
2 h% w9 ]* f# O! T
if XX<=eps;
5 o' N8 G) P9 e5 r! _
disp('所求点为x=');
! }( [! q0 b& f/ @) ^
disp(x);
* O4 } M* @4 L* u# I, o8 Q; U
else
: l; e- T0 Y+ w% b! d6 S5 L w3 o
for k=1:20;
, b- q1 V% u0 r5 W9 y
p=-X./XX;
6 Q5 G# A" s6 ^- X, \, Q
H=subs(f,[y,z],x+lamd*p);
0 @/ W }6 b' e; j# D6 ?% J2 n
%求解最优步长lamd是关键问题;
0 x" S$ C8 x+ ~
lamd=fminbnd(@(lamd),myfun(lamd,x),0,1);
5 s) S8 V* O. Z, m* J
x=x+lamd*p
: t2 S0 x, ^6 W" Z
X=subs(grd,[y,z],x);
4 ?, p# J/ i, c4 S4 ]; {: d- E1 U
XX=sqrt(X(1)^2+X(2)^2); %x的模;
a2 F; H6 ^' U
if XX<=eps;
" ~0 E2 Z6 i. I3 J) r! E
disp('所求点为x=');
1 s! `; q' |0 I
disp(x);
1 Q+ L' m! l* |8 t, f
end
! }+ F+ ~2 V! `) l: t( w& x
end
. V/ y, d' n4 z5 T
end
* Z ?) D9 I* W, p7 p3 T
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5