2014-09-26 6 views
2

1. A \ b와 linsolve (A, b)의 차이점은 무엇입니까 (다른 알고리즘입니까?)?Matlab linsolve 이해하기

2. A * x = b와 A '* A * x = A'* b를 구하는 차이점은 무엇입니까?

번째 등식은 간다 Least squares approximation

단순 매트랩 테스트 코드 : I 발견

A=[1,2,3;4,5,6;7,8,9] 
b=[1;2;3] 

x1= A\b 
x1 = 

    -0.3333 
    0.6667 
     0 
x2=linsolve(A,b) 
x2 = 

    -0.3333 
    0.6667 
     0 
x3=linsolve(A'*A,A'*b) 
x3 = 

    0.2487 
    -0.4974 
    0.5820 
x4=(A'*A)\(A'*b) 
x4 = 

    -0.8182 
    1.6364 
    -0.4848 

판독 linsolve 문서 그

[X, R = linsolve (A, B)로 해결할 행렬 방정식 AX = B이고 A가 정사각 행렬 인 경우 A의 조건 수의 역수인 을 반환하고 그렇지 않으면 A 등급을 반환합니다.

그래서 R을 사용하여 정밀도 (두 번째 질문)를 테스트 할 수 있습니까?

+0

A '* A * x = A'* b는 최소 자승 근사를위한 정규 방정식입니다. 당신은 A '* A * x = A'* b로 이것을 풀어보기를 결코 원하지 않을 것입니다. x1 = A \ b를 사용하십시오. QR 요소 분해 나 SVD와 같은 멋지고 안정적인 것을 사용할 것입니다. 심하게 조건부 화 된 행렬에 대해서는 A '* A의 계산에 중요한 오류를 도입 할 수 있습니다. 따라서이 접근법을 사용하지 마십시오 – mathematician1975

+0

@ mathematician1975 A = (M, n) n << M이면 A'* AI를 사용할 때 해결할 수 있습니까? 방정식의 방정식은 (n, n) 행렬에 대해서만 더 빨라야합니까? 그리고 방정식 A * x = b와 A '* A * x = A'* b에 관한 정보 \ 증명을 찾을 수있는 곳은 같은 답을 가지고 있습니까? 또한 조건 번호/순위에 대한 내 apdate를 참조하십시오. – mrgloom

+1

A '행렬에 의해 미리 곱할 필요가 없습니다. 방정식 A '* A * x = A'* b는 최소 제곱 시스템의 해를 구하는 방정식입니다. 당신은 여기에서 사각형 시스템을 다루고 있지만 교장은 동일합니다. A '로 미리 곱할 필요가 없으며, 비효율적입니다. 그리고 최선을 다해서도 희망을 가질 수있는 것은 모든 악의적 인 행위를 악화시키지 않는 것입니다. 시스템. – mathematician1975

답변

2

첫 번째 질문에 대해서는 (x = A\B)을 linsolve 기능의 래퍼로 간주 할 수 있습니다. linsolve 함수는 사용자가 매트릭스 A에 대한 정보를 지정할 수있게하여 Matlab이 시스템을 해결하는보다 적절한 (더 빠른) 알고리즘을 선택할 수 있도록 도와줍니다. 그럼에도 불구하고 linsolve를 사용하면 쉽게 망칠 수 있습니다. matlab에의 documentation에서 인용 : A는 당신이 OPTS에서 지정하는 속성이없는 경우

, linsolve가 잘못된 결과를 반환하고 오류 메시지를 반환하지 않습니다. A가 특정 속성을 가지고 있는지 확실하지 않으면 대신 mldivide를 사용하십시오.

귀하의 알고리즘을 실행하는 동안 매트릭스 A의 유형을 100 % 확실하게 평가할 수 있다면 이동하십시오. 그렇지 않으면 mldivide을 사용하십시오.