2013-08-08 1 views
2

누구든지 파이썬 스크립트 작성에 도움이 될 수 있습니까? 문제는 다음과 같습니다.파이썬을 사용하여 동등한 제한 최소 사각형 피팅

일부 선형 방정식의 등식 제약 선형 1 차 피팅을 수행해야합니다. 특정 선형 방정식의 경우 행렬 방정식은 [Y] {nX1} = [X] {nXm} [P] _ {mX1}과 같이 표시됩니다. 여기서 Y와 P는 벡터이고 X는 행렬이며 n, m은 행렬의 차원. 또한, Sum (P (i)) = 0.0 인 P에 대한 동등 제약이 있습니다. 누구든지 그 문제를 해결하기 위해 어떻게해야합니까? 파이썬의 어떤 기능이 이것에 적합한가? scipy.optimize.fmin_slsqp() 함수에 대한 논의는 거의 없었으나이 함수의 사용은 그리 간단하지 않습니다.

그러나 numpy를 사용하면 위의 문제에 대한 제한되지 않은 최소 제곱 피팅을 쉽게 수행 할 수 있습니다. 다음은 작은 스크립트입니다. 여기

import numpy as np 
from numpy import matrix 
from numpy import arange,array,ones,linalg 
x = np.random.randn(500,3) 
A=matrix([[3.0, 4.0, -7.0],[4.0, -5.0, 1.0],[3.0, 2.0, -5.0]]) 
y=A*x.T 
w=linalg.lstsq(x,y.T)[0] 
print w.T 

I 랜덤 벡터 (X)를 생성 한 후, A와 x.T.의 행렬 곱에 의해 벡터 y를 생성 그런 다음 x와 y 벡터를 사용하여 행렬 A의 원소를 계산합니다. 위의 스크립트는 행렬 A를 완벽하게 재현합니다. 이것은 lsf가 작동한다는 확신을줍니다. 그러나, 그것은 최소한의 사각 피팅입니다. 제약 조건은 없습니다.

또 다른 문제는 제약 된 lsf 문제를 제약되지 않은 lsf 문제로 변환하는 것입니다. 그렇다면 위의 스크립트를 사용할 수 있습니다. lagrange 승수의 방법은 가능한 선택 중 하나입니다. 그러나, 나는 내 문제에 대한 승수를 평가하는 데 어려움을 겪고있다. 이는 방정식에 많은 변수가 포함되어 있기 때문입니다. 있는 경우

그런데 MATLAB에서 제약 된 lsf에 대한 유사한 기능은 lsqlin입니다.

나는 지난 주 동안 이것을 고심하고있다. 이 점에서 나를 도와주세요. 다른 제안 사항이 있으면 큰 도움이 될 것입니다.

베스트

답변

0

당신은 Golub과 밴 대출에 의해 '매트릭스 계산'에 언급 된 '무게의 방법'을 시도 할 수 있습니다, 그것은 단지 설계 행렬을 필요로 대략적인 방법으로 기원합니다.

1

문제가 너무 크지 않은 경우 동등한 선형 시스템을 해결하여 문제를 해결할 수 있습니다. 양식 유클리드 규범에

min 1/2 |Ax - b|^2 
subject to Bx = c, 

에 제약 최소 제곱 문제를 쓰기 가정 (정말 StackOverflow의이 MathJax를 지원하지 않습니다 짜증!) 요인 1/2 편의를 위해 단지가있다. 상기 문제에 대한 해결책의 X는 .T는 전치를 나타내고 I는 적절한 크기의 행렬이고, 등가 선형 시스템 제로 블록들은 적절한 크기를 가질

[ I A 0 ] [ r ] [ b ] 
[ A.T 0 B.T ] [ x ] = [ 0 ] 
[ 0 B 0 ] [ y ] [ c ] 

을 풀어서 발견 될 수있다 (존재하는 가정). 솔루션 벡터의 중간 세그먼트를 찾고 있습니다. 위의 행렬은 대칭이지만 무한하기 때문에 특별한 것이 없으면 LU 분해를 사용하여 시스템을 해결해야합니다 (문제가 없지만 작업의 약 절반을 절약 할 수 있습니다). Cholesky를 사용하십시오.

문제가 큰 경우 MINRES을 사용하여 실제로 시스템을 어셈블하거나 팩터 화하지 않고 위의 시스템을 해결할 수도 있습니다. 이 행렬로 제품을 계산하는 LinearOperator 만 제공하면됩니다.

나는 또한 발견했다 : https://gist.github.com/fabianp/915461 (그러나 시험하지 않았다).

관련 문제