Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Помогите с задачей


Автор: fifty 28.4.2009, 11:24
Помогите сделать задачу на lisp!  
Вычисление элементарных функций с помощью ряда Тейлора или Макларена. 

Вот нашел формулы Тейлора http://elib.ispu.ru/library/math/sem1/index.html- 6-ой раздел
и  http://e-science.ru/math/theory/?t=573

Но незнаю как можно сделать, помогите люди добрые

Автор: fifty 30.4.2009, 11:25
Как можно разложить функцию в lisp smile 
 f(x)=sin x 

что бы в итоге получилось

http://ipicture.ru/

Неужели не кто незнает?

Автор: Enflout 10.5.2009, 00:00
fifty, тебе просто синус посчитать надо? smile 
Код

(defun getSin(x k)
    (cond ((= k 1) x)
          (t (+ (* (expt -1 (- k 1)) (/ (expt x (- (* 2.0 k) 1)) (fact (- (* 2.0 k) 1)) )) (getSin x (- k 1))
             )
          )
    )
)

(defun fact(n)
   (cond ((= n 0) 1)
             (t (* n (fact (- n 1))))

    )    
)


Вызывать как-то так:
Код

(getSin 1 100)

x (в примере - 1) - угол в радианах, синус которого мы хотим вычислить.
k (в примере - 100) - число шагов. Чем больше шагов, тем больше точность, но тут главное, без фанатизма.

P.S.:
В Corman Common Lisp работает  smile 

Автор: fifty 22.5.2009, 20:39
Спасибо за ответ, но немного не так.

Мне надо найти сперва Разделенную разность по формуле:

user posted image

например дано 6 точек на отрезке в ответе мы должны получить 1 точку на отрезке по центру по формуле Разделенные разности, ниже приведена таблица как все это должно выглядеть

user posted image




Как посчитаем Разделенную разность, мы должны вставить в формулу ряда Маклорена

user posted image

В итоге в конечном счете мы должны вводить с клавиатуры:
 f    (любая функция) необязательно можно не склавиатуры =
 k   число ряда =
 x   точка вычисления значения =

У меня не получается посчитать Разделенную разность и вставить в формулу ряды Маклорена

Код

(defun fakt (N)
       (if (= N 0) 1 (* N (fakt (- N 1)))))

(progn
(defun F (X)
    (+ (cos (* X X)) 1)
)

(defun getFunction(string1 k string2 x string3)
    (cond    
((= k 1) (F x))    
    (+ (*(/ (expt (F x) k) (fakt (- k 1))) (expt x k)) (getFunction string1 (- k 1) string2 x string3)
                )
         
           (T "Неправильно ввели функцию")
    )
)
)
        

(terpri)
(princ "Тема: Вычисление элементарных функций" ) ; записываем первую стороку

(terpri)(terpri)
(princ "Разложения по формуле Маклорена, где x - любое число" ) ; записываем первую стороку
(terpri)
(princ "Введите функцию(например: cos,sin,e,sh,ch,arctg,ln1+x,ln1-x)= ")
(princ
    (getFunction            
            (princ "Введите колличество членов ряда(k)= ")
        (read) 
            (princ "Введите в какой точке вычислять значение(x)= ")
        (read)        
            (princ "Ответ= " )
    )
)
(terpri)


Помогите ничего не выходит, думаю доступна объяснил, совсем запутался с формулами на LISP. Кто знает не проходите мимо smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)