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

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

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

Министерство Общего и Профессионального Образования

НГТУ

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

по дисциплине «Системы искусственного интеллекта»

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

Группа:               ПМ-83

Студенты:           Большакова А

Миркин Е.

Журавлев В.

Моисеев Д.

Преподаватели:

г. Новосибирск 2001


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

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

2.Задание

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

3. Решение

Расширение структуры данных:

Так как неопределённый интеграл может содержать такие функции как arctg, arcsin,  модуль, а так же вещественные и комплексные числа, то необходимо расширить структуру данных для представления математических выражений

EXP=var(STRING); int(INTEGER); plus(EXP,EXP); minus(EXP,EXP); mult(EXP,EXP);  div(EXP,EXP); ln(EXP); cos(EXP); sin(EXP); tan(EXP); sec(EXP); potens(EXP,EXP)

следующим образом:

EXP=var(STRING); flt(REAL); plus(EXP,EXP); minus(EXP,EXP); mult(EXP,EXP); div(EXP,EXP); ln(EXP); cos(EXP); sin(EXP); tan(EXP); potens(EXP,EXP); abs(EXP); atan(EXP); asin(EXP)

Поддержка вещественных чисел:

Для реализации корректного преобразования вещественных чисел, требуется

а) модифицировать сканер исходной программы следующим образом:

праило    elmexp([TALSTR|IL],IL,int(INT)):-str_int(TALSTR,INT),!.

заменить на правила:

elmexp([S1,".",S2|IL],IL,flt(FLT)):-concat(S1,".",S3), concat(S3,S2,S4),

                        str_real(S4,FLT),!.

                elmexp([STR|IL],IL,flt(FLT)):-str_real(STR,FLT),!.

б) модифицировать блок преобразования внутреннего представления выражения во внешнее строковое:

заменить правило strexp(int(INT),INTSTR) :- str_int(INTSTR,INT).

на правило             strexp(flt(FLT),FLTSTR) :- str_real(FLTSTR,FLT).

в) заменить все вхождения элемента int() на flt() и все вызовы предиката str_int() на вызовы str_real().

Поддержка комплексных чисел:

Для обеспечения поддержки комплексных чисел, объявим переменную i как мнимую единицу и к правилам редуцирования математического выражения добавим правила, соответствующие свойствам i2=-1, i3-i, i4=1, i5=i,…

multr(var(i),var(i),flt(-1)):-!.

multr(var(i),X,R):-multr(X,var(i),R),!.

multr(mult(X,var(i)),var(i),M1):-!, multr(flt(-1),X,M1).

multr(var(i),mult(X,var(i)),M1):-!, multr(flt(-1),X,M1).

multr(mult(X,var(i)),mult(Y,var(i)),mult(flt(-1),R)):-!, multr(X,Y,R).

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

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

а так же в остальных правилах переменную i всегда считать константой.

Интегрирование:

Введём предикат интегрирования:

i(EXP,EXP,EXP)

i(U,X,V) Þ

Теперь можно определить правила нахождения интеграла:

1.  Свойства интеграла:

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), !.

,  С = const

i(mult(E,U),X,mult(E,V)):- const(E,X), i(U,X,V), !.

      i(mult(U,E),X,mult(E,V)):- const(E,X), i(U,X,V), !.

, С=const

i(div(E,U),X,mult(E,V)):- const(E,X), i(div(flt(1),U),X,V), !.

      i(div(U,E),X,mult(div(flt(1),E),V)):- const(E,X), i(div(flt(1),U),X,V), !.

2.  Интегралы от рациональных функций:

i(E,X,mult(E,X)):-const(E,X), !.

, N¹-1

i(X,X,div(potens(X,flt(2)),flt(2))):-!.

i(potens(X,flt(N)),X,div(potens(X,flt(M)),flt(M))):-N<>-1, M=N+1, !.

i(potens(X,flt(-1)),X,ln(abs(X))):-!.

i(potens(plus(mult(A,X),B),flt(N)),X,div(potens(plus(mult(A,X),B),flt(M)),

mult(A,flt(M)))):-N<>-1,M=N+1,const(A,X), const(B,X),!.

i(potens(plus(mult(X,A),B),flt(N)),X,div(potens(plus(mult(A,X),B),flt(M)),

mult(A,flt(M)))):-N<>-1,M=N+1,const(A,X), const(B,X),!.

i(potens(plus(B,mult(A,X)),flt(N)),X,div(potens(plus(mult(A,X),B),flt(M)),

mult(A,flt(M)))):-N<>-1,M=N+1,const(A,X), const(B,X),!.

i(potens(plus(B,mult(X,A)),flt(N)),X,div(potens(plus(mult(A,X),B),flt(M)),

mult(A,flt(M)))):-N<>-1,M=N+1,const(A,X), const(B,X),!.

i(div(flt(F),plus(mult(A,X),B)),X,mult(div(flt(F),A),ln(abs(plus(mult(A,X),B))))):-                          сonst(A,X), const(B,X),!.

i(div(flt(F),plus(mult(X,A),B)),X,mult(div(flt(F),A),ln(abs(plus(mult(A,X),B))))):-const(A,X), const(B,X),!. 

i(div(flt(F),plus(B,mult(A,X))),X,mult(div(flt(F),A),ln(abs(plus(mult(A,X),B))))):-const(A,X), const(B,X),!. 

i(div(flt(F),plus(B,mult(X,A))),X,mult(div(flt(F),A),ln(abs(plus(mult(A,X),B))))):-const(A,X), const(B,X),!.

i(div(flt(F),mult(plus(X,A),plus(X,B))),X,mult(div(flt(F),minus(A,B)),ln(abs(

div(plus(X,B),plus(X,A)))))):-const(A,X), const(B,X),not(equal(A,B)), !.

i(div(flt(F),mult(plus(A,X),plus(X,B))),X,mult(div(flt(F),minus(A,B)),ln(abs(

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