日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab鲍威尔法(Powell)

發布時間:2024/8/1 循环神经网络 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab鲍威尔法(Powell) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

%改進鮑威爾法
clc
clear all

syms x1 x2 a1 a2 a3 b1 b2 b3
f = x1*x1+2*x2*x2-4*x1-2*x1*x2;
X=[x1;x2];
X0=[1 1]'; ? %給定初始點
Theta_error=0.001;
e1=[1 0]';
e2=[0 1]';

FX0=subs(f,X,X0);

n=2;
k=0;
k1=0;
k2=0;
d1=e1;%初始搜搜方向
d2=e2;
i=1;


%求a1,a2,X1,X2
Da1=[];
Da2=[];
Da3=[];
DX0=[];
DX00=[];
DXX0=[];
DXXX0=[];
DX1=[];
DX11=[];
DX2=[];
DX22=[];
DX3=[];
DX33=[];
DF=[];

Xh1 = X0+a1.*d1;
FXh1 = ?subs(f,X,Xh1);
dFXh1 = gradient(FXh1,a1);
a1 = solve(dFXh1);
f = x1*x1+2*x2*x2-4*x1-2*x1*x2;

X1 = X0+a1*e1;
FX1 = subs(f,X,X1);

Xh0 = X1+a2.*d2;
FXh2 = subs(f,X,Xh0);
dFXh0 = gradient(FXh2,a2);
a2 = solve(dFXh0);
X2 = X1+a2*e2;
FX2 = subs(f,X,X2);

deta1 = FX0-FX1;
deta2 = FX1-FX2;
m = [deta1,deta2];
M=sort(m); ? %將deta從小到大排序,然后最后一位就是最大值
deta_Max=M(2);

%k=1
d3=X2-X0;
X3=2*X2-X0;
FX3 = subs(f,X,X3);


if FX3 < FX0 && (FX0-2*FX2+FX3)*(FX0-FX2-deta_Max)^2 < 0.5*deta_Max*(FX0-FX3)^2
? ? XX0=X2+a3.*d3;
? ? h0=X2+a3.*d3;
? ? Fh0 = subs(f,X,h0);
? ? dFh0 = gradient(Fh0,a3);
? ? a3 = solve(dFh0); ? ?
? ? XX0=X2+a3.*d3;
? ? d1=d2;
? ? d2=d3;
else
? ? d1=d1;
? ? d2=d2;
? ? if FX2<FX3
? ? ? ? XX0=X2;
? ? else
? ? ? ? XX0=X3;
? ? end
end
while ?norm(XX0-X0) >= Theta_error
? ??
? ? k=k+1;
? ? X0=XX0; ?DX0(k)=X0(1);DX00(k)=X0(2);
? ? %求a1,a2,X1,X2
? ? a1=b1;
? ? Xh1 = XX0+a1.*d1;
? ? FXh1 = ?subs(f,X,Xh1);
? ? dFXh1 = gradient(FXh1,b1);
? ? a1 = solve(dFXh1); ? ?Da1(k)=a1;
? ? f = x1*x1+2*x2*x2-4*x1-2*x1*x2;
? ??
? ??
? ? X1 = XX0+a1.*d1; ? DX1(k)=X1(1);DX11(k)=X1(2);
? ? FX1 = subs(f,X,X1);
? ??
? ? a2=b2;
? ? Xh0 = X1+a2.*d2;
? ? FXh2 = subs(f,X,Xh0);
? ? dFXh0 = gradient(FXh2,b2);
? ? a2 = solve(dFXh0); ?Da2(k)=a2;
? ? X2 = X1+a2.*d2; ?DX2(k)=X2(1);DX22(k)=X2(2);
? ? FX2 = subs(f,X,X2);
? ??
? ? FX0 = subs(f,X,XX0);
? ??
? ? deta1 = FX0-FX1;
? ? deta2 = FX1-FX2;
? ? m = [deta1,deta2];
? ? M=sort(m); ? %將deta從小到大排序,然后最后一位就是最大值
? ? deta_Max=M(2);
? ??
? ??
? ? if FX3 < FX0 && (FX0-2*FX2+FX3)*(FX0-FX2-deta_Max)^2 < 0.5*deta_Max*(FX0-FX3)^2
? ? ? ? %走該條通道看k1++
? ? ? ? k1=k1+1;
? ? ? ? a3=b3; Da3(k)=a3;
? ? ? ? XX0=X2+a3*d3;
? ? ? ? h0=X2+a3*d3;
? ? ? ? Fh0 = subs(f,X,h0);
? ? ? ? dFh0 = gradient(Fh0,a3);
? ? ? ? a3 = solve(dFh0); ?Da3(k)=a3;
? ? ? ? XX0=X2+a3*d3; DXX0(k)=XX0(1);DXXX0(k)=XX0(2);DF(k)=subs(f,X,XX0);
? ? ? ? d1=d2;
? ? ? ? d2=d3;
? ? else
? ? ? ? ? ? ? %走該條通道看k2++
? ? ? ? k2=k2+1;
? ? ? ? if FX2<FX3
? ? ? ? ? ? XX0=X2; DXX0(k)=XX0(1);DXXX0(k)=XX0(2);DF(k)=subs(f,X,XX0);
? ? ? ? else
? ? ? ? ? ? XX0=X3; DXX0(k)=XX0(1); DXXX0(k)=XX0(2);DF(k)=subs(f,X,XX0);
? ? ? ? end
? ? end
? ??
? ? %axis([0 10 0 10]);
? ? plot(XX0(1),XX0(2),'rp')
? ? %plot(X0(1),X0(2),'b*')
? ? line([X0(1) X1(1)],[X0(2) X1(2)]);
? ? line([X0(1) X2(1)],[X0(2) X2(2)]);
? ? line([X1(1) X2(1)],[X1(2) X2(2)]);
? ? line([X0(1) XX0(1)],[X0(2) XX0(2)]);
? ? hold on
end
grid on
axis([3 5 0 4])
ezplot('-8 =x1*x1+2*x2*x2-4*x1-2*x1*x2')
hold on
ezplot('-7.998 =x1*x1+2*x2*x2-4*x1-2*x1*x2')
hold on
ezplot('0 =x1*x1+2*x2*x2-4*x1-2*x1*x2')
hold on

X_output=XX0;
FX_output= subs(f,X,X_output);

%double(X_output);double(FX_output);
X_output,FX_output

總結

以上是生活随笔為你收集整理的matlab鲍威尔法(Powell)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。