Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
velikiu_lol
0 / 0 / 0
Регистрация: 12.05.2012
Сообщений: 1
1

Программа символьного дифференцирования арифметических выражений. Помогите

15.05.2012, 15:55. Просмотров 1015. Ответов 1
Метки нет (Все метки)

Доброго времени суток,задача такая:
"Написать программу символьного дифференцирования арифметических выражений, представленных в канонической (в виде структур) для языка Пролог форме. При этом единственная переменная (по которой производится дифференцирование) обозначается буквой x, а константы - всеми иными строчными (маленькими) буквами."
я сам не очень разбираюсь,но нужно сделать. В общем программа работает нормально,только есть сложность с использованием знаков арифметических операций. Вот код:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
%Программа дифференцирования арифметических выражений с одной переменной x
 
diff(X,X,1).
 
diff(Y,_,0):-number(Y).
 
diff(Y,X,0):-atom(Y),X \= Y.
 
diff(^(X,N),X,#(~(x,N1),N)):-number(N),N1 is N-1.           %Случай, когда константа представлена числом
 
diff(^(X,A),X,#(~(x,A-1),A)).                               %Случай, когда константа представлена строчной %буквой
 
diff(+(Y,Z),X,+ (DY,DZ)):-diff(Y,X,DY),diff(Z,X,DZ).          %Дифференцирование суммы
 
diff(-(Y,Z),X,- (DY,DZ)):-diff(Y,X,DY),diff(Z,X,DZ).          %Дифференцирование разности
 
diff(#(Z,Y),X,#(DZ,Y)):-number(Y),diff(Z,X,DZ).                    %Дифференцирование произведения, когда  %константа Y предсталена числом
 
diff(#(Z,Y),X,+ (#(DY,Z),#(DZ,Y))):-diff(Y,X,DY),diff(Z,X,DZ).            %Дифференцирование %произведения, когда  константа строчной буквой
 
diff(\(Y,Z),X,\(- (#(DY,Z),#(Y,DZ)),#(Z,Z))):-diff(Y,X,DY),diff(Z,X,DZ).    %Дифференцирование частного

Проблема в том,что если заменить знаки # на *, ~на^,\ на / то программа выводит результат в инфиксной форме,грубо говоря "считает" выражение. Должно быть-
diff(^(x,4),x,Z). -----> *(^(x,3),4), а получается-
diff(^(x,4),x,Z). -----> x^3*4.
Кто чем может,помогите плз...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 15:55
Ответы с готовыми решениями:

Упрощение арифметических выражений
Буду очень благодарен, если мне помогут разобраться с этой задачей. В общем нужно упростить...

Создать список арифметических выражений
Определите предикат p(+List1,+List2,?List3), который из двух списков (возможно разной длины) и ...

Вычислитель арифметических выражений (DCG)
Здравствуйте! Задача тривиальная : нужно реализовать синтаксический анализатор арифметических...

Разбор и вычисление значений арифметических выражений
Реализовать разбор и вычисление значений арифметических выражений, атомы которого — целые 16-ричные...

Опишите функцию символьного дифференцирования
{D}_{x}(x) = 1;<br/>{D}_{x}(y) = 0,\: y \neq x<br/>{D}_{x}({e}_{1} + {e}_{2}) =...

1
Грымзик
2487 / 1462 / 36
Регистрация: 14.09.2009
Сообщений: 2,742
16.05.2012, 01:09 2
Вроде нереально в префиксной форме выводить, автоматически преобразуется
?- +(1,5)=A.
A = 1+5.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2012, 01:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать программу символьного дифференцирования дробно-рациональной функции
Доброго времени суток.Заранее благодарю всех,кто читает эту тему.Пришла пора зачётов и нужно...

Как подставить конкретные значения в результат символьного дифференцирования
Добрый день! Есть у меня функция F_V от нескольких переменных (V, m, n, h), я её символьно...

Написать программу символьного дифференцирования многочлена от одной переменной
Помогите написать программу символьного дифференцирования многочлена от одной переменной.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.