Java / Groovy библиотека, чтобы решить для переменной алгебраически - PullRequest
1 голос
/ 02 февраля 2012

Если у меня есть уравнение y = 3x, я могу использовать «алгебру», чтобы составить уравнение x = y / 3.Есть ли что-то, что я могу дать, например:

def y = {x-> x*3}
def x = ThisWouldBeNice.solveForMe(y, 'x')  //does the same as: def x = {y-> y/3}

Я думал, что JScience может сделать это, но я не могу понять, если это там.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Некоторое время назад я сделал нечто подобное (на самом деле быстрый и грязный тест) с Wolfram Alpha API, как предлагает denis.solonenko.Чтобы добиться этого, используйте «f = 3 * x», так как ответ API немного отличается и включает решение для переменной x.

Этот код - включает в себя копию ответа - (используйте правильныйИдентификатор API, чтобы получить его напрямую) решает его.

import java.net.URLEncoder

def stringEquation = "f = 3 * x"
def equation = { x -> 3*x }

//def response = "http://api.wolframalpha.com/v2/query?appid=xxx&input=" + URLEncoder.encode(stringEquation) + "&format=plaintext".toURL().text

def response= """<?xml version='1.0' encoding='UTF-8'?>
<queryresult success='true'
    error='false'
    numpods='6'
    datatypes='Geometry'
    timedout=''
    timing='0.766'
    parsetiming='0.181'
    parsetimedout='false'
    recalculate=''
    id='MSP6141a0482cfc786eibg000036bb0i3bhf6d6aih&amp;s=50'
    related='http://www4a.wolframalpha.com/api/v2/relatedQueries.jsp?id=MSP6151a0482cfc786eibg00005a4g16ee5ei232bf&amp;s=50'
    version='2.1'>
 <pod title='Input'
     scanner='Identity'
     id='Input'
     position='100'
     error='false'
     numsubpods='1'>
  <subpod title=''>
   <plaintext>f = 3 x</plaintext>
  </subpod>
 </pod>
 <pod title='Geometric figure'
     scanner='Geometry'
     id='GeometricFigure (ofBoundary)'
     position='200'
     error='false'
     numsubpods='1'>
  <subpod title=''>
   <plaintext>line</plaintext>
  </subpod>
  <states count='1'>
   <state name='Properties'
       input='GeometricFigure (ofBoundary)__Properties' />
  </states>
 </pod>
 <pod title='Plot'
     scanner='Plotter'
     id='Plot'
     position='300'
     error='false'
     numsubpods='1'>
  <subpod title=''>
   <plaintext></plaintext>
  </subpod>
 </pod>
 <pod title='Alternate form'
     scanner='Simplification'
     id='AlternateForm'
     position='400'
     error='false'
     numsubpods='1'>
  <subpod title=''>
   <plaintext>f-3 x = 0</plaintext>
  </subpod>
 </pod>
 <pod title='Solution for the variable x'
     scanner='Reduce'
     id='SolutionForTheVariableV'
     position='500'
     error='false'
     numsubpods='1'
     primary='true'>
  <subpod title=''
      primary='true'>
   <plaintext>x = f/3</plaintext>
  </subpod>
 </pod>
 <pod title='Implicit derivatives'
     scanner='ImplicitDifferentiation'
     id='ImplicitDerivatives'
     position='600'
     error='false'
     numsubpods='2'>
  <subpod title=''>
   <plaintext>(dx(f))/(df) = 1/3</plaintext>
  </subpod>
  <subpod title=''>
   <plaintext>(df(x))/(dx) = 3</plaintext>
  </subpod>
  <states count='1'>
   <state name='More'
       input='ImplicitDerivatives__More' />
  </states>
 </pod>
</queryresult>"""

def queryresult = new XmlSlurper().parseText(response)
def solution = queryresult.pod.findAll { it.@title.text() == "Solution for the variable x" }.toString()

Возвращает: x = f/3

ПРИМЕЧАНИЕ: установите флажок напечатать определение / источник закрытия в Groovy , еслинужно иметь дело с фактическим кодом закрытия.

0 голосов
/ 02 февраля 2012

Я думаю, что WolframAlpha API может сделать это, попробуйте что-то подобное в проводнике http://products.wolframalpha.com/api/explorer.html

y = 3x; y=6; x?
...