Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Вычисление интеграла и производной от функции


Автор: rs5630 20.12.2014, 17:26
Нужна помощь по следующей задачкой. Проблема, с тем, что выделенно жинрым шрифтом.

1. Протабулировать функцию Гаусса: f(x) = 1/(sqrt(2*pi)*s)*exp(-0.5*((x-m)/s)**2) на отрезке (-10,10) для m = 0 и различных s. Вычислить производную и интеграл от этой функции с помощью метода конечных разностей без применения циклов. Построить графики для данной функции и ее производной. Использовать numpy и matplotlib.

Код

from math import *
import numpy as np
import matplotlib.pyplot as plt
def f(x,s,m):
    return (1./(sqrt(2.*pi)*s))*e**(-0.5*((x-m)/s)**2)
def main():
    m = 0
    s = np.linspace(0.5,5,3)
    x = np.linspace(-10,10,20)
    for i in range(3):
        print('s = ', s[i])
        for j in range(20):
            f(x[j],s[i],m)
            print('x = ',x[j],', y = ',f(x[j],s[i],m))

Автор: kosmonaFFFt 21.12.2014, 18:04
Для вычисления производной и интеграла можно использовать библиотеку sympy...

Автор: rs5630 21.12.2014, 18:05
К сожалению, мне нужно точно как в задании, с помощью numpy.

Автор: bilbobagginz 26.12.2014, 13:37
документацию нампи почитай.
и дифференциация/интеграция - это арифметика массивов.
  • полный http://docs.scipy.org/doc/numpy/reference/routines.math.html
для производной тебя интересует разность и деление:
  • разности: http://docs.scipy.org/doc/numpy/reference/generated/numpy.ediff1d.html#numpy.ediff1d (или http://docs.scipy.org/doc/numpy/reference/generated/numpy.diff.html#numpy.diff)
  • деления: http://docs.scipy.org/doc/numpy/reference/generated/numpy.divide.html#numpy.divide (или http://docs.scipy.org/doc/numpy/reference/generated/numpy.true_divide.html#numpy.true_divide)
напиши функции (методы), которые принимают параметры - массивы.
если ты понимаешь всё, то мона написать класс, который принимает функцию при инициализации, и имеет методы интеграции и производной.
так красивее:
Код

class CoolFunc():
    def __init__(self, title, element_calc_callback):
        assert isinstance(title, str)
        assert hasattr(element_calc_callback, '__call__')
        self._title = title
        self._cb = element_calc_callback
        self._cb_params = dict()
    def derivative(diff):
        # тут типа вычислим производную
        return None
    def integrate(dx, start=None, stop=None):
        # тут интрегал
        return None
# юзаем:
def f(x=None,s=None,m=None):
    return (1./(sqrt(2.*pi)*s))*e**(-0.5*((x-m)/s)**2)

x = ..
y = ..

mycoolshit = CoolFunc("гау###", f)
print(mycoolshit.integrate())
print(mycoolshit.derivative())


если не вдупляем, работаем без красоты.

Автор: Letyuchaya 20.1.2015, 20:39
а у меня все получается)

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