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

函数问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

! Y  @$ S# v# i& V0 y+ ]; v) gclear;/ O% p2 \; M6 @, \
t=1.43;$ M* p# Z" u, {
t0=0.562;%初始参数% s' L& H0 @" t( e
zeta_m=sqrt(2)/2;%ζm4 S8 A, `7 v8 Y% F$ w' e5 c
A=(4*t+t0)/(2*t*t0);
: H" {" L9 a9 ]" b9 QB=t0^2*t;
! e; N( K% u" I# k2 ]% _4 TC=t0+t;%简化参数+ Z6 ?. e  }# u- P1 O) j* Q, ?2 L
syms x1;0 x. S( Z+ [' [( p' g
syms x2;7 W, j: F1 w& D& P$ y) r
w0=A/(zeta_m*x1);
7 N6 k# C' a4 s6 G% Z- ea=A*(1-1/x1);
& S, J% N1 U# [/ h1 E' Y2 {& Okp=0.5*(a*zeta_m+w0)*a*w0*B-1;& j6 n, G* e. H  Q" }4 e9 s
ki=a^2*w0^2*B*0.25;
3 \  E& j% ]- {+ J. }kd=0.25*(a^2+4*a*zeta_m*w0+w0^2)*B-C;%三个PID参数
7 W8 e* j+ {! k1 Y* Y' fKiw=(kd*(1i*x2)^2+kp*(1i*x2)+ki)/(1i*x2);3 O2 o+ a( Q8 L( R/ ~" s/ R
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);
+ n: T& t+ j/ c; RSiw=1/(1+Kiw*Giw);1 Q+ o4 u* a4 N8 B2 I
f=norm(Siw,inf);1 c9 f/ z3 t7 u3 t
x=[7;1];; D: `* W7 Y. C# s) ~3 V
e=10^(-2);
6 [: y3 M( q- y/ }2 a[k, ender]=steepest(f,x,e);
: ?/ }8 k' J/ G9 A9 Q2 p$ B6 f. g; sfunction [k, ender]=steepest(f,x,e)0 \3 J5 ~$ X) |2 d. }+ h
%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]( T( d8 `; k# a9 y
syms x1 x2 m; %m为学习率: c" |) n; M3 T- K
d=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向1 {: ~* Y/ W: J1 E1 F6 n
flag=1;  %循环标志
! j; M: f$ U* w* ?2 \, zk=0; %迭代次数5 ?* }4 B- i# A" I; `& _) ~
while(flag)' k8 n% d2 N8 F% y9 s
    d_temp=subs(d,x1,x(1));      %将起始点代入,求得当次下降x1梯度值
# t( f' N9 l4 j$ r    d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值5 Q( n! r. b% D% `( L* g% j: B( N
    nor=norm(d_temp); %范数
2 G. K& F- V/ n  n* ]1 o    if(nor>=e)4 }; x; M/ e" `# D1 Q( m7 E. z
        x_temp=x+m*d_temp;            %改变初始点x的值
3 d8 H$ S% E! c- @$ I        f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数) w4 [% U* ], s
        f_temp=subs(f_temp,x2,x_temp(2));
# b( b) i; z0 o0 y/ u2 Q        h=diff(f_temp,m);  %对m求导,找出最佳学习率# i7 M- D/ ]( k( e
        m_temp=vpasolve(h);   %求方程,得到当次m# [" z9 r3 Z* G
        x=x+m_temp*d_temp; %更新起始点x
; F9 a8 e9 R2 K( H        k=k+1;3 B  K! m4 ?0 G& x# M' `3 ?9 w
    else* L3 ?* w4 P9 t, B. a# i( x6 \
        flag=0;7 L# `% K4 F  T5 e  o: c5 {
    end
" l+ t1 t/ P; M- Eend
3 X! |1 F" x4 ?, z/ Fender=double(x);  %终点
" b/ X: ?0 j: k" e; x4 gend( q8 a! X& F% j9 E. f! y% P: w

# Z6 t6 @* q/ A) _; \5 H: O# y- Z
. t8 i# P; k) Q  `. r8 Z# m# P% d1 h
运行后提示( C. c+ O; i3 w
beiyong) u+ c5 F( X0 s; M. A; D  B4 f5 F
错误使用 symengine# K& n8 c  Q  O5 C$ v+ [
The dimensions do not match.
7 G1 B  ^- B: {3 m' R, N  _  n0 A& j4 _
2 C2 X8 z5 V1 X9 Q$ K! V出错 sym/privBinaryOp (line 946)
) ~, O1 B, k" @- I# N            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});% L- C3 y, p4 h0 h1 n

5 }6 e5 Y: t0 \6 S4 k- O# Q  T" v出错  *  (line 273); Z% v4 D% n( H: W9 S5 c+ s  @3 F
        X = privBinaryOp(A, B, 'symobj::mtimes');
( Q+ W% k' M! i+ h0 d: R5 ]
2 I+ P% g( z# D" ]: P出错 beiyong>steepest (line 38)" \, A% x# A2 y; {
        x=x+m_temp*d_temp; %������ʼ��x/ `- H5 H% v. v" P
% H" O  K$ m/ T9 ~
出错 beiyong (line 21)+ p* V1 r* v. A+ c1 r- w
[k, ender]=steepest(f,x,e);, [7 _+ v" }6 O1 A9 z7 m0 o/ ?+ @
求助,感谢!
4 H( |+ ^/ K( O. y
) E: j- K1 B. ^4 a' c& P( d
求助* M  @$ [8 \4 ]# }

, n$ A7 ]' ]" {0 n

该用户从未签到

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

该用户从未签到

3#
发表于 2020-8-12 10:09 | 只看该作者
个人认为在自定义函数求解方程时m_temp=vpasolve(h);   %求方程,得到当次m存在问题,求解结果为空,6 [( }# V9 z+ d; b
改用: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 05:14 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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