Доброе время суток. Прошу помочь с алгоритмом, суть в следующем: на входе имеем некоторое уравнение 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 ) большие сложности могут возникнуть с решением многочленов большой степени. но пока это не рассматривается. возможные функции ограничены +,-,*,/,^, корни. Собственно прошу, подсказать как подобное можно осуществить или подсказать куда копать, или где можно найти более подробную информацию по данному вопросу. (анализ выражений я представляю как делать, но все равно сейчас читаю книжку на эту тему). спасибо.
вообще-то тогда уж +-sqrt. А так ты что, собрался тихонько все уравнения в явном виде решить? удачи. a*b^a = c реши относительно a
Jawello Копать, на сколько я понимаю, в сторону численных методов. На самом деле не всегда у тебя получится выразить переменную в общем смысле (если знаете основы матанализа, то вспомните теорему о неявной функции). Советую посмотреть это http://win-web.ru/uchebniki/open/bahvalov_chisl_meth.html
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)) ' - означает обратную функцию. надеюсь, что мысль не совсем больная.
так просто не получится. Знаешь, сколько времени уравнения с многочленами 3-ей и 4-ой степени решали, и какую теорию для этого развили? так что, по всей видимости, можно только явно прописать типы уравнений, которые человечество умеет решать, и для каждого типа организовать свою проверку "этого ли типа моё уравнение?". и вообще, тут от очень многого всё зависит. Например, уравнение, записанное в виде (x-12345678)*(x-98765)*(x+32145)*(x^2-7463892*x+2) = 0 ты можешь решить без проблем, но если бы в нём же были раскрыты все скобки, то могло бы и не выйти.
Есть мощные программные пакеты типа Maple, для которых все эти уравнения - как раз плюнуть. Не знаю поддерживает ли Mapple COM, возможно компоненты можно было бы встроить в своё приложение. В любом случае думаю есть что-то не такое монструозное, возможно даже с открытым исходным кодом.
Есть вариант - запрячь под это дело разложение в ряды Тейлора. ТО есть, любую элементарную функцию можно разложить либо абсолютно точно, либо с приближенной точностью до некоторого члена в многочлен от степеней входящих переменных и их произведений в различных комбинациях. Соответственно сложное выражение всегда моожно формально привести к степенному многочлену. Так по крайней мере задача сведется к чисто решению только степенных многочленов. ПУсть и приближенный, но зато аналитический метод, а не численный.
спасибо всем за ответы. про разложение с помощью ряда Тейлора а знаю, но мне не решение нужно. мне нужна именно формула для задания правила. правила задаются в xml. из формулы преобразовать в xml не составит труда и хотелось бы чтобы при задании 1ой формулы, определялись формулы для всех неизвестных через другие, а потом эти формул преобразовывались в xml правило. преобразование и распознание формул я понимаю как сделать. а вот с вычислением формул для всех параметров проблема. формулы будут браться из различных предметных областей, для начала они будут браться из достаточно простых(н-р треугольник, все формулы, необходимы для вычисления всех его параметров - углы, стороны, высоты, медианы и т.д., прямоугольник, параллелепипед и другие фигуры). соответственно формулы будут достаточно простыми, и многочленов 3, 4 и т.д. степеней там пока быть не должно, а если и будут, то вводить их просто надо будет ручками. нужно поэкспериментировать, может найдется алгоритм, который хотя бы частично будет работать.