Definitionsmenge eines Terms (ich habe den AST)



  • Hallo C++ler,

    Ich benötige eure Hilfe um die Definitionsmenge einer beliebigen Formel (ganz rational, gebrochen rational) zu programmatisch finden. Ich kann des AST aufbauen, habe aber ein Problem beim Potenzieren. Bei der Wurzel muss einfach der Radikand kleiner Null sein, der Logarithmus von Zahlen kleiner Null ist nicht definiert und beim Dividieren darf der Divisor nicht Null sein. Nur beim Potenzieren von negativen Zahlen (und möglicher Weise auch von x) mit einem Bruch (der möglicherweise auch ein x enthält -> f(x) = (x+1)^(2/x) ) komme ich in Schwierigkeiten. Ich hoffe ihr kennt möglichst allgemeine Regeln, wann das Potenzieren definiert ist...

    Danke im Voraus



  • Ich würde sagen, wenn a^b ist definiert, wenn entweder
    - a>0
    - a=0, b!=0
    - a<0, b ganzzahlig



  • f(x) = (x+1)^(2/x)

    - a>0

    -> nicht definiert für (x < -1)

    - a=0, b!=0

    -> nicht definiert für x = 0

    - a<0, b ganzzahlig

    -> Hier kommt das Problem... wie kann ich anhand eines ASTs rausfinden ob es ((x + 1) < 0) für (2 / x) nicht ganzahlige Werte gibt?



  • -Infected- schrieb:

    f(x) = (x+1)^(2/x)

    - a>0 <=> x > -1
    - a=0,b!=0 <=> x = -1
    - a<0,b ganzzahlig <=> x=-2
    Also D={-2} ∪ [-1,∞)

    -Infected- schrieb:

    -> Hier kommt das Problem... wie kann ich anhand eines ASTs rausfinden ob es ((x + 1) < 0) für (2 / x) nicht ganzahlige Werte gibt?

    Die meisten Programme, die ich gesehen habe, nehmen den pragmatischen Ansatz: a<0 ist verboten. Im Allgemeinen ist die Entscheidung sehr schwer.

    Du könntest als Spezialfall untersuchen, ob der Exponent ein Bruch ist. n/m ist genau dann in Z, wenn m|n. Dann weisst du aber immer noch nicht, wann x(1x) definiert ist. Im Endeffekt läuft das darauf hinaus, dein eigenes CAS zu entwickeln.



  • Ich würde grundsätzlich schon gerne ein CAS entwicklen, nur leider ist das wahrscheinlich viel zu kompliziert und große Hilfe im Internet (z.B.: ein Tutorial, das die Grundsätze erklärt) werde ich wohl nicht finden... Falls jemand Links dazu hat...

    Danke im Voraus



  • -Infected- schrieb:

    Ich würde grundsätzlich schon gerne ein CAS entwicklen, nur leider ist das wahrscheinlich viel zu kompliziert und große Hilfe im Internet (z.B.: ein Tutorial, das die Grundsätze erklärt) werde ich wohl nicht finden... Falls jemand Links dazu hat...

    Danke im Voraus

    LISP
    In jener Gemeinde gibt es genug mathematische Ausdrucksvereinfacher.


Log in to reply