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

函数问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
' s( n$ S$ Q6 z& \& ^2 G7 L% G0 x
clear;! h% |8 h" Q4 X& n3 v
t=1.43;1 G& t/ T! S* B4 h; E# B+ B) e
t0=0.562;%初始参数) c4 Q$ R/ E! V& j
zeta_m=sqrt(2)/2;%ζm$ p4 D) r$ H4 M  [6 r& i& Q/ _
A=(4*t+t0)/(2*t*t0);; B+ V9 u) j" }2 n
B=t0^2*t;
9 ~: ]/ J$ g, G1 x3 g; r1 gC=t0+t;%简化参数( F$ l% t% ]. o" [% n
syms x1;
& Y' ~( f7 _; h  W+ Q2 bsyms x2;5 q! H2 m  x; Q; z" Q% ?# C
w0=A/(zeta_m*x1);8 e5 ^1 y7 _5 _2 ?
a=A*(1-1/x1);
. z) t7 V1 x" E* e% y4 U  Ekp=0.5*(a*zeta_m+w0)*a*w0*B-1;
* |& k7 ]' @" x3 Oki=a^2*w0^2*B*0.25;+ s/ o. p) _! m2 R9 b
kd=0.25*(a^2+4*a*zeta_m*w0+w0^2)*B-C;%三个PID参数
) N8 G4 O* \! k% aKiw=(kd*(1i*x2)^2+kp*(1i*x2)+ki)/(1i*x2);: J( Z$ y& @' U1 u) K
Giw=((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);
6 Z) u% E- x% L# U1 R. OSiw=1/(1+Kiw*Giw);% `0 F5 |7 d3 I% k. |
f=norm(Siw,inf);2 D; F/ `4 Y- V" J2 e1 Y
x=[7;1];" t$ x& ]: ?/ g9 I0 D
e=10^(-2);. V" L; }1 K, B1 S7 p' a$ T& V
[k, ender]=steepest(f,x,e);' G- m; Y+ |" S# `" ?3 Q, }/ V
function [k, ender]=steepest(f,x,e)9 O9 K) P$ O& l. |+ f) a
%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]
- q, {1 X. b! H! vsyms x1 x2 m; %m为学习率
3 E; a' b" Q) x# \. u5 vd=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向
, V6 B9 w1 F% W. Gflag=1;  %循环标志
2 `) Z- Y9 x/ w7 R& |/ j" A+ D( Ck=0; %迭代次数. N9 ~& i- F/ T8 P4 p* @
while(flag)
1 d9 d# y0 `/ ?- M    d_temp=subs(d,x1,x(1));      %将起始点代入,求得当次下降x1梯度值
+ D2 T# H/ D9 R    d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值
( i( W! F6 P3 u" j6 i    nor=norm(d_temp); %范数1 z/ e  R" d4 _7 n- h
    if(nor>=e)$ L2 o; g+ S/ d, U. F; X
        x_temp=x+m*d_temp;            %改变初始点x的值/ c3 ~& e; x. _8 t* X% w  O
        f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数: b% Y  J; B# O
        f_temp=subs(f_temp,x2,x_temp(2));
- p* q1 C9 [7 u4 e: p        h=diff(f_temp,m);  %对m求导,找出最佳学习率
. ~9 R: q: f- m" D3 o' w        m_temp=vpasolve(h);   %求方程,得到当次m! v  S+ a# b% R1 @9 _( K" ]- D/ X
        x=x+m_temp*d_temp; %更新起始点x
: Z* ]1 m) s* _# {9 r        k=k+1;
; m0 s5 M- r  l/ r+ Y  E) S    else
. n& Y  _/ F3 x; ?5 w% v# I- I        flag=0;$ r' w! W) W/ ]! N% F, y8 V
    end
! Y- {5 y- |; |$ U: Uend3 N; M% }/ Z: t# ]9 j
ender=double(x);  %终点
* \, p& F  S9 V4 j1 ]end
6 B9 ^0 d! L; \) _
0 F1 a# }2 U7 a
  r7 i+ p! A* i" L) Z4 H, s% s
2 a- f9 m; `3 F' |运行后提示
9 L7 Y. _& i, j) \7 Y) Z; [beiyong- ?$ g/ R" n( w- c4 U
错误使用 symengine
- J. q" ^5 m% m* `' v, B& dThe dimensions do not match.
: g, e" o0 Y% }" n. K' k% c& Z
# q( E  q) s6 M1 i! X出错 sym/privBinaryOp (line 946)
1 x. q0 q: {6 p$ p: W5 z" H            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});& t& o' ?2 c; y3 {7 I, G
& E9 B! @) E8 q; ]: B
出错  *  (line 273)% d5 u- A2 A- v. R
        X = privBinaryOp(A, B, 'symobj::mtimes');8 q6 V# M0 ^. f5 ?- i

# K9 x8 H$ v% I* R; b; K6 J3 O出错 beiyong>steepest (line 38)" Q* e- G  A- Y
        x=x+m_temp*d_temp; %������ʼ��x: b% E6 E- v" a

2 [0 h* I, h& @' I6 O出错 beiyong (line 21)* F% I- q8 v/ a+ y1 N
[k, ender]=steepest(f,x,e);
4 d! r9 x, G  E) G& T求助,感谢!" a4 f) [4 Z+ V. @
2 U6 J5 {1 f2 {% j) Y
求助2 o+ ^% p$ }  X# f& L7 x
9 L( U3 K$ }( v& }

该用户从未签到

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

该用户从未签到

3#
发表于 2020-8-12 10:09 | 只看该作者
个人认为在自定义函数求解方程时m_temp=vpasolve(h);   %求方程,得到当次m存在问题,求解结果为空,, v1 H& z3 f% S: W2 S
改用: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-7-27 20:31 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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