2011-01-02 3 views
5

간단한 기호 대수 표현식을 다시 정렬하는 간단한 알고리즘이 있는지 알고 싶습니다. 이상적으로는 왼쪽에 하나의 변수만으로 그러한 표현식을 다시 작성할 수 있기를 바랍니다.간단한 기호 대수 표현식을 재정렬하기위한 알고리즘

:

m = (x + y)/2 

... 나는 xm의 측면에서 my, 또는 y의 측면에서 약 x를 요청하고,이를 얻을 수 있도록하고 싶습니다 예를 들어, 입력을 제공

x = 2*m - y 
y = 2*m - x 

당연히 우리는이 알고리즘을 수년간 종이로 작성했습니다. 하지만 그 이름이 있는지 궁금 해서요. 그것은 충분히 단순 해 보이지만 만약 누군가가 이미 여러 가지 "잡았다"를 목록 화했다면 그것은 삶을 더 쉽게 만들 것입니다.

제 목적으로는 이차원을 처리 할 필요가 없습니다.

(예, CAS 시스템에서이 작업을 수행하고 있습니다. 예, 라이브러리로 사용할 수 있음을 알고 있습니다. 응용 프로그램에서 이러한 종속성을 피하고 싶습니다. 이름이 지정된 알고리즘이 있는지 정말 알고 싶습니다. 이 문제에 접근하기 위해)

+0

'명명 된 알고리즘'은 CAS에 구현 된 알고리즘입니다. 이것이 NIH의 사례입니까? (발명품이 아님) –

답변

2

원하는 것은 방정식 해결 알고리즘입니다. 그러나 나는 이것이 거대한 주제라고 확신한다. 일반적인 경우가있을 수있다 : 방정식

  • 시스템
  • 방정식은 방정식 인수로서, 따라서 추가적인 알고리즘이 필요한 비 - 선형 일 수있다.
  • 지식을 역전시키는 방법에 대한 지식이 필요합니다. 예를 들어, => sin(x) + 10 = z, x를 해결하기 위해 arcsin() 인 sin()을 반대로합니다. (모든 함수가 뒤집을 수있는 것은 아닙니다!)
  • 마지막으로 방정식 중 일부는 CAS의 경우에도 sin(x)+x=y과 같이 해결할 수 있습니다.

어려운 답변 - 일부 CAS의 소스 코드를 가져 오는 것이 가장 좋습니다. 예를 들어 LISP로 작성된 MAXIMA CAS 소스 코드를 살펴볼 수 있습니다. 그리고 방정식 풀이를 담당하는 코드를 찾으십시오.

쉬운 대답 - 필요한 모든 것이 선형이며 기본 연산자 + - * /로만 구성되는 방정식을 풀면됩니다. 그럼 당신은 이미 알고있는 오래된 좋은 종이 방법을 사용합니다. - 우리가 종이에 어떤 규칙을 사용했는지 생각해보고 방정식 문자열을 조작하는 기호 알고리즘으로이 규칙을 다시 작성하십시오.

행운을 빈다!

+0

좀 더 연구를 해본 결과 구속 조건 해결사가 모두 이런 종류의 문제를 처리한다는 것을 발견했습니다. 어쨌든 내 응용 프로그램이 제약 조건에 크게 의존 할 것이므로 Choco 나 JaCoP와 같은 것을 사용할 수 있습니다. 당신은 그것이 거대한 주제라는 것에 대해 옳았습니다. 그리고 당신의 직관력 (그리고 아래의 다른 대답)이 방정식의 체계가 어디에 있는지를 확실히 확신합니다. –

2

선형 방정식의 시스템을 유지하고 언제든지 다른 모든 변수에 대해 하나의 변수를 풀 수있는 것처럼 보입니다. 관계를 행렬로 인코딩하면 행렬을 일부 멋진 형식 (예 : 줄 감싸기 형식 줄이기)으로 줄여서 변수 중 "가장 간단한"종속성을 얻을 수있는 것처럼 보입니다 (간단한 정의에 대한 좋은 정의가 있음). ") 이와 같은 데이터를 얻었 으면 문제의 변수에 대해 0이 아닌 항목이있는 행을보고 변수를 계수 1로 정규화하여 모든 종속성을 읽을 수 있어야합니다.

메모 - 일반적으로 각 변수에 대해 고유 한 솔루션을 제공하지는 않습니다. 예를 들어, 단순 방정식

x = y 
x = z 

주어진 다음에 z를 해결하기 위해 원하는 정도에 따라 단순화 ", Z = Y"하나 "Z = X"또는 수득 할 수있다. 또는 대안 적으로,

x = 2y + 3w 
x = 9z 

같은 설정에서 표현식 또는 두 가지 이상 그 합, 또는 모든 기술적 사실이지만 반드시 유용하지 않은 다른 것들의 전체 무리 중 하나를 다시 손을 수 x의 값을 반환. 어떻게 처리해야할지 모르겠지만 방정식의 형식에 따라 처리 방법을 찾을 수 있습니다.

0

초기 방정식을 수정할 수있는 여러 가지 간단한 방법이 있습니다. 올바른 순서로 올바른 수정을 수행하면 올바른 해결책이 생깁니다. 그렇다면 이것을 검색이나 길 찾기 문제로 보는 것은 어떻습니까?