2009-09-01
org.kosen.entty.User@e03a683
백현(darmi)
- 1
선형 연립 방정식 Ax=B를 풀고 있습니다.
목적은 함수 커브피팅을 하기 위해서 작업하고 있는데..
Ax=B를 푸는데 이게 문제는..차수가 낮으면..(즉 행렬의 크기가 작으면)
무리없이 문제가 풀리는데
행렬이 좀 커지면 답이 없네요..
현재 행렬이 대략 30x30 정도가 되면 별 무리없이 계산이 되는데
40x40이 되면 계산이 거의 안됩니다.
행렬의 singularity가 무지 작아지면서.. 1e-300이하가 되는 순간 매트랩은 계산을 포기하는데 1e-300이하를 매트랩은 0으로 인식하더군요
커브피팅 방법이 현재 나온 방법이
vector fitting이란 방법도 있는데 거기선
120x120까지도 계산을 하는데
흠 단순한 매트랩에서의 inv(A)*B 이 방법말고 ..
다르게 코딩을 해서라도 큰 크기의 역행렬을 계산하는 방법을 알고 싶습니다....
- 매트랩
- 행렬
- 커브 피팅
지식의 출발은 질문, 모든 지식의 완성은 답변!
각 분야 한인연구자와 현업 전문가분들의 답변을 기다립니다.
각 분야 한인연구자와 현업 전문가분들의 답변을 기다립니다.
답변 1
-
답변
이응신님의 답변
2009-09-01- 0
매트랩은 행렬을 계산하기 위하여 고안된 프로그램입니다. EISPACK과 같은 벡터컴퓨팅을 할 때 사용하던 패키지를 PC용으로 바꾼 프로그램인데... 역행렬 계산을 잘 못한다면 아마 행렬 자체가 조건이 좋지 않은 Ill-condition인 경우입니다. 지금 제가 PC로 해보니까... (1000 X 1000) 행렬도 1초 정도만에 역행렬을 구해줍니다. (10000 X 10000)은 메모리 부족이라고 해서 계산을 멈추는데, 아마 메모리가 2 GB라서 그런 모양입니다. 메모리만 충분하다면 무리없이 역행렬을 계산한다고 봐야 합니다. 행렬을 잘 조사해 보십시오. 역행렬을 구할 때 수치가 불안정하면 매트랩에서 epsilon으로 가정하는데 오차한계는 10^(-16)으로 이 값 이하로 가면 0으로 취급합니다. 그렇지만 실제로 돌려보면 Mathematica 처럼 chopping을 해서 일정한 값 이하는 버려야 합니다. 매트랩 메뉴얼을 잘 살펴보면 chopping 기능이 있을 수 있습니다. (사용하지 않아 잘 모릅니다^^) 피팅을 하려면 변수와 방정식의 갯수가 일치하지 않으므로 펜로즈-무어 방식으로 역행렬을 구해 최적화할 수 있습니다.(Penrose-Moore's methode) 선형대수학이나 FEM을 어렵게 설명한 책에 나옵니다. 또 피팅을 하려면 수치해석학에 보면 Vandermonde 행렬을 이용하는 방법도 나오니까 참고하십시오. >선형 연립 방정식 Ax=B를 풀고 있습니다. > >목적은 함수 커브피팅을 하기 위해서 작업하고 있는데.. > >Ax=B를 푸는데 이게 문제는..차수가 낮으면..(즉 행렬의 크기가 작으면) > >무리없이 문제가 풀리는데 > >행렬이 좀 커지면 답이 없네요.. > >현재 행렬이 대략 30x30 정도가 되면 별 무리없이 계산이 되는데 > >40x40이 되면 계산이 거의 안됩니다. > >행렬의 singularity가 무지 작아지면서.. 1e-300이하가 되는 순간 매트랩은 계산을 포기하는데 1e-300이하를 매트랩은 0으로 인식하더군요 > >커브피팅 방법이 현재 나온 방법이 > >vector fitting이란 방법도 있는데 거기선 > >120x120까지도 계산을 하는데 > >흠 단순한 매트랩에서의 inv(A)*B 이 방법말고 .. > >다르게 코딩을 해서라도 큰 크기의 역행렬을 계산하는 방법을 알고 싶습니다....