数学建模社区-数学中国
标题:
怎么进行一位精确搜索
[打印本页]
作者:
silence123
时间:
2013-4-6 09:23
标题:
怎么进行一位精确搜索
fminbnd 这里不会写了
( W$ P' W6 d( M+ s1 D! v% F/ X
%用最速下降法求解问题;
% w& `) k1 E4 {" m
eps=0.1; %给出误差线;
# ^+ `; ~/ n+ m9 a2 n$ l5 E8 S
p=[];
: {$ ^* B, ?- ^, K U4 r
syms y z lamd
" [8 b# ?, A& W7 V! M
f=exp(y^2+z^2-y*z)*cos(y+z);
+ c- t6 O% _0 Q
grd=jacobian(f,[y,z]);
3 B/ B5 R B( k e; Y& N+ K
x=[1 1];%给出起始点;
& n8 Z8 _; @) `7 }- ?! y
X=subs(grd,[y,z],x); %计算x点出的梯度;
z8 u5 d7 k( a3 P
XX=sqrt(X(1)^2+X(2)^2); %x的模;
- y* c+ O7 l, O
if XX<=eps;
6 m4 ~0 N- `% h3 _4 R4 n
disp('所求点为x=');
& x- `0 U: i# S/ U7 X1 w- \! u
disp(x);
% ^% U- Q0 X5 \8 C
else
' s; t+ ]: x0 T% ~
for k=1:20;
3 q6 [$ N+ ]( Y
p=-X./XX;
- D1 s. w. q+ P) S& J; o+ d
H=subs(f,[y,z],x+lamd*p);
( q, M9 ]6 X* u$ Z5 M$ h
%求解最优步长lamd是关键问题;
$ Q7 z4 _( O: y9 x8 Y
lamd=fminbnd(@(lamd),myfun(lamd,x),0,1);
" o: |7 ~( c' b* X: l* k
x=x+lamd*p
, F7 `6 T4 f$ p# ?
X=subs(grd,[y,z],x);
: H/ x7 n2 ~; Z) Y( ~* w
XX=sqrt(X(1)^2+X(2)^2); %x的模;
% ^+ ] U$ L' ^' r: G' c7 c2 M
if XX<=eps;
$ b/ |" S$ @2 W j4 z
disp('所求点为x=');
6 u, q" \) j; N `1 U7 f. }/ k
disp(x);
# k, r. P |3 B' G3 e
end
( N. P t4 t( P
end
2 w* i1 W# R3 O1 t
end
! T( [4 |; I' L9 o
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5