Занятие 12. Символьная регрессия и автоматическое

advertisement
З
•
•
•
•
•
ят е .
ол
я е е я
то т е кое д
е е
о
е
К ткое оде
е
о т е
ол о е е
т к е к е де е
о
т
пол к
о т е е ет е ко о л о т
ол
е е
: п кт е к п
е
Ду л
е
л
то т е кое д
е е
п
о
е
т
.
ол
я е е
я
ол
я е е япутё пе е о
упе по
етод по т ое
е е
ее д
оо
о то
т :
1.
о о о пол о т то
одел
Недо т тк :
1.
е у оё ко т
2.
е едко полу е
е одел
Дл по к опт
л о
е ет е к е л о т .
дл
п
пол о
е ет е к
опе
, ко ок т.п.)
лу е, ко д
о
о
е
то
о ло
одел
п
е
о
ло
ул
т
ло
оделе
у к
е те
д
т т к
-
еудо
оо п о
е
е
дл
тет
т к
е кое де е о
• О
=
−
полу
т
оде
т к е ко о
л
о ул
•
е т е ует
д
е п о тет
опе
о де е е
•
ёт
по о
еку
т.е.
пу к по подде е
+
+
−
^
∗
о
О
О
т
я пол к я по т
т
я пол к я
к
я
3 5 + 2 * 6 7 + 8 9 - / ле
В
В
В
В
В
В
В
е
е
я
3 5 + 2 * 6 7 + 8 9 - / 3 5
+ 2 * 6 7 + 8 9 - / 8 2
* 6 7 + 8 9 - / 16 6 7
+ 8 9 - / 16 13 8 9
- / 16 13 -1
/ 16 -13
29
п
п
д
о
я
к я п
2*(3+5) – (6+7)/(8-9)
ле
е
е
я
3+5 = 8; 8*2 = 16
6+7 = 13; 8-9 = -1
13/-1 = -13;
16 – (-13) = 29
О о е о т о
т о пол ко
п
:
•
опе
от ут т ует п о тет
•
е у
ко к
•
е опе
п
т
ед оо
о
О о е о т
от о теко
1. о е
е
до л т
ео е
у
2. Опе
е ут
е
е
тек по е
т
е ул т т
е
у
е ет
е к е ло
е ет е к е л о т
–
ло т
ел е о
опт
. Кл е е
кте т к :
•
от
ол
кол е т о
поте
л
е е
«попул
е »
• И пол о
е еле о у к
дл от о
ле о попул
•
олу е е о
ле о
попул
опе
« к е
»
ко
о
е
« ут
» лу
е
е е
п о е о
п
оде
де
ло т
л
оло
.
ол
о
е ет е ко о
т
е о
т
е е
лу
о
од о
попул
От о
т попул
пол о
е еле о
у к
Жел е
е ул т т
до т ут?
Н
е ут
е ул т т
олу е
е едо т
т попул
к е
е
ут
е
е
о
1.
2.
3.
4.
5.
6.
е опе
о е т т
тек x
о е т т
тек
ло
ло е е
т
е
о е е деле е
/ + ))
о еде е тепе
)
у
о
п л
е! О дол
т ко ект
од
д
ле
е
ол
популя
о
п
о
е е
.
попул
.
де
де
е ул т т
!
т о пол ко
к е
т д
лу
дел т к
е е д е
по е т
е т
A B + C D
C D / B A
а
A B + C /
C D D + *
е
ле
дое
т
+ * => (A+B)*(C+D)
^ + => (C/D)+B^A
B A ^ + => (A+B)/C+B^A
=> C*(D+D)
. е т лу
е
е е
« ут
»
ко
е т
опе
Фу к
яп
=
по о ле
�
�
−
�
о т
е
ол
=
−
о
е е
+
е ул т т е е
X [-1.0409] +
п о е
U- [2.0115] ^ [3.8315] [0.3417] ^ [0.6995] / [0.6995] ^ +
е ул т т е е
(X – 1.0409)^2.0115 + (3.8315^0.3417/0.6995)^0.6995 =
= (X – 1.0409)^2.0115 + 1.7701
т
.
то
т
е кое д
е е
о
е
е е
ле
�′
е
≈
�
о
ол
ое
+Δ −�
Δ
у е т :
•
ет о
е
д
у к
п .,
допу т
етод
о теК ло,
ек
т.п.
•
о тот
Недо т тк :
•
ок по е о т
е у к
ео
е
о
е
то
ое
е
у е т :
•
к по е о т
Недо т тк :
• ло о т
• Фу к
дол
т
од
е е
т
е кое
И пол о
е ду л
ел о о о
ет к
е
у е т :
•
к по е о т
• От о тел
п о тот
• Допу т
кл
ет ле
у к
Недо т тк :
•
екото е
о
е
д
у к
у л
у т
•
•
•
•
+
+
+ �
+ �
+
Фу к
е
≠ т кое, то = ,
о д = + – ду л ое
ет
=
+
е к е де т
+
+
=
=
+ � − �
=
+ � − �
� = exp � ln
я от ду л
+
−
2−
+
оо
+
я
�+
�+
+
+
л
– де т тел
е
л .
ло
л. dual number)
д ду л
+
+
�− �2
�− 2 �2
=
л
+
=
= exp � ln +
−
2
�
+
�
+
= +
=
�
+
−
2
�−
л
� +
=�
+ �′
⋅
Док тел т о: е е
д е ло
�′
� ′′
� +
=�
+
+
!
!
=
+⋯=�
+ �′
⋅
то
то
т
е кое д
е е
о
е
т
е кое д
е е
о
е од т я к
ет ке ду л
ел. л о т
о де я
т о п о од о :
• Ко т т
п
ет о т т де т тел
л
•
е е е
, по кото о едет д
е е
о
е,
е ет
�
ду л
ло : =
+ т.к. = ).
�
•
е ул т т – ду л ое
ло. Де т тел
т –
т.е. ) –
е е п о од о то ке
�
+
=
+
е
;
е
е у к
=
по о .
л т е к
ёт п о од о
=
�′
=
+ =
+
; �′
по о . то т е кое д
е е
о
е
+
=
+
=
+
+
=
=
�
+
�′
,
то
т
е кое д
о
ео
е
о тел
тек то у к
е е
я е л
од
у е т :
•
окое
т оде т е код
•
е
окл о у
ку
п о
о
Недо т тк :
• А то т е к
е е
код
•
к
л д о т
еде
е
о
е
я
е ду л
т п д
ел к к
у е т :
•
о тот
л д о т
• Фу к
ле ко пе едел т
у у
Недо т тк :
• Я к дол е подде
т ОО
пе е у ку опе то о C++,
MATLAB, Python, Ruby, Fortran-90
д .
•
е е ко о т
ет
пол о тел ко о т п д
о ят е о кл
Кл
–т пд
, о тоя
е п о
поле
пе е е
о
етодо
у к
classdef DualNumber % И я
а а
properties %
я
а а
a
b
end
methods %
(
)
а а
function obj = DualNumber(a, b) % К
obj.a = a; obj.b = b;
end
; o1 –
я
а а
function r = log(o1) %
r = DualNumber(builtin('log', o1.a), o1.b./o1.a);
end
а
.*
function r = times(o1, o2) %
r = DualNumber(o1.a.*o2.a, o1.b.*o2.a + o1.a.*o2.b);
end
% … К
УЩ
…
end
end
Кл
для
о д
то
т
е пе е е
е ко о д
о
от
>> x=DualNumber.CreateXValue(2)
x =
1 x 1 DualNumber matrix
(@ means epsilon)
2.0000+1.0000@
>> x.a
2
>> x.b
3
Н о де
еп о
од о
>> 0.5.*(2.*x + 3).^4
1 x 1 DualNumber matrix
(@ means epsilon)
1.00e+03 *
1.2005+1.3720@
>> 4*(2*2+3)^3
1372
е!
е ует я Octave .
е е
л
о
я
т
>> x=DualNumber.CreateXValue([0.5
1; 1.5 2])
x =
2 x 2 DualNumber matrix
(@ means epsilon)
0.5000+1.0000@ 1.0000+1.0000@
1.5000+1.0000@ 2.0000+1.0000@
>> (2.*x+3).^(3.*x-1)
ans =
2 x 2 DualNumber matrix
(@ means epsilon)
1.00e+05 *
0.0000+0.0001@ 0.0003+0.0014@
0.0053+0.0346@ 0.1681+1.2212@
е л MATLAB .
е для classdef)
Кл
для
то
т
е ко о д
xv = DualNumber.CreateXValue(-3:0.01:3);
f = xv.^3;
close all;
plot(xv.a, f.b, 'k-', 'LineWidth', 2);
hold on;
plot(xv.a, f.a, 'r-', 'LineWidth', 2);
hold off;
legend('f''(x)', 'f(x)');
е е
о
я
Download