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

函数问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

: _8 D; }. h+ M2 K: H$ |; pclear;
0 q" i* D! `" T+ I/ ]" s: ]t=1.43;
! y; q& ?" H3 V: O) b/ Yt0=0.562;%初始参数
" B% c- U. X  B1 I3 c, kzeta_m=sqrt(2)/2;%ζm
) _& y$ ?) T) h% dA=(4*t+t0)/(2*t*t0);2 c* [" l9 C8 N4 t! G; \. W( P; `
B=t0^2*t;
5 }) J  l) ^5 d+ {0 @! c% O, J6 rC=t0+t;%简化参数
9 d. q% a  f. `$ D5 j) u' bsyms x1;
0 q( p2 U8 \3 R: Dsyms x2;' A* N' ~0 i" K( j. ?
w0=A/(zeta_m*x1);& B1 T& Q! e# z' R4 o0 C
a=A*(1-1/x1);
) q( S- A) ^, U1 |  J; j& Hkp=0.5*(a*zeta_m+w0)*a*w0*B-1;
6 h0 w6 e( G; ~- ski=a^2*w0^2*B*0.25;& S' |" _* a- }5 r1 ?/ n3 L! k
kd=0.25*(a^2+4*a*zeta_m*w0+w0^2)*B-C;%三个PID参数
/ F+ Q* n$ I  }) V2 g9 S" U/ GKiw=(kd*(1i*x2)^2+kp*(1i*x2)+ki)/(1i*x2);
( L% L0 Z' r' }/ bGiw=((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);
5 o  \9 _% l4 c9 g  q$ VSiw=1/(1+Kiw*Giw);9 Q- X& I" G. [) ]+ a: n
f=norm(Siw,inf);# T8 A) V' C! k: L4 a1 ~" v
x=[7;1];
, w6 {! }. ?! C; J# g- be=10^(-2);! A5 M+ ^4 y% s/ g) M( K8 O
[k, ender]=steepest(f,x,e);
+ K; b) n7 T4 Lfunction [k, ender]=steepest(f,x,e)) O( \) T6 A, E
%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]
) E8 z. K8 s4 l" w% [syms x1 x2 m; %m为学习率- `* A8 N" b* _+ L0 ^6 o. d
d=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向; [! W; e/ |9 e* n
flag=1;  %循环标志
. H& |) w& U2 k+ Z! i0 vk=0; %迭代次数
/ ~4 b3 g+ v$ b6 Bwhile(flag)* r! a4 S8 L/ {5 G
    d_temp=subs(d,x1,x(1));      %将起始点代入,求得当次下降x1梯度值
' N1 f: g  @; u9 t; f) g: Q    d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值
9 i5 Y2 W3 n: l; `+ T    nor=norm(d_temp); %范数
3 Y6 @7 o  [0 y: n    if(nor>=e)
9 X# v! p$ n; [) p; R        x_temp=x+m*d_temp;            %改变初始点x的值
, M# T( C4 n, O2 I  _4 F( ~6 Q        f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数' Q, g+ H# `5 p
        f_temp=subs(f_temp,x2,x_temp(2));
6 E5 d' F+ u* p        h=diff(f_temp,m);  %对m求导,找出最佳学习率
  d  _% C7 y6 ~+ I& E        m_temp=vpasolve(h);   %求方程,得到当次m
( i2 L' m; P4 J/ G* M, o        x=x+m_temp*d_temp; %更新起始点x- d9 ], g- `7 F4 N
        k=k+1;# j) B: s/ L( Q
    else. f$ I4 E) u) A% c6 @- \
        flag=0;8 t; @1 X! M5 q3 R3 C
    end6 i, l1 R5 K: {4 ]  r
end
  M0 E6 N/ }. Y3 w+ Pender=double(x);  %终点. X. u2 Y  M, ^- @! `  {
end: b% R5 c! ?; Y' k
" k8 y0 `" T0 e! c8 h( c3 ^
1 z" I9 A. f- _( j
) o- c7 g4 A) f+ E5 e$ k
运行后提示
5 ?3 z5 A" n$ P- M" [: ybeiyong
( P( i" r3 W2 p! k6 t2 n错误使用 symengine* f  T( `+ p. a' `
The dimensions do not match., M. g2 P4 [" O2 L8 Y6 ?& |% i; N
* o1 j% _0 a4 g9 J8 N2 P5 F( ?
出错 sym/privBinaryOp (line 946)' G  q6 ?- M- `3 M* M+ i- {
            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});  O. d$ X, ^: l% V3 q6 p! i: I! I( l, T  n
" x3 T8 g, u9 @; `6 w4 @6 l; W9 l
出错  *  (line 273)* f0 E" Q3 Y/ d; u
        X = privBinaryOp(A, B, 'symobj::mtimes');
6 @0 L0 E- a; n& @& T
& ?0 b1 Y. x, l& k7 h出错 beiyong>steepest (line 38)2 K6 J. `! }4 s$ @+ Q6 ^
        x=x+m_temp*d_temp; %������ʼ��x! N% m& |7 l: b7 J& C7 Y

+ q6 f6 p* F8 |; _: L9 q* M' q出错 beiyong (line 21). g: W7 z( ~& S$ B! X, O$ \
[k, ender]=steepest(f,x,e);
& Y$ [" K$ P& P  i求助,感谢!) F2 m; w  g; W# X3 m
3 W' r% S* i4 |* P% P
求助3 G! P2 G3 @, c8 q, I, N7 ~  c
* Q) O# P# M* p" F! v- ?* Z

该用户从未签到

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

该用户从未签到

3#
发表于 2020-8-12 10:09 | 只看该作者
个人认为在自定义函数求解方程时m_temp=vpasolve(h);   %求方程,得到当次m存在问题,求解结果为空,' A( I( x/ x" S5 Q- ]3 x
改用: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-5 13:35 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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