Получение формул для всех переменных в уравнении

Тема в разделе "WASM.A&O", создана пользователем Jawello, 30 апр 2011.

  1. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Доброе время суток.
    Прошу помочь с алгоритмом, суть в следующем: на входе имеем некоторое уравнение f1(f5(x1),f6(x2),...)=f2(f3(x2),f4(x3),...), а на выходе имеем n уравнений в левой части которых x1 ... xn, а в правых выражения через которые их можно выразить исходя из первоначального уравнения.
    пример:
    S/С=Pi*R^2 + 5 - начальное уравнение

    S=(Pi*R^2 +5)*C

    C=S/(Pi*R^2+5)

    R=sqrt( S/(C*Pi) - 5/Pi )

    большие сложности могут возникнуть с решением многочленов большой степени. но пока это не рассматривается. возможные функции ограничены +,-,*,/,^, корни.
    Собственно прошу, подсказать как подобное можно осуществить или подсказать куда копать, или где можно найти более подробную информацию по данному вопросу.
    (анализ выражений я представляю как делать, но все равно сейчас читаю книжку на эту тему).

    спасибо.
     
  2. vptrlx

    vptrlx New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2009
    Сообщения:
    15
    вообще-то тогда уж +-sqrt.

    А так ты что, собрался тихонько все уравнения в явном виде решить? удачи.
    a*b^a = c
    реши относительно a ;)
     
  3. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Jawello
    Копать, на сколько я понимаю, в сторону численных методов. На самом деле не всегда у тебя получится выразить переменную в общем смысле (если знаете основы матанализа, то вспомните теорему о неявной функции).
    Советую посмотреть это http://win-web.ru/uchebniki/open/bahvalov_chisl_meth.html
     
  4. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    vptrlx
    согласен, про +,- забыл.
    решить не смогу) но я и не ставлю перед собой задачу решать подобные уравнение, которые нельзя выразить в данном виде(надо было более точно это описать). если условиться, что уравнение возможно решить в явном виде, то хотелось бы понять как это можно сделать программно.

    h0t
    спасибо, за информацию. некоторые неявные функции можно выразить через обычные ax^2+bx+c=y,
    x1,2=( -b+-sqrt(b^2-4a(c-y)) )/(2a), что уже можно достаточно просто задать программно. но как я уже отвечал vptrlx, такая задача не ставиться. мне желательно помочь с алгоритмом для решения уравнений, которые возможно решить в явном виде.

    пока у меня в голове есть следующая идея.
    разделить все функции на "основные" и "обратные":
    "+" - "-"
    "*" - "/"
    "^n" - "^(1/n)"

    f1(x,f3(y))=f2(z)

    y=f3'(f1'(f2(z),x))

    z=f2'(f1(x,f3(y)))

    x=f1'(f2(z),f3(y))

    ' - означает обратную функцию.

    надеюсь, что мысль не совсем больная.
     
  5. vptrlx

    vptrlx New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2009
    Сообщения:
    15
    так просто не получится. Знаешь, сколько времени уравнения с многочленами 3-ей и 4-ой степени решали, и какую теорию для этого развили?

    так что, по всей видимости, можно только явно прописать типы уравнений, которые человечество умеет решать, и для каждого типа организовать свою проверку "этого ли типа моё уравнение?".

    и вообще, тут от очень многого всё зависит. Например, уравнение, записанное в виде
    (x-12345678)*(x-98765)*(x+32145)*(x^2-7463892*x+2) = 0
    ты можешь решить без проблем, но если бы в нём же были раскрыты все скобки, то могло бы и не выйти.
     
  6. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Есть мощные программные пакеты типа Maple, для которых все эти уравнения - как раз плюнуть. Не знаю поддерживает ли Mapple COM, возможно компоненты можно было бы встроить в своё приложение.
    В любом случае думаю есть что-то не такое монструозное, возможно даже с открытым исходным кодом.
     
  7. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Есть вариант - запрячь под это дело разложение в ряды Тейлора. ТО есть, любую элементарную функцию можно разложить либо абсолютно точно, либо с приближенной точностью до некоторого члена в многочлен от степеней входящих переменных и их произведений в различных комбинациях. Соответственно сложное выражение всегда моожно формально привести к степенному многочлену.

    Так по крайней мере задача сведется к чисто решению только степенных многочленов. ПУсть и приближенный, но зато аналитический метод, а не численный.
     
  8. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    спасибо всем за ответы.
    про разложение с помощью ряда Тейлора а знаю, но мне не решение нужно. мне нужна именно формула для задания правила. правила задаются в xml. из формулы преобразовать в xml не составит труда и хотелось бы чтобы при задании 1ой формулы, определялись формулы для всех неизвестных через другие, а потом эти формул преобразовывались в xml правило. преобразование и распознание формул я понимаю как сделать. а вот с вычислением формул для всех параметров проблема. формулы будут браться из различных предметных областей, для начала они будут браться из достаточно простых(н-р треугольник, все формулы, необходимы для вычисления всех его параметров - углы, стороны, высоты, медианы и т.д., прямоугольник, параллелепипед и другие фигуры). соответственно формулы будут достаточно простыми, и многочленов 3, 4 и т.д. степеней там пока быть не должно, а если и будут, то вводить их просто надо будет ручками.

    нужно поэкспериментировать, может найдется алгоритм, который хотя бы частично будет работать.