まだ動いてないけどメモ
clear all; close all; p =[0 0 0]; dp=[1 1 1]; best_err = run(p); threshold = 0.001; cnt = 1; while sum(dp) > threshold for i=1:3 p(i) = p(i) + dp(i); err = run(p); if err<best_err best_err = err; dp(i) = dp(i) * 1.1; else p(i) = p(i) - 2*dp(i); err = run(p); if err < best_err best_err = err; dp(i) = dp(i) * 1.05; else p(i) = p(i) + dp(i); dp(i) = dp(i) * 0.95; end end end cnt = cnt+1; fprintf('step:%d, sum(dp):%f\n',cnt,sum(dp)); end fprintf('kp:%f, ki:%f, kd:%f\n',p(1),p(2),p(3)); function err = run(p) s = tf('s'); G = 1/(1-s+s^2); kp = p(1); ki = p(2); kd = p(3); C = kp + ki/s + kd*s; Gc = 1/(1+C*G); [y,t] = step(Gc); err=abs(y(end)-1); end
実行結果
>> twiddle step:2, sum(dp):2.850000 step:3, sum(dp):2.707500 step:4, sum(dp):2.572125 step:5, sum(dp):2.443519 step:6, sum(dp):2.321343 step:7, sum(dp):2.205276 step:8, sum(dp):2.095012 step:9, sum(dp):1.990261 step:10, sum(dp):1.890748 step:11, sum(dp):1.796211 step:12, sum(dp):1.706400 step:13, sum(dp):1.621080 step:14, sum(dp):1.540026 step:15, sum(dp):1.463025 step:16, sum(dp):1.389874 step:17, sum(dp):1.320380 step:18, sum(dp):1.254361 step:19, sum(dp):1.191643 step:20, sum(dp):1.132061 step:21, sum(dp):1.075458 step:22, sum(dp):1.021685 step:23, sum(dp):0.970601 step:24, sum(dp):0.922071 step:25, sum(dp):0.875967 step:26, sum(dp):0.832169 step:27, sum(dp):0.790560 step:28, sum(dp):0.751032 step:29, sum(dp):0.713481 step:30, sum(dp):0.677807 step:31, sum(dp):0.643916 step:32, sum(dp):0.611720 step:33, sum(dp):0.581134 step:34, sum(dp):0.552078 step:35, sum(dp):0.524474 step:36, sum(dp):0.498250 step:37, sum(dp):0.473338 step:38, sum(dp):0.449671 step:39, sum(dp):0.427187 step:40, sum(dp):0.405828 step:41, sum(dp):0.385536 step:42, sum(dp):0.366260 step:43, sum(dp):0.347947 step:44, sum(dp):0.330549 step:45, sum(dp):0.314022 step:46, sum(dp):0.298321 step:47, sum(dp):0.283405 step:48, sum(dp):0.269234 step:49, sum(dp):0.255773 step:50, sum(dp):0.242984 step:51, sum(dp):0.230835 step:52, sum(dp):0.219293 step:53, sum(dp):0.208329 step:54, sum(dp):0.197912 step:55, sum(dp):0.188016 step:56, sum(dp):0.178616 step:57, sum(dp):0.169685 step:58, sum(dp):0.161201 step:59, sum(dp):0.153141 step:60, sum(dp):0.145484 step:61, sum(dp):0.138209 step:62, sum(dp):0.131299 step:63, sum(dp):0.124734 step:64, sum(dp):0.118497 step:65, sum(dp):0.112572 step:66, sum(dp):0.106944 step:67, sum(dp):0.101597 step:68, sum(dp):0.096517 step:69, sum(dp):0.091691 step:70, sum(dp):0.087106 step:71, sum(dp):0.082751 step:72, sum(dp):0.078614 step:73, sum(dp):0.074683 step:74, sum(dp):0.070949 step:75, sum(dp):0.067401 step:76, sum(dp):0.064031 step:77, sum(dp):0.060830 step:78, sum(dp):0.057788 step:79, sum(dp):0.054899 step:80, sum(dp):0.052154 step:81, sum(dp):0.049546 step:82, sum(dp):0.047069 step:83, sum(dp):0.044715 step:84, sum(dp):0.042480 step:85, sum(dp):0.040356 step:86, sum(dp):0.038338 step:87, sum(dp):0.036421 step:88, sum(dp):0.034600 step:89, sum(dp):0.032870 step:90, sum(dp):0.031226 step:91, sum(dp):0.029665 step:92, sum(dp):0.028182 step:93, sum(dp):0.026773 step:94, sum(dp):0.025434 step:95, sum(dp):0.024162 step:96, sum(dp):0.022954 step:97, sum(dp):0.021807 step:98, sum(dp):0.020716 step:99, sum(dp):0.019680 step:100, sum(dp):0.018696 step:101, sum(dp):0.017762 step:102, sum(dp):0.016874 step:103, sum(dp):0.016030 step:104, sum(dp):0.015228 step:105, sum(dp):0.014467 step:106, sum(dp):0.013744 step:107, sum(dp):0.013056 step:108, sum(dp):0.012404 step:109, sum(dp):0.011783 step:110, sum(dp):0.011194 step:111, sum(dp):0.010635 step:112, sum(dp):0.010103 step:113, sum(dp):0.009598 step:114, sum(dp):0.009118 step:115, sum(dp):0.008662 step:116, sum(dp):0.008229 step:117, sum(dp):0.007817 step:118, sum(dp):0.007426 step:119, sum(dp):0.007055 step:120, sum(dp):0.006702 step:121, sum(dp):0.006367 step:122, sum(dp):0.006049 step:123, sum(dp):0.005746 step:124, sum(dp):0.005459 step:125, sum(dp):0.005186 step:126, sum(dp):0.004927 step:127, sum(dp):0.004681 step:128, sum(dp):0.004447 step:129, sum(dp):0.004224 step:130, sum(dp):0.004013 step:131, sum(dp):0.003812 step:132, sum(dp):0.003622 step:133, sum(dp):0.003441 step:134, sum(dp):0.003269 step:135, sum(dp):0.003105 step:136, sum(dp):0.002950 step:137, sum(dp):0.002802 step:138, sum(dp):0.002662 step:139, sum(dp):0.002529 step:140, sum(dp):0.002403 step:141, sum(dp):0.002283 step:142, sum(dp):0.002168 step:143, sum(dp):0.002060 step:144, sum(dp):0.001957 step:145, sum(dp):0.001859 step:146, sum(dp):0.001766 step:147, sum(dp):0.001678 step:148, sum(dp):0.001594 step:149, sum(dp):0.001514 step:150, sum(dp):0.001439 step:151, sum(dp):0.001367 step:152, sum(dp):0.001298 step:153, sum(dp):0.001233 step:154, sum(dp):0.001172 step:155, sum(dp):0.001113 step:156, sum(dp):0.001057 step:157, sum(dp):0.001005 step:158, sum(dp):0.000954 kp:0.000000, ki:0.000000, kd:0.000000