Задача с решением уравнения логическим путем - PullRequest
0 голосов
/ 13 мая 2011

Я думал о способе решения простых уравнений с простой ориентацией объекта.Я нашел метод, который работает во всех случаях, когда переменная одна.См .:

Например, это уравнение: (4 / x + 3) / 2 = 2 Сначала я преобразовываю равенство в операторе минус ((4 / x + 3) / 2 - 2 = 0), чтобы все равнялось нулю.Затем я применяю все операции в обычном порядке приоритета, точно так же, как если бы x стало числом.Первый - 4 / x, я кладу в стек операцию: 4/ и возвращаю x.Следующим является x + 3 (помните, что 4 / x привело к x).Операция переходит в стек (теперь 4/ +3) и возвращает x.Повторяя это, финальный стек будет 4/ +3 /2 -2.Затем я возвращаю все операции в следующем порядке:

+n   -->  -n
-n   -->  +n
*n   -->  /n
/n   -->  *n
n/   -->  n/
**n  -->  **(1/n)
     (where the missing value of these binary operations is the variable)

Теперь стек равен 4/ -3 *2 +2.Теперь я изменяю порядок и применяю все операции к нулю:

Стек: +2 *2 -3 4/ Операция: 4 / ((0 + 2) * 2 - 3)

Результат равен четырем, значение x.

Это очень запутанно и сложно, но логично и легко сделать код в ruby, который выполняет это в любом уравнении:

class Variable
  # define all numeric operators to use the stack and return self
end
def solve
  x = Variable.new
  yield(x)
  return x.value
end

x = solve do |x|
  (4 / x + 3) / 2 == 2
end

Окончательный интерфейс этого очень крутой.

Но моя проблема в том, как: x + x == 4 решить таким образом?Другими словами, как добавить два переменных стека?

1 Ответ

0 голосов
/ 14 мая 2011

По запросу я делаю свой предыдущий комментарий ответом:

Вам не нужны два переменных стека для этого.Вам нужен этап упрощения, который меняет это на 2x = 4, а затем решает для x.

Чтобы расширить это, был бы сделан первый шаг, который выполняет некоторые символические вычисления, такие как переписывание и упрощение терминов.Как только вы это сделаете, используйте ваш текущий решатель (имейте в виду, что Луис сказал в своих комментариях, хотя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...