일반적인 ODE 문제 해결하기
이 항목에서는 솔버 함수(ode45
, ode15s
등)를 사용하여 ODE를 풀 때 흔히 발생할 수 있는 문제를 설명합니다.
허용오차
질문이나 문제 | 대답 |
---|---|
오차 임계값 | 상대 정확도 허용오차인
간단히 말해, 이는 임계값 |
컴퓨터의 정밀도에 맞는 답을 구하고 싶습니다. | 기계 정밀도에 가까운 답을 구할 수는 있지만, 그렇다고 일치할 정도로 가깝게는 안 됩니다. 솔버는 연속 함수의 근삿값을 구하려고 하기 때문에 |
특정 해 성분 하나에 대한 정확한 답을 구하는 것을 원치 않는다는 점을 솔버에 어떻게 알릴 수 있습니까? | 이 해 성분에 대한 절대 허용오차 |
문제 스케일
질문이나 문제 | 대답 |
---|---|
ODE 함수군으로 얼마나 큰 문제를 풀 수 있습니까? | 기본 제약 조건은 메모리와 시간입니다. 각 시간 스텝에서 비경직성(Nonstiff) 문제에 대한 솔버는 길이가 문제가 비경직성 문제이거나 |
매우 큰 시스템을 푸는 중이지만, | 예. |
적분을 시작하는 데 드는 비용은 얼마나 되고 이를 어떻게 하면 줄일 수 있습니까? | 솔버가 문제의 스케일에 적합한 스텝 크기를 찾으려고 할 때 가장 큰 시작 비용이 발생합니다. 적합한 스텝 크기를 안다면 |
적분기가 사용하는 첫 번째 스텝 크기가 너무 커서 중요한 동작을 놓칩니다. |
|
해 성분
질문이나 문제 | 대답 |
---|---|
해가 예상한 것과 다르게 나타납니다. | 예상한 값이 올바른 경우, 허용오차를 디폴트 값보다 낮추십시오. '긴' 구간을 적분하는 문제와 적당히 불안정한 문제에 대한 정확한 해를 구하려면 더 작은 상대 허용오차가 필요합니다. 특정 시간 동안 절대 허용오차보다 작게 유지되는 해 성분이 있는지 여부를 확인하십시오. 그러한 성분에서는 정확한 자릿수가 필요하지 않습니다. 참고로, 이런 계산이 그러한 성분에 대해서는 허용될 수 있지만 해 성분을 정확히 계산할 수 없으면 이에 종속되는 다른 성분의 정확도가 떨어질 수 있습니다. |
플롯이 충분히 매끄럽지 않습니다. |
|
계산된 해를 플로팅하니 괜찮게 표시되기는 하는데, 코드가 특정 지점에서 중지됩니다. | 먼저, 코드가 중지되는 지점 근처에서 ODE 함수가 매끄러운지 확인합니다. 매끄럽지 않은 경우, 이를 처리하기 위해 솔버는 작은 스텝을 취해야 합니다. 적분 구간을 ODE 함수가 매끄러운 구간으로 분할하면 도움이 될 수 있습니다. 함수가 매끄럽고 코드가 매우 작은 스텝을 취하고 있다면, 사용자가 경직성(Stiff) 문제용으로 개발되지 않은 솔버를 사용하여 경직성 문제를 풀려고 시도하는 것일 수 있습니다. 경직성 솔버 |
최종 값은 갖고 있지만 초기값은 갖고 있지 않을 경우 어떻게 해야 합니까? | ODE 함수군의 모든 솔버는 시간의 순방향이나 역방향으로 해를 구할 수 있습니다. 솔버 구문은 |
적분이 너무 많은 시간 스텝을 사용하여 매우 느리게 진행됩니다. | 먼저, ODE 함수가 마지막으로, ODE 함수가 효율적인 방식으로 작성되었는지 확인하십시오. 솔버는 ODE 함수에서 도함수를 여러 번 계산합니다. 수치 적분 비용은 ODE 함수를 계산하는 비용에 따라 상당히 달라집니다. 각 계산에서 복잡한 상수 파라미터를 다시 계산하는 대신, 전역 변수에 저장하거나 한 번만 계산하고 이를 중첩 함수로 전달하십시오. |
해가 | 시간 미분 방정식에 주기적인 계수 또는 해가 있는 경우 최대 스텝 크기를 주기의 길이로 제한하여 솔버가 주기를 스텝 오버하지 않도록 하십시오. |
문제 유형
선 풀이 방법으로 이산화된 편미분 방정식(PDE)을 솔버가 처리할 수 있습니까? | 예, 그 이유는 이산화는 연립 ODE을 생성하기 때문입니다. 이산화에 따라서는 질량 행렬을 포함하는 형식을 얻을 수 있는데, 그럴 경우 ODE 솔버가 이를 지원합니다. 주로, 이러한 시스템은 경직성(Stiff)을 가집니다. PDE가 포물선 방정식인 경우와 유체 흐름의 화학 반응과 같은 매우 다른 시간 스케일에서 발생하는 현상이 있는 경우 그렇습니다. 이 경우, 경직성 솔버 방정식이 많이 있는 경우 시스템이 경직성을 가지지 않거나 매우 심한 경직성을 가지지 않는 경우, 경직성 솔버 1차원의 포물형 타원 편미분 방정식의 경우 MATLAB® PDE 솔버 |
샘플링된 데이터 세트를 적분할 수 있습니까? | 직접적으로는 할 수 없습니다. 대신, 보간이나 기타 데이터 피팅 방식을 사용하여 이러한 데이터를 함수로 나타내야 합니다. 이 함수를 매끄럽게 나타내는 것이 중요합니다. 스플라인과 같은 조각별 다항식 피팅은 눈으로 보기에는 매끄럽지만, 솔버에게는 거칠게 보입니다. 솔버는 피팅의 도함수가 비약(Jump)하는 부분에서 작은 스텝을 취합니다. 매끄러운 함수를 사용하여 데이터를 나타내거나 매끄러움에 덜 민감한, 차수가 더 낮은 솔버( |
참고 항목
odeset
| odeget
| deval
| odextend