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

函数问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
0 `4 ?/ h: }: ^8 g
clear;
" c  C% C7 `; a/ `; nt=1.43;
4 d6 M6 `1 U7 y8 `+ @, Y# P" x* Zt0=0.562;%初始参数
+ w+ p5 b3 v! D" Hzeta_m=sqrt(2)/2;%ζm2 J/ S- I9 m4 O7 Y8 W1 s9 N
A=(4*t+t0)/(2*t*t0);
  }# i) E0 n, {B=t0^2*t;
9 ~- g" S9 P' ?3 E, b1 c9 GC=t0+t;%简化参数& ?4 I5 M, a1 q3 w# U2 ^# H  g
syms x1;/ m$ w  k7 \7 i3 N: C
syms x2;# k$ s! e* m8 S- |  v$ V
w0=A/(zeta_m*x1);# T' q  v' B) I" q( J  c1 q- |5 K
a=A*(1-1/x1);
9 x5 N, |- {$ x# [: J2 M$ D2 Pkp=0.5*(a*zeta_m+w0)*a*w0*B-1;/ x7 q% Z5 l0 q3 O4 x' b+ W
ki=a^2*w0^2*B*0.25;
, r  m. L7 v& Dkd=0.25*(a^2+4*a*zeta_m*w0+w0^2)*B-C;%三个PID参数
# m& R+ `, v, _% g6 O% ~  jKiw=(kd*(1i*x2)^2+kp*(1i*x2)+ki)/(1i*x2);+ D5 B7 a% M; ]' E5 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);  _1 B" Q! I4 ], f7 ?
Siw=1/(1+Kiw*Giw);
7 O4 H3 v: ?. P9 B+ Z& E  If=norm(Siw,inf);; |3 A6 z# M& F! f1 |
x=[7;1];: d  B( j7 m7 s1 V  b0 E7 K4 r
e=10^(-2);) k+ G7 e! Z8 F/ J
[k, ender]=steepest(f,x,e);! H) |& I4 |0 s- t* x  B& u
function [k, ender]=steepest(f,x,e)1 S; H5 P' ^9 J/ |, F- ?
%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]
$ U4 H, J; u- B% b, K! l* gsyms x1 x2 m; %m为学习率
9 V% O. l; b3 x  D: ~d=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向* A0 e. }% ?; F$ g6 _
flag=1;  %循环标志" {1 {6 Z2 ]  F" Y
k=0; %迭代次数
( S% n0 v, M" p# x3 twhile(flag). E) n- [; m0 w& Z( _
    d_temp=subs(d,x1,x(1));      %将起始点代入,求得当次下降x1梯度值
- k, s( ^/ E0 K  X( m' a1 S6 C    d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值) s* i2 S/ f" M
    nor=norm(d_temp); %范数6 Z; c' w* O. f; E2 s. b: D
    if(nor>=e)( P" d8 V" F0 f! D: A1 ^
        x_temp=x+m*d_temp;            %改变初始点x的值
( X: s" f4 P5 r$ z        f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数
  E9 N& o3 |8 D* C5 H4 E7 A        f_temp=subs(f_temp,x2,x_temp(2));
, l; c, o: I" t        h=diff(f_temp,m);  %对m求导,找出最佳学习率5 E1 h3 v5 b3 L$ L8 j% s* O0 w6 L8 V' @
        m_temp=vpasolve(h);   %求方程,得到当次m; y- B& A8 A' B
        x=x+m_temp*d_temp; %更新起始点x
: o2 s, f+ G& k5 S8 |' O. H- D        k=k+1;
+ i5 K  u+ K4 s    else
% Q" [0 l/ v( h2 q. d        flag=0;
" C. U& x! S5 `& l0 ^    end# |& Q% l$ @! n& v  N
end7 [$ m& v: B8 @0 Y7 `$ x; F
ender=double(x);  %终点) _: a  X  u  b. r* {
end& w: y5 G: r8 x# A& E

+ L$ V. T2 c4 y5 ]7 T% P
# j$ g' j# x. u, [
" E2 k5 }9 {# u运行后提示
  b. q" l) o. Z% e) g) rbeiyong0 o7 u4 r+ M  U
错误使用 symengine
0 ]  x" l" P& L, ~: F# s0 vThe dimensions do not match.8 w5 e, F4 |% \0 q( A

4 G; }: _: S4 {8 }6 v6 Y  U% y, w出错 sym/privBinaryOp (line 946)+ y7 {( ~; q& j/ ]& G; z, r- H
            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});. O: A' u, Q+ l& w
& F# z$ V) ^4 d, C- x4 w
出错  *  (line 273)9 q( C4 x8 B& g3 d
        X = privBinaryOp(A, B, 'symobj::mtimes');) p* P6 A0 K5 \; c4 a& g9 C

5 b. I) A* o1 T% w4 c+ ~! r出错 beiyong>steepest (line 38)
% a5 r3 x  x) R) S9 S* t3 w) Y        x=x+m_temp*d_temp; %������ʼ��x
/ z0 `# k7 u9 Y* R2 A& f- r" S1 J* f# b  \0 c% q* _
出错 beiyong (line 21)- \2 I8 H1 Z6 z8 }
[k, ender]=steepest(f,x,e);
2 o" y6 \$ f; `" g* |2 |$ t求助,感谢!3 G) s( t& e$ {* S% Q
3 k# m' p& T" W! u0 ]# |- k$ @+ _
求助( p3 f, p( ~- h4 F8 `( A) k1 J6 T
' Q8 F; X' r+ M) `  X: ]8 W- t3 m

该用户从未签到

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

该用户从未签到

3#
发表于 2020-8-12 10:09 | 只看该作者
个人认为在自定义函数求解方程时m_temp=vpasolve(h);   %求方程,得到当次m存在问题,求解结果为空,
$ P2 b7 v6 i% T6 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-6-22 18:00 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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