Что-то не так с моим для l oop для f (x)? - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь закодировать функцию, которая возвращает f(x), как показано на изображении ниже

enter image description here

Однако, когда я вставляю входные данные N и x, я получаю неправильный ответ.

Я подозреваю, что, возможно, это как-то связано с моим суммированием в функции, но я не уверен, где именно. Я попытался использовать import math.fsum, чтобы сократить длину функции, и, возможно, это повлияло бы на ответ.

Любые предложения были бы очень признательны. Вот мой код для f(x) и производной от f(x), которая включена в функцию:

from math import sin, cos, pi, fsum

def f(x, N):
    for i in range(1, N):

        h = (x/N) + pi/(2*N)
        p = (-pi/2) + i*h     
        y = (h/2)*(df(-pi/2) + df(x)) + h*fsum([df(p) for i in range(1, N)])  

        return(y)


def df(x): 

    d = (3*cos(x)) / ((2 + sin(x))**2)

    return(d)

1 Ответ

2 голосов
/ 16 июня 2020

Python 2 против Python 3? В случае, если вы используете разные интерпретаторы, возможно, вы просто отсекли часть числа с плавающей запятой с помощью деления. Перепишите каждый делитель в делении на float.

И поскольку я не вижу никаких l oop, кроме суммы в формуле, я считаю, что вам нужно удалить for l oop полностью и оставьте только часть fsum(...), чтобы сумма и формула оставались неизменными:

def f(x, N):
    h = (x / float(N)) + pi / float(2 * N)
    p = (-pi / 2.0) + i * h
    y = (h / 2.0) * (df(-pi / 2.0) + df(x)) + h * fsum([df(p) for i in range(1, N)])  
    return y

Как упоминалось в комментариях @jasonharper, l oop в любом случае ничего не делает, так как вы получить только первую итерацию, как в случае моей перезаписи.

math.fsum() не делает ничего, кроме суммирования значений в стандарте IEEE-754 с плавающей запятой:

>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.9999999999999999
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0

source

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...