用二分法求解
4224min ()f t t t t =--115[,.]t ∈内的极小值点,要求准 1.
function [t d]=erfenfa(a,b)
k=1; %记录循环次数
while abs(a-b)>0.0005
c=(a+b)/2;
C(k)=c; %存储每次循环中点c 的值
if ff(c)<0
a=c;
end
if ff(c)==0
t1=c;
break ;
end
if ff(c)>0
b=c;
end
k=k+1;
end
t=(a+b)/2; %最终符合要求的值
d=f(t); %最优解
C
k
function y=f(t)
y=t^4-2*t^2-4*t;
function y=ff(t)
y=4*t^3-4*t-4;
运行结果
>> [t d]=erfenfa(1,1.5)
C =
Columns 1 through 9
1.2500 1.3750 1.3125 1.3438 1.3281 1.3203 1.3242 1.3262
1.3252
Column 10
1.3247
k =
11
t =
1.3250
d =
-5.7290
2.黄金分割法 f (x)=x3-2x+1 初始区间[0, 3],收敛精度0.5
function [t,f]=huangjinfenge(a,b)
m=1-(sqrt(5)-1)/2;
t2=a+m*(b-a)
f2=g(t2);
t1=a+b-t2
f1=g(t1);
while abs(t1-t2)>0.5
if f1<f2
a=t2;
t2=t1
f2=f1;
t1=a+b-t2
f1=g(t1);
else
b=t1;
t1=t2
f1=f2;
t2=a+m*(b-a)
f2=g(t2);
end
end
t=(t1+t2)/2;
f=g(t);
function y=g(t)
y=t^3-2*t+1;
运行结果
> [t,f]=huangjinfenge(0,3)
t2 =
1.1459
t1 =
1.8541
t1 =
1.1459
t2 =
0.7082
t =
0.9271
f =
-0.0574
>>
3. 用牛顿法求解291min ()sin f x x x =--初始迭代点为x 0=0.4,
要求准确到小数 点后第5位小数
function [t1,d]=Newton(t0)
t=t0-ff(t0)/fff(t0);
k=1;%记录迭代次数
T(1)=t;%存储迭代点
while abs(t-t0)>0.000005
t0=t;
t=t0-ff(t)/fff(t);
k=k+1;
T(k)=t;
end
t1=t0;
d=f(t1);
k
T
function y=f(x)
y=9*x^2-sin(x)-1;
function y=ff(x)
y=18*x-cos(x);
function y=fff(x)
y=18+sin(x);
运行结果
>> [t1,d]=Newton(0.4)
k =
3
T =
0.0586 0.0555 0.0555
t1 =
0.0555
d =
-1.0277
>>
4. 最速下降法验证课本上的例题求解
291min ()sin f x x x =--初始迭代点为x 0=0.4, 要求准确到小数点后第5位小数
function [G,g,X,F]=zuisu(X0)
F(1)=f(X0);%存储x 点处的值
G(:,1)=h(X0); %存储梯度向量
g(1)=norm(G(:,1));%存储梯度模长
X(:,1)=X0; %存储x 值
A=[2,0;0,8];
for j=1:2
X(:,j+1)=X(:,j)-(G(:,j)'*G(:,j))/(G(:,j)'*A*G(:,j))*G(:,j); F(j+1)=f(X(:,j+1));
G(:,j+1)=h(X(:,j+1));
g(j+1)=norm(G(:,j+1));
end
if (G(:,2)'*G(:,1)<1E-10& G(:,3)'*G(:,2)<1E-10)
disp(['相邻两搜索方向是正交的'])
end
function y=f(X)
y=X(1)^2+4*X(2)^2;
function n=h(X)
n=[2*X(1),8*X(2)]';
运行结果
>> [G,g,X,F]=zuisu(X0)
相邻两搜索方向是正交的
G =
2.0000 1.4769 0.2215 8.0000 -0.3692 0.8862
g =
8.2462 1.5224 0.9134
X =
1.0000 0.7385 0.1108 1.0000 -0.0462 0.1108
F =
5.0000 0.5538 0.0613 >>。