Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2docx-1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.27 Mб
Скачать

32. Символьные вычисления. Алгоритм символьного дифференцирования.

Вычисление выражений векторной алгебры. По аналогии с оператором is, можно вве-сти операцию для выч-я выр-й, содержащих векторы. Соотв-е выраж-я корректно раз-бираются Пролог-системой в деревья структур­ных термов, преимущ-но бинарных, так что необх-мо лишь определить аналог оператора is, котй будет по выражению строить рез-т. Замена переменной в выражении. Рассм. задачу подстановки. Дано некот. Выр-е (например, 1+2+х+х*(х+1)), в кот. надо заменить все вхождения атома х на некот. подвыр-е. Для решения этой задачи определим предикат subst/4: ?-subst(a,x+10,(а-1)*(а+1), R). R = (х+10-1)*(х+10+1). Когда предикату по­дается на вход сложное выр-е вида (а-1)*(а+1). оно явл-ся структурным термом * с 2мя аргументами-подвыр-ми.

subst(X,E,X,E) :- !. % R1 // subst(_,_,X,X) :- atomic(X). % R2 //

subst(X,E,Expr,Res) :- % R3

Expr =.. [Op,A,8],

subst(X,E,A,Al),

subst(X,E.B,Bl),

Res =.. [Op,Al ,BI] .

R1 определяет процесс замены атома на требуе­мое подвыражение. Чтобы избежать альт-х решений, в кот.некот.вхождения атома не заменены, это правило снабжено отсече­нием. R2 - для обработки атомарных выражений; встроенный предикат atomic/1 проверяет, явл-ся ли аргумент константой - атомом или числом. R3 осущ-ет рекурсив-ную обработку сложных выр-й: при помощи =.. функтор верхнего уровня разбивается на сост.части (оператор Ор и аргументы А и В), к аргументам предикат subst применя-ется рекурсивно, после чего результирующее выр-е снова соби­рается из оператора и переработанных операндов при помощи =… Р-равенство формул Ччасто встречается ситуация, ко­гда необх-мо установить рав-во 2х символьных выражений, что требует рассмотрения различных возможных спосо­бов записи выражения переборным алгори-тмом, т.е. ее решение связано с существенными вычисли­т.затратами. Во многих случаях для быстрой проверки рав-ва выр-й исп-ют понятие Р-равенства, т.е. рав-ва вы­ражений на некотором достаточно полном наборе значений входящих в них переменных. Df Пусть Е1 и Е2 - два выражения с множеством переменных <х_1...х_n>. Эти выражения называются Р-равными на множестве Р, если х Р. Е1|_ х = Е2|_х. Симв-е диф-е. Для простоты ограничимся лишь арифметическими операциями. Введем предикат d/З, d(E,X,D) означает, что D - производная выр-я Е по пер-й X. Запрос на диф-е простого выражения будет вы­глядеть следующим образом:

?- d((x-l)/(x+l),x,R). R = ((1-0)*(х+1)-(1+0)*(х-1)}/((х+1)*(х+1))

Диф-е построено на рекурс-м принципе обработки дер.выр-я, замена пер-й -только для кажд.операции необх.предусмотреть обработку в соответствии с правилами диф-я.

d(X,X,1) :- !. // d(T,X,0) :- atomic(Т).

d(U+V,X, DU+DV) :- d(U,X,DU), d(V,X,DV).

d(U-V, X, DU-DV) :- d(U,X,DU), d(V,X,DV).

d(-T,X,-R) :- d(T,X,R). // d(C*U,X,C*W) :- atomic(C), C\\=X, !, d<U,X,W).

d(U*V,X,Vd*U+Ud*V) :- d(U,X,Ud), d(V,X,Vd).

d(U/V,X,(Ud*V-Vd*U)/(V*V)) :- d(U,X,Ud), d(V,X,Vd).