找回密码
 注册
关于网站域名变更的通知
查看: 572|回复: 4
打印 上一主题 下一主题

函数问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-8-11 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

! [. X6 T: N8 k9 r0 {8 H$ Gclear;
$ V: O* A9 X  lt=1.43;, @8 O) u5 i. H- a5 G2 z8 m* V
t0=0.562;%初始参数8 _2 T- L/ R0 r9 t6 x
zeta_m=sqrt(2)/2;%ζm
* E$ V  s% N2 B6 D. nA=(4*t+t0)/(2*t*t0);; K0 {4 b7 V% h+ \
B=t0^2*t;
4 O' ]* x' K# z* r& g8 wC=t0+t;%简化参数8 |0 d, P/ i  M! f3 u3 _0 w
syms x1;8 d: L8 i( w6 c1 B
syms x2;8 f. ?% @5 J. T0 E+ e( ]7 x
w0=A/(zeta_m*x1);
! D) n; _: v: C! ia=A*(1-1/x1);
2 F8 ]3 P# i& ~7 c# rkp=0.5*(a*zeta_m+w0)*a*w0*B-1;
7 p6 ~3 I& b; h/ D% }  t; |. I9 bki=a^2*w0^2*B*0.25;6 R" W' i) R! x+ }0 }' {: B  T
kd=0.25*(a^2+4*a*zeta_m*w0+w0^2)*B-C;%三个PID参数
, U5 d; j5 q5 a* A8 Y0 F, J) ]( r1 aKiw=(kd*(1i*x2)^2+kp*(1i*x2)+ki)/(1i*x2);
; U: k+ k* ]% ~. W7 m+ vGiw=((1i*x2)^2-10.68*(1i*x2)+37.99)/(1.43*(1i*x2)^3+16.27*(1i*x2)^2+65.01*(1i*x2)+37.99);, H3 t1 r2 I8 w& ]3 q
Siw=1/(1+Kiw*Giw);- g0 h- G6 y! Z7 z
f=norm(Siw,inf);. D8 {! b; B2 u+ u( j% c
x=[7;1];
0 i: m9 k! @, n* D+ p7 Ye=10^(-2);5 U) F  N+ |4 E9 X7 b  m
[k, ender]=steepest(f,x,e);
  A' H6 k- A# F. }  |' a; Bfunction [k, ender]=steepest(f,x,e)) o( E8 @/ L) S6 u3 `& o( b
%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]- Z; J& T6 ~# I+ I6 V  n
syms x1 x2 m; %m为学习率3 B( L/ G# q+ f/ Q2 g
d=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向* U6 F; x) A3 r  m$ S
flag=1;  %循环标志' ?  |/ B: c- {2 a# ]8 u, V
k=0; %迭代次数8 W" i7 M" b; l  {" h
while(flag)+ g* u3 `, t( R3 e% _# j
    d_temp=subs(d,x1,x(1));      %将起始点代入,求得当次下降x1梯度值
! h& I, G4 h5 S* d1 K3 j    d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值
. }+ p) K/ {- X9 |    nor=norm(d_temp); %范数
, p( Y/ c, H! v2 M) U    if(nor>=e)
* y5 F3 Z6 X3 [$ O4 _        x_temp=x+m*d_temp;            %改变初始点x的值
$ p: M+ s; ]# \8 p9 A( [) a9 b        f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数
+ Z! C& t5 D5 A3 X        f_temp=subs(f_temp,x2,x_temp(2));
8 T8 Y( N; J  w        h=diff(f_temp,m);  %对m求导,找出最佳学习率
. R. L" D- M4 [& z        m_temp=vpasolve(h);   %求方程,得到当次m
( E, y* v) ~% n3 M) K3 ^        x=x+m_temp*d_temp; %更新起始点x- [* O0 b. T8 t  ?6 o; H
        k=k+1;
# Y, u' o8 B% R' n    else4 w% ]. m4 R. O
        flag=0;
  X0 `  O5 f* s5 Z7 C6 N    end5 }8 p# C1 E- e% {6 K
end
, w5 q: U3 S, U# L! v/ Y& `1 Jender=double(x);  %终点2 B' p  ^! @8 u9 F2 F5 x8 _. C, X' u! H
end& @$ U  W% E, y+ X, h
4 w- F. B( w+ V; e
% \# O$ T& |8 \/ L* ^
4 [% ?) e- t1 F8 O
运行后提示
0 k3 b5 ?9 V5 S2 d% k0 K9 Ybeiyong
# j5 w) ~. \3 I4 t$ A( h错误使用 symengine
1 H# e% h4 {& zThe dimensions do not match.
( W, p9 o& N9 T7 Q4 f1 Y, g
. m7 ^7 L# i/ f4 \. W1 r出错 sym/privBinaryOp (line 946)
' e0 S4 O( q1 g* L* E0 H* h            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});) M7 d4 ^+ [" t# ?+ O
, _3 H( l7 W: g( y( h/ f; T5 K
出错  *  (line 273)
+ W/ R4 j' R- Y7 V        X = privBinaryOp(A, B, 'symobj::mtimes');
0 A3 c; [; A+ S$ t( ^
( V9 ]0 S  D% R" @% a: h! A1 |9 C% p出错 beiyong>steepest (line 38)
* T" b: N6 p7 w* f* V        x=x+m_temp*d_temp; %������ʼ��x
- |* l7 W0 q6 I+ N  p
( n( H1 g& \( g8 ^9 g" X出错 beiyong (line 21)
1 s* u1 `- [5 v" M9 G$ B5 F6 q[k, ender]=steepest(f,x,e);; h1 V6 K6 f6 {/ c
求助,感谢!1 d7 ~; [5 R( e8 r: ?7 Z3 c
  g+ k& h2 R/ j
求助
9 n! a( C; X2 v( W/ Y
& p* R' d1 m, L1 v! i3 u" [9 d5 k

该用户从未签到

2#
发表于 2020-8-11 10:52 | 只看该作者
帮你顶一下

该用户从未签到

3#
发表于 2020-8-12 10:09 | 只看该作者
个人认为在自定义函数求解方程时m_temp=vpasolve(h);   %求方程,得到当次m存在问题,求解结果为空,
0 w8 b( O5 G# N# K- m改用:m_temp=solve(h,m,'ReturnConditions',true);

该用户从未签到

4#
发表于 2020-8-12 11:15 | 只看该作者
来学习学习

该用户从未签到

5#
发表于 2020-8-12 13:38 | 只看该作者
楼上正解,楼主可以试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 22:08 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表