Лабораторная работа №1. Изучение основных способов представления математических проблем в символьном виде, пригодном для формальной обработки на компьютере.

Страницы работы

5 страниц (Word-файл)

Содержание работы

Министерство образования и науки Российской Федерации

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра прикладной математики и информатики

Лабораторная работа №1

Факультет:                     ПМИ

Группа:                            ПМ-15

Студенты:                       Голубева М. В.

Кичаева Н. А.

Вариант:                          2

Преподаватели:             Пономаренко В.М.

Ванюкевич О.Н.

Новосибирск

2005

1.  Цель работы:

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

2.  Задание

1.  На примере программы  символьного дифференцирования, прилагаемого к данной лабораторной работе, рассмотреть структуру данных для представления математических выражений.

2.  Развить данную структуру для представления вещественных чисел, комплексных чисел.

3.  Познакомиться с принципами лексического и синтаксического анализа входных строковых выражений, представляющих математические тексты.

4.  Познакомиться с принципами трансляции из внутреннего представления математических выражений во внешнее – строковое.

5.  Рассмотреть Пролог – программу  для символьного дифференцирования и упрощения алгебраических выражений с точки зрения декларативной семантики (как систему аксиом)

6.  Используя в качестве прототипа программу аналитического дифференцирования, составить программу аналитического интегрирования для выбранного класса функций.

3.  Реализация

1.  Для того чтобы можно было использовать вещественные числа при работе с программой были внесены следующие изменения (с учетом того, что множество вещественных чисел включает в себя множество целых):

В определении типа EXP заменили int(INTEGER) на int(REAL).

Далее при разборе строк используется функция конвертации строки в переменную типа int, эту функцию везде заменим на функцию конвертации строки в переменную типа real:

В разделе “CLAUSES FOR CONVERTING AN EXPRESSION TO A STRING”:

strexp(int(INT),INTSTR) :-  str_int(INTSTR,INT).

В разделеCLAUSES FOR PARSING OF AN EXPRESSION”:

elmexp(["-",TALSTR|IL],IL,int(INT)):-

                             str_int(TALSTR,INTp),

                             INT = -INTp.  

                               INT = -INTp.

elmexp([TALSTR|IL],IL,int(INT)):-str_int(TALSTR,INT),!.

2.  Для использования функции “экспонента” были введены следующие правила:

a)  При разборе строки в разделе CLAUSES FOR PARSING OF AN EXPRESSION

elmexp(["exp","("|IL],OL,exp(EXP)):-

    s_exp(IL,OL1,EXP),

    front(")",OL1,OL),!.

b)  При конвертации выражения в строку в разделе CLAUSES FOR CONVERTING AN EXPRESSION TO A STRING

strexp(exp(EXP),STR) :-

    strPAR(EXP,STRp),

    concat("exp",STRp,STR).

3.  Далее что касается аналитического интегрирования сначала, сформулируем свойства интегралов использованные для данной программы:

1) ,  а = const

2)

3)

4)

5)

Для реализации этих свойств был введен предикат  i(EXP,EXP,EXP), означающий что

i(U,X,V) Þ .

Также были реализованы основные табличные интегралы.

                      

                                    

,            

Для реализации свойств интегралов введены следующие правила:

i(int(0),_,int(0)):-!.

i(int(Y),X,mult(int(Y),var(X))):-!.

i(var(Y),X,mult(var(Y),var(X))):-!.

Для реализации свойства 2. аддитивности.

i(plus(U,V),X,plus(U1,V1)):i(U,X,U1),

i(V,X,V1).

i(minus(U,V),X,minus(U1,V1)):i(U,X,U1),

i(V,X,V1).

Для реализации умножения на число.

i(mult(int(Y),V),X,mult(int(Y),V1)):i(V,X,V1),!.

i(mult(V,int(Y)),X,mult(int(Y),V1)):i(V,X,V1),!.

Для реализации интегрирования по частям.

i(mult(U,DV),X,minus(mult(U,V),I)) :-

d(U,X,DU),

i(DV,X,V),

reduce(mult(DU,V),M),

i(M,X,I), !.

Для реализации свойства 4.

i(div(DU,U),X,ln(U)):d(U,X,H),

reduce(H,DU),!.

i(div(int(A),U),X,mult(div(ln(U),I),int(A))) :d(U,X,I),!.   

Степенная функция.

i(potens(E1,int(I)),_,div(potens(E1,int(I1)),int(I1))):-

I1=I+1.

Экспонента.

i(exp(U),X,div(exp(U),I)):-d(U,X,I),!.

Логарифмическая функция.

i(ln(var(X)),X,minus(mult(var(X),ln(var(X))),var(X))).

Тригонометрические функции.

i(sin(Y),X,div(mult(int(-1),cos(Y)),V)):d(Y,X,V),!.

i(cos(Y),X,div(sin(Y),V)):-d(Y,X,V).

i(tan(U),X,mult(int(-1),ln(cos(U1)))):-d(U,X,U1),!.

i(div(int(1),tan(U)),_,DU):-reduce(mult(int(1),ln(sin(U))),DU),!.

i(div(int(1),potens(sin(U),int(2))),X,div(mult(int(-1),div(int(1),tan(U))),H)):d(U,X,H),!. 

i(div(int(1),mult(sin(U),sin(U))),X,div(mult(int(-1),div(int(1),tan(U))),H)):d(U,X,H),!.

i(div(int(1),potens(cos(U),int(2))),X,div(mult(int(1),tan(U)),H)):d(U,X,H),!.

i(div(int(1),mult(cos(U),cos(U))),X,div(mult(int(1),tan(U)),H)):d(U,X,H),!.

4.  Тестирование программы

Исходная функция - f(x)

Значение интеграла - F(x)+C

0.9999

0.9999*x+C

2.3*x

2.3*x^2+C

7.1/x

7.1*ln(x)+C

2.0*sin(9*x)-x^2

2*-1*cos(9*x)/9-x^3/3+C

9.2/(9.2*x)

ln(9.2*x)+C

s+0.9*tan(1.2*x)

s*x+-0.75*ln(cos(1.2*x))+C

2.0/tan(9.0*x)

2*ln(sin(9*x))/9+C

2.0*exp(0.9*x)

2*exp(0.9*x)/0.9+C

8/cos(9*x)^2+5/(sin(2*x)*sin(2*x))

8*tan(9*x)/9+-1*5/tan(2*x)/2+C

Информация о работе