linsolve
선형 연립방정식 풀기
설명
예제
선형 시스템 풀기
mldivide
와 linsolve
를 둘 다 사용하여 선형 시스템을 풀고 성능을 비교합니다.
mldivide
는 MATLAB®에서 대부분의 선형 연립방정식을 풀 때 권장되는 방식입니다. 그러나 이 함수는 입력 행렬에 특별한 속성이 있는지 확인하기 위해 여러 검사를 수행합니다. 사전에 계수 행렬의 속성을 알고 있는 경우 linsolve
를 사용하여 큰 행렬에 대해 시간이 오래 걸리는 검사를 방지할 수 있습니다.
10000×10000 마방진 행렬을 만들고 하부 삼각 부분을 추출합니다. opts
구조체의 LT
를 true
로 설정하여 A
가 하부 삼각 행렬임을 나타냅니다.
A = tril(magic(1e4)); opts.LT = true;
선형 방정식 의 우변에 해당하는 1로 구성된 벡터를 만듭니다. A
와 b
의 행 개수는 같아야 합니다.
b = ones(size(A,2),1);
mldivide
를 사용하여 선형 시스템 를 풀고 계산에 걸린 시간을 측정합니다.
tic x1 = A\b; t1 = toc
t1 = 0.0845
이번에는 linsolve
를 사용하여 시스템을 다시 풉니다. linsolve
가 하부 삼각 행렬에 대한 적절한 솔버를 선택할 수 있도록 options 구조체를 지정합니다.
tic x2 = linsolve(A,b,opts); t2 = toc
t2 = 0.0199
실행 시간을 비교하여 linsolve
가 얼마나 더 빠른지 확인합니다. 여타 시간 비교와 마찬가지로, 결과는 컴퓨터와 MATLAB 릴리스에 따라 달라질 수 있습니다.
speedup = t1/t2
speedup = 4.2473
행렬 조건 경고 표시하지 않기
행렬 조건 경고를 표시하지 않도록 두 개의 출력값을 갖는 linsolve
를 사용하여 선형 시스템을 풉니다.
20×20 힐베르트 테스트 행렬을 만듭니다. 이 행렬은 가장 큰 특이값이 가장 작은 특이값보다 약 2e18
만큼 큰 유사 특이 행렬입니다.
A = hilb(20);
linsolve
를 사용하여 A
와 관련한 선형 시스템을 풉니다. A
는 유사 특이 행렬이므로 linsolve
는 경고를 반환합니다.
b = ones(20,1); x = linsolve(A,b);
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 5.628781e-20.
이번에는 linsolve
에 두 개의 출력값을 지정하여 동일한 선형 시스템을 풉니다. MATLAB®은 경고를 표시하지 않고, 두 번째 출력값 r
은 A
의 조건수의 역수를 포함합니다. 이 구문을 사용해, 코드가 경고를 반환하지 않도록 하면서 특별한 경우에 해당하는 조건 나쁜 행렬을 코드에서 처리할 수 있습니다.
[x,r] = linsolve(A,b)
x = 20×1
109 ×
-0.0000
0.0000
-0.0004
0.0071
-0.0592
0.2819
-0.7821
1.1830
-0.7030
-0.1061
⋮
r = 5.6288e-20
입력 인수
A
— 계수 행렬
행렬
계수 행렬입니다. A
는 선형 연립방정식 AX = B의 좌변에 나타납니다. A
의 행 개수는 B
의 행 개수와 같아야 합니다.
A
는 희소 행렬일 수 없습니다. 희소 행렬을 포함하는 선형 시스템을 풀려면 mldivide
또는 decomposition
을 대신 사용하십시오.
데이터형: single
| double
복소수 지원 여부: 예
B
— 입력 배열
벡터 | 행렬
입력 배열로, 벡터나 행렬로 지정됩니다. B
는 선형 연립방정식 AX = B의 우변에 나타납니다. B
가 행렬이면 이 행렬의 각 열은 우변의 서로 다른 벡터를 나타냅니다.
A
의 행 개수는 B
의 행 개수와 같아야 합니다.
데이터형: single
| double
복소수 지원 여부: 예
opts
— 계수 행렬 속성
구조체
계수 행렬 속성으로, 구조체로 지정됩니다. 이 구조체를 사용하여 linsolve
가 선형 시스템에 대한 적절한 솔버를 선택하기 위해 사용하는 A
의 속성을 지정합니다. 구조체의 필드는 A
가 각 속성을 갖는지 여부를 나타내는 true
/false
값을 포함합니다. 기본적으로, 구조체의 모든 필드는 false
인 것으로 간주됩니다. 다음 표에는 opts
의 가능한 필드와 그에 대응하는 행렬 속성이 나열되어 있습니다.
필드 | 행렬 속성 |
---|---|
| 하부 삼각(0이 아닌 값이 주대각선 또는 그 아래에만 나타남) |
| 상부 삼각(0이 아닌 값이 주대각선 또는 그 위에만 나타남) |
| 상부 헤센베르크(첫 번째 하부대각선 밑의 값이 모두 0) |
| 실수 대칭 또는 복소수 에르미트(자신의 전치와 동일한 행렬) |
| 양의 정부호(모두 양의 고유값) |
| 직사각 행렬(행 개수와 열 개수가 다름) |
| 켤레 전치 — 함수가 |
예: opts.UT = true
는 A
가 상부 삼각 행렬임을 지정합니다.
예: opts.SYM = true, opts.POSDEF = true
는 두 필드를 설정하여 A
가 양의 정부호 대칭 행렬임을 지정합니다.
유효한 조합
다음 표의 행에는 linsolve
에 유효한, opts
의 필드 값의 모든 조합이 나열되어 있습니다. 빈 셀은 디폴트 값이 false
이고, true
/false
항목은 linsolve
가 두 값을 모두 받음을 나타냅니다.
|
|
|
|
|
|
| |
---|---|---|---|---|---|---|---|
|
|
|
| ||||
|
|
|
| ||||
|
|
| |||||
|
|
|
| ||||
|
|
|
사용법에 대한 참고 사항
A
에opts
의 속성이 있는 경우linsolve
의 처리 속도는mldivide
보다 더 빠릅니다. 그 이유는linsolve
가A
에 지정된 속성이 있는지 여부를 확인하는 테스트를 수행하지 않고 즉시 적절한 솔버를 호출하기 때문입니다.opts
에 지정한 속성이A
에 없는 경우linsolve
는 잘못된 결과를 반환하지만 항상 오류 메시지를 반환하지는 않습니다. 따라서A
에 지정된 속성이 있는지 확실하지 않을 경우에는mldivide
또는decomposition
을 대신 사용하십시오.
데이터형: struct
출력 인수
X
— 선형 시스템 해
벡터 | 행렬
선형 시스템 해로, AX = B를 충족하는(또는 opts.TRANSA = true
인 경우 ATX = B를 충족하는) 벡터 또는 행렬로 반환됩니다. X
의 크기는 opts.TRANSA = true
인지 여부에 따라 달라집니다.
A
가m
×n
이고B
가m
×k
이면X
는n
×k
이고 AX = B에 대한 해가 됩니다.opts.TRANSA = true
이면A
는m
×n
이고B
는n
×k
입니다. 이 경우X
는m
×k
이고 ATX = B에 대한 해가 됩니다.
r
— 조건수의 역수 또는 랭크
스칼라
조건수의 역수 또는 랭크로, 스칼라로 반환됩니다.
A
가 정사각 행렬이면r
은A
의 조건수의 역수입니다.A
가 직사각 행렬이면r
은A
의 랭크입니다.opts
가 지정된 경우r
은A
의 조건수의 역수입니다. 단,RECT
가true
이고LT
와UT
가 모두false
인 경우r
은A
의 랭크입니다.
팁
linsolve
의 속도상 이점은 행렬 구조와 기본 알고리즘의 상대적 최적화에 따라 달라질 수 있습니다. 경우에 따라서는(예: 작은 행렬을 사용할 경우)mldivide
에 비해 속도 향상 효과가 없을 수도 있습니다.linsolve
를 사용함으로써 얻는 속도상의 이점은 큰 행렬의 속성에 대해 값비싼 검사를 수행하지 않거나mldivide
에서 선택되는 알고리즘보다 입력값에 더 적합한 알고리즘을 선택하는 데에서 비롯합니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
opts
구조체는 상수 스칼라여야 합니다. 코드 생성 시 options 구조체로 구성된 배열은 지원되지 않습니다.코드 생성 시 다음의 경우에만 최적화됩니다.
UT
LT
UHESS
=true
(TRANSA
는true
또는false
일 수 있음)SYM
=true
그리고POSDEF
=true
다른 옵션들은
mldivide
를 사용할 때와 동일합니다.코드 생성 시 이 함수에 대해 희소 행렬 입력값은 지원되지 않습니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
opts
구조체는 상수 스칼라여야 합니다. 코드 생성 시 options 구조체로 구성된 배열은 지원되지 않습니다.코드 생성 시 다음의 경우에만 최적화됩니다.
UT
LT
UHESS
=true
(TRANSA
는true
또는false
일 수 있음)SYM
=true
그리고POSDEF
=true
다른 옵션들은
mldivide
를 사용할 때와 동일합니다.코드 생성 시 이 함수에 대해 희소 행렬 입력값은 지원되지 않습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
출력값을 2개 갖는 구문
[x,r] = linsolve(___)
는 지원되지 않습니다.MATLAB®
linsolve
함수는A
가 준특이 행렬, 유사 특이 행렬 또는 랭크 부족 행렬이면 경고를 출력합니다.gpuArray
에 대해서는linsolve
가 이 조건을 확인할 수 없습니다. 따라서 이 조건을 피하기 위한 조치를 수행해야 합니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
이 함수는 분산 배열을 완전히 지원합니다. 자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)