Я ищу общий способ python для управления текстом в разрешимые уравнения.Переупорядочить уравнения для решателя
Например:
могут быть некоторые константы для инициализации
e1,e2=0.58,0.62
ma1,ma2=0.85,1.15
mw=0.8
Cpa,Cpw=1.023,4.193
dba,dbr=0.0,25.0
и набор уравнений (здесь написано для удобства чтения, а не решателя)
Q=e1*ma1*Cpa*(tw1-dba)
Q=ma1*Cpa*(dbs-dba)
Q=mw*Cpw*(tw1-tw2)
Q=e2*ma2*Cpa*(dbr-tw2)
Q=ma2*Cpa*(dbr-dbo)
Это оставляет 5 неизвестных, поэтому, по-видимому, система может быть решена.
Q, dbo, dbr, tw1, tw2
Фактические системы являются нелинейными и сложнее.
Я уже решил этот простой пример с помощью Scipy, Delphi, Sage ... поэтому я не ищу решающую часть.
Уравнения напечатаны непосредственно в текстовом редакторе, и я хочу, чтобы программа Python давала мне массив неизвестных и массив функций ошибок.
y = mysolver.fsolve(f, x)
Таким образом, для приведенного выше примера
x=[Q,dbo,dbr,tw1,tw2]
f=[Q-e1*ma1*Cpa*(tw1-dba), Q-ma1*Cpa*(dbs-dba), Q-mw*Cpw*(tw1-tw2),
Q-e2*ma2*Cpa*(dbr-tw2), Q-ma2*Cpa*(dbr-dbo)]
Я просто не знаю, как извлечь неизвестные и создать функции ошибок.
Я пробовал функцию compile.parse() и, похоже, давал структурированную разбивку.
Может кто-нибудь дать некоторые идеи по наилучшему подходу.
Вам нужно разрешить синтаксис «списка»? (a, b = 1,2) Возможно, вам будет легче подойти, если вы не ... – Stobor
Нет, я просто сделал это, чтобы сделать постоянное назначение более компактным. Как это может помочь присвоить значения индивидуально? – 2009-07-23 14:38:23
Долгое время назад была программа Borland под названием Eureka, которая решает эту проблему. Тот же код был выпущен позднее автором как Меркурий. Спустя много лет вышла Windows-программа под названием EES (Engineering Equation Solver), но решатель никогда не был так хорош, как Eureka. В последнее время я нашел код в сети Clifford Wolf http://svn.clifford.at/tools/trunk/electrotools/eqsolver.html , но он есть в JavaScript и, честно говоря, я не следую его логике. Это в значительной степени то, что я хочу, но в Python. – 2009-07-24 02:34:52