2012-11-26 2 views
1

3 개의 변수와 방정식의 수를 가지는 방정식 시스템을 풀려고합니다.3 변수의 암시 적 2 차 시스템을 해결합니다.

기본적으로 시스템은 5 ~ 12 개의 방정식이 사용되며 방정식의 수와 관계없이 3 개의 변수를 풀려고합니다.

그것은 다음과 같습니다

(x-A)**2 + (y-B)**2 + (z-C)**2 = (c(t-d))**2 

나는 A, B, C, 전체 오른쪽을 알고있다. A, B, C 및 오른쪽은 길이가 n 인 모든 배열입니다. 여기서 n은 5와 12 사이에서 임의로 변합니다. 그러면 크기가 변하는 방정식 시스템이 생깁니다. 우리는 X, Y, Z는 암시 적이며, 따라서 P에서 수행 될 필요가 있음을 알고, 이것은 그러나 작동하지 않습니다

data,data1 = getData()  # I will have to do this for 2 unique systems. 
A = data[:,0] 
B = data[:,1] 
C = data[:,2] 
tid = data[:,3] 
P = (x-A)**2 + (y-B)**2 + (z-C)**2    
b = tid 
solved = lstsq(P,b) 
print solved 

: 은 내가 NumPy와의 lstsq 기능을 사용하고 같은 것을 할 필요가 생각 이 작업을 위해서는 Help!

+1

getData()는 무엇을 반환합니까? 두 배열의 튜플? 어쨌든, 당신은 x, y, z의 값을 알아 내기 위해서 (적어도 중요하지는 않습니다!) 3 개의 방정식을 가진 시스템이 필요하고, 선형 적으로 독립적이어야합니다. * lvalue *와 같이 각각의 알려지지 않은 값을 추출하고 다른 두 값에서 그것을 대체하기 때문에 두 번째에 대한 프로세스를 반복하십시오. 그래서 하나의 알려지지 않은 값을 가진 방정식을 갖게 될 것입니다. 그런 다음이를 해결하고 결과를 대체하고 다른 두 프로세스의 프로세스를 반복 할 수 있습니다. 이게 말이 돼? –

답변

1

아마도 임의의 (비선형) 방정식과 함께 작동하는 scipy.optimize.minimize()이 필요합니다. numpy.linalg.lstsq()는 선형계 방정식의 시스템만을 해결하며,이 문제는 꽤 비선형 적입니다. (방정식 시스템을 선형화하는 기술이 있지만,이 경우 원하는 것은 아닙니다.)

3 변수의> 3 방정식 시스템에는 해가 없을 가능성이 높으므로 방정식 시스템을 실제로 해결하지는 않지만 주어진 "해법"이 얼마나 좋은지 측정하는 방법을 정의해야합니다. 이것을 최소화 문제로 제기하는 방법은 실제로하려는 것을 물리적 또는 문제 영역 해석에 따라 다릅니다. 하나의 가능성 (너의 약간 재배치 버전 된) 0이되어야 모두 왼쪽 측면의 절대 값 (합을 최소화

(x-A1)**2 + (y-B1)**2 + (z-C1)**2 - T1**2 = 0 
(x-A2)**2 + (y-B2)**2 + (z-C2)**2 - T2**2 = 0 
... 

시도 방정식을 해결하는 경우 다음의 식 들면 정확하게). 즉,

sum(abs((x-A1)**2 + (y-B1)**2 + (z-C1)**2 - T1**2) + abs((x-A2)**2 + (y-B2)**2 + (z-C2)**2 - T2**2) + ...) 

코드의 예는 다음 함수의 최소 생성하는 X, Y, Z 할 : V는 X, Y, Z를 포함하는 (3)의 ndarray이다; A, B, C, tid는 (N,)의 nd 배열이며 N은 방정식의 수입니다.

def F(v, A, B, C, tid): 
    x = v[0] 
    y = v[1] 
    z = v[2] 
    return numpy.sum(numpy.abs((x-A)**2 + (y-B)**2 + (z-C)**2 - tid)) 

v_initial = numpy.array([x0, y0, z0]) # starting guesses 
result = scipy.optimize.minimize(F, v_initial, args=(A, B, C, tid)) 
v = result.x 
x, y, z = v.tolist() # the best solution found 

작업에 가까워 야하지만 테스트하지 않았습니다. 메소드(), 메소드() 등을 최소화하기 위해 몇 가지 추가 인수가 필요할 수 있습니다 ...

+0

@KevinSchaffer :이 기능이 작동하는지 살펴보고 알려주십시오. –