Злавіць парывы ​​функцый

У мяне ёсць функцыя, якая нешта накшталт

<Код> F (а, б, с) = АГС (соз (а + б) * CSC (а - Ь) * ложачак (ы))

Я ведаю, што гэта разрыўную ў некаторых месцах, і што гэта можна «вылечыць» парывы, зрушваючы функцыю. У гэтым выпадку я ведаю, дзе гэтыя парывы, і гэта свайго роду лёгка звяртацца з імі належным чынам. У асноўным гэта проста

s_discontinuities = [s_0, s_1, s_2]

for i in s_discontinuities:
    jump = round(f(a, b, s_discontinuities(i) + Ds) - f(a, b, s_discontinuities(i) - Ds))
    offset(i) = jump

def new_f(a, b, s):
    exit = 0
    for i in s_discontinuities:
        if s > s_discontinuities(i):
            exit += offset(i)
    return f(a, b, s) + exit

а затым тое ж самае з кодам <> а і B . Першае пытанне: ці ёсць спосаб, каб зрабіць алгарытм больш эфектыўным, і ці ёсць алгарытм там, які можа працаваць у выпадку, калі я не ведаю, дзе парывы?

UPDATE I forgot to specify that I allow for a epsilon (spacing in the y) and a delta (spacing in the x) for any given function (If f(x + delta) > f(x) + epsilon, then is discontinuous), plus the domain is finite.

3
Па-першае, чаму downvote? Тады, гэта не ўяўляецца магчымым вылічыць парывы ​​функцыі, па розных прычынах. Па-першае, вызначэнне бесперапыннасці ўключае ў сябе дэльты рэк і epsilons, якія, як малыя, як адно жаданне. Звычайныя тыпы дадзеных не дазваляюць гэта зрабіць. Тады, нават калі вы працуеце з «інтуіцыйнай рэала», можна выказаць здагадку, паслядоўна ў інтуіцыйнай логіцы, што ўсе рэчавыя функцыі бесперапынна (гэта значыць. Вы не можаце даказаць, што вы не можаце пабудаваць модуль бесперапыннасці). Гэта з'яўляецца сур'ёзнай перашкодай для выяўлення разрываў у агульным парадку.
дададзена аўтар Alexandre C., крыніца
Для намёкам майго папярэдняга заявы (якое цяпер зусім не звязана з праблемай пад рукой), см blog.sigfpe.com/2008/01/what-does-topology-have-to-do-with.h‌ TML
дададзена аўтар Alexandre C., крыніца
Я абнавіў галоўнае пытанне, каб адлюстраваць ваша назіранне. Я паняцця не маю, пра ўніз галасавання :)
дададзена аўтар gglanzani, крыніца

1 адказы

Пасля таго, як вы высветлілі, дзе парывы, вы можаце стварыць масіў cumulativeOffset [я], дзе cumulativeOffset [0] = зрушэнне [0], cumulativeOffset [1] = зрушэнне [0] + зрушэнне [1], і гэтак далей. Затым, як толькі вы даведаліся, дзе вы павінны быць у cumulativeOffset, вы проста павінны зрабіць адзін пошук і даданне. Вы можаце даведацца, дзе вы павінны быць у cumulativeOffset [] з http://en.wikipedia.org/wiki/ binary_search .

Знаходжанне парываў для агульных функцый выглядае па меншай меры, гэтак жа цяжка, як знайсці нулі агульных функцый, а нулі е (х) павярнуць уверх як парывы ​​ў 1/ф (х).

1
дададзена