상태종속성이강한질량행렬에대한ode풀기
이예제에서는이동메시기법[1]을사용하여버거스방정식을푸는방법을보여줍니다。문제에질량행렬이포함되고,질량행렬의강한상태종속성과희소성을고려하도록옵션이지정되어풀이과정이더효율적입니다。
문제 설정
버거스방정식은pde로지정되는대류-확산방정식입니다。
좌` ` `변환([1]의방정식18)` `을적용하면다음과같이좌변에항이추가됩니다。
이예제에서는이동메시기법[1]을사용하여버거스방정식을푸는방법을보여줍니다。문제에질량행렬이포함되고,질량행렬의강한상태종속성과희소성을고려하도록옵션이지정되어풀이과정이더효율적입니다。
버거스방정식은pde로지정되는대류-확산방정식입니다。
좌` ` `변환([1]의방정식18)` `을적용하면다음과같이좌변에항이추가됩니다。
에대한편도함수를근사하기위해유한차분을사용하여PDE를일변수颂歌로변환할수있습니다。유한차분이 로작성되었다면pde는 에대한도함수만포함하는ode로다시작성할수있습니다。
이형식에서ode솔버(예:ode15s
)를사용하여시간경과에따른
와
의해를구할수있습니다。
이예에서문제는 개의점으로구성된이동하는메시상에서정식화되며[1]에설명된이동메시기법은각시간스텝에서메시점이변경영역에집중되도록배치합니다。경계조건과초기조건은다음과같습니다。
주어진 개점으로구성된초기메시의경우,풀어야할 개의방정식이있습니다。버거스방정식에해당하는 개방정식과각메시점의움직임을결정하는 개방정식입니다。따라서최종연립방정식은다음과같습니다。
이동메시에대한항은[1]의mmpde6에해당합니다。파라미터 는메시가등분포가되게강제하는시간스케일을나타냅니다。 항은[1]의방정식21으로주어진모니터함수입니다。[1]에있는21:
이동하는메시점을사용하여버거스방정식을풀기위해이예제에서사용된접근방식은몇가지기법을보여줍니다。
연립방정식은질량행렬정식화
를사용하여@ @현됩니다。질량행렬은ode15s
솔버에함수로제공됩니다。
도함수는버거스방정식에대한수식뿐만아니라이동하는메시의선택을제어하는일련의수식도포함합니다。
야코비행렬 의희소성패턴과벡터 를곱한질량행렬의도함수는솔버에함수로제공됩니다。이러한희소성패턴을제공하면솔버가보다효율적으로연산할수있습니다。
유한 차분은여러편도함수를근사하는데사용됩니다。
Matlab®에서이방정식을풀려면도함수,질량행렬함수,야코비행렬 의희소성패턴함수및 의희소성패턴함수를작성하십시오。필요한함수를이예제와같이파일끝에로컬함수로포함시킬수도있고,MATLAB경로에있는디렉터리에이름이지정된별도의파일로저장할수도있습니다。
연립방정식의좌변은1계도함수의일차결합을포함하므로모든항을표현하려면질량행렬이필요합니다。연립방정식의좌변을 과같도록설정하여질량행렬의형식을추출합니다。질량행렬은4개의블록으로구성되며각각은차수가 정사각행렬입니다。
이정식화는 및 가버거스방정식의좌변(연립방정식의첫번째 개방정식)을구성하고 및 는메시방정식의좌변(연립방정식의마지막 개방정식)을구성하는것을보여줍니다。블록행렬은다음과같습니다。
은 단위행렬입니다。 의편도함수는유한차분을사용하여계산되고 의편도함수는라플라시행렬을사용합니다。메시움직임에대한방정식은 의향을받지않기때문에 은0만포함한다는점을주목하십시오。
이제질량행렬을계산하는함수를작성할수있습니다。함수는시간 및 해 벡터 에대한두개의입력을받아야합니다。해 벡터 는 절반의 구성소와절반의 구성소를포함하고있기때문에함수는이값들을먼저추출합니다。그런다음함수는문제의경계값을고려하여모든블록행렬을생성하고4개의블록을사용하여질량행렬을조합합니다。
函数M =质量(t,y)提取解u的y分量,并对x进行网格划分N =长度(y)/2;u = y(1:N);x = y(N+1:结束);%解u与网格x的边界值U0 = 0;uNP1 = 0;X0 = 0;xNP1 = 1;% M1和M2是Burgers方程的质量矩阵的部分。du/dx的导数近似于有限差分,使用%单面差异的边缘和中心之间的差异。M1 = speye(N);M2 =稀疏(N,N);M2(1,1) = - (u(2) - u0)/(x(2) - x0);为我= 2:n - 1平方米(我)= - (u (i + 1) - u(张))/ (x (i + 1) - x(张));结束M2(N,N) = - (uNP1 - u(N-1))/(xNP1 - x(N-1));% M3和M4定义了网格点演化方程,对应于% MMPDE6在参考论文。由于网格函数只涉及d/dt(dx/dt),质量矩阵的M3部分全为零。M4的二阶导数是%近似使用有限差分拉普拉斯矩阵。M3 =稀疏(N,N);e = ones(N,1);M4 = spdigs ([e -2*e],-1:1,N,N);组装质量矩阵M = [m1 m2 m3 m4];结束
참고:모든함수는예제끝에로컬함수로포함되어있습니다。
이문제의도함수는
개의소를가진벡터를반환합니다。첫 번째
개소는버거스방정식에해당하고마지막
개소는이동메시방정식에대한것입니다。함수movingMeshODE
는다음단계를거쳐연립방정식에서모든방정식의우변을계산합니다。
유한차분을사용하여버거스방정식을계산합니다(첫번째 개소)。
모니터함수를계산합니다(마지막 개소)。
모니터함수에공간평활화를적용하고이동메시방정식을계산합니다。
도함수의첫번째 개방정식은버거스방정식의우변을코딩합니다。버거스방정식은다음형식의공간도함수를포함하는미분연산자로간주될수있습니다。
.
참고문헌[1]에서는다음의중심유한차분을사용하여미분연산자 를근사하는과정을설명합니다。
대신메시의모서리( 및 )에서는단방향차분만사용됩니다。이예제에서는 를사용합니다。
메시를제어하는방정식(도함수의마지막 개방정식을구성하는)은다음과같습니다。
버거스방정식과마찬가지로유한차분을사용하여모니터함수 를근사할수있습니다。
모니터함수가계산되면공간평활화가적용됩니다([1]의방정식14및15)。이예제에서는공간평활화파라미터에 및 를사용합니다。
연립방정식을코딩하는함수는다음과같습니다。
函数g = movingMeshODE(t,y)提取解u的y分量,并对x进行网格划分N =长度(y)/2;u = y(1:N);x = y(N+1:结束);%解u与网格x的边界值U0 = 0;uNP1 = 0;X0 = 0;xNP1 = 1;预分配g矢量的导数值。g = 0 (2*N,1);用中心有限差分近似Burgers的RHS%方程(边有单面差异)。第一个Ng中的%元素对应于Burgers方程。为i = 2:N-1 delx = x(i+1) - x(i-1);G (i) = 1e-4*((u(i+1) - u(i))/(x(i+1) - x(i)) -...(u(i) - u(i-1))/(x(i) - x(i-1)) /(0.5*delx)...- 0.5*(u(i+1)²- u(i-1)²)/delx;结束Delx = x(2) - x0;g(1) = 1的军医* ((u (2) - u (1)) / (x (2) - (1) - (u(1) -情况)/ (x (1) - x0)) / (0.5 * delx)...- 0.5*(u(2)²- u0²)/delx;delx = xNP1 - x(N-1);g(N) = 1e-4*((uNP1 - u(N))/(xNP1 - x(N)) -...(u(N) - u(N-1))/(x(N) - x(N-1)) /delx -...0.5*(uNP1²- u(N-1)²)/delx;计算监测函数值(参考文献中公式21),用于网格方程的% RHS。内部采用中心有限差分%点,边沿使用单面差异。M = 0 (N,1);为我= 2:n - 1 M (i) =√6 (1 + ((u (i + 1) - u(张))/ (x (i + 1) - x(张)))^ 2);结束M0 =√(1 + (u(1) - u0)/(x(1) - x0) ^2);M(1) =√(1 + ((u(2) - u0)/(x(2) - x0) ^2);M (N =√(1 + (uNP1 - u (N - 1) / (xNP1 - x (N - 1))) ^ 2);MNP1 =√(1 + ((uNP1 - u(N))/(xNP1 - x(N)))^2);应用空间平滑(公式14和15),gamma = 2, p = 2。SM = 0 (N,1);为我= 3:n - SM (i) =√(4 * M(我2)^ 2 + 6 * M(张)^ 2 + 9 * M (i) ^ 2 +...6*M(i+1)²+ 4*M(i+2)²)/29;结束SM0 =√(9*M0^2 + 6*M(1)^2 + 4*M(2)^2)/19);SM(1) =√(M0 ^ 2 + 6 * 9 * M (1) ^ 2 + 6 * M (2) ^ 2 + 4 * M (3) ^ 2) / 25);SM(2) =√(4 * M0 ^ 2 + 6 * M (1) ^ 2 + 9 * M (2) ^ 2 + 6 * M (3) ^ 2 + 4 * M (4) ^ 2) / 29);SM (N - 1) =√(4 * M (N) ^ 2 + 6 * M (N - 2) ^ 2 + 9 * M (N - 1) ^ 2 + 6 * M (N) ^ 2 + 4 * MNP1 ^ 2) / 29);SM (N =√(4 * M (N - 2) ^ 2 + 6 * M (N - 1) ^ 2 + 9 * M (N) ^ 2 + 6 * MNP1 ^ 2) / 25);SMNP1 =√(4 * M (N - 1) ^ 2 + 6 * M (N) ^ 2 + 9 * MNP1 ^ 2) / 19);为我= 2:N - 1 g (i + N) = (SM (i + 1) + SM(我))* (x (i + 1) - x(我))-...(SM(i) + SM(i-1))*(x(i) - x(i-1));结束g (1 + N) = (SM (2) + SM (1)) * (x (2) - (1) - (SM (1) + SM0) * (x (1) - x0);g (N + N) = (SMNP1 + SM (N)) * (xNP1 - x (N)) - (SM (N) + SM (N - 1)) * (x (N) - x (N - 1));形成参考论文中方程12的最终离散近似,即控制方程%网格点。Tau = 1e-3;g(1+N:end) = - g(1+N:end)/(2*tau);结束
도함수에대한야코비행렬
는 도함수movingMeshODE
의모든편도함수가포함된
행렬입니다。ode15s
는选项구조체에행렬이제공되지않는경우유한차분을사용하여야코비행렬을추정합니다。야코비행렬의희소성패턴을제공하여ode15s
가좀더빨리계산하게할수있습니다。
야코비행렬의희소성패턴에대한함수는다음과같습니다。
函数out = JPat(N) S1 = spdigs (ones(N,3),-1:1,N,N);S2 = spdigs (ones(N,9),-4:4,N,N);out = [S1 S1 S2 S2];结束
间谍
를사용하여
에 대한
의희소성패턴을플로팅합니다。
间谍(JPat (80))
좀더효율적으로계산하기위한또다른방법은 의희소성패턴을제공하는것입니다。 및 중어떤항이질량행렬함수에서계산된유한차분에있는지검토하여이희소성패턴을찾을수있습니다。
의희소성패턴에대한함수는다음과같습니다。
函数S = MvPat(N) S =稀疏(2*N,2*N);S(1,2) = 1;S(1,2+ n) = 1;为S(i,i-1) = 1;S(i,i+1) = 1;S(i,i-1+N) = 1;S(i,i+1+N) = 1;结束S(n, n -1) = 1;S(n, n -1+ n) = 1;结束
间谍
를사용하여
에 대한
의희소성패턴을플로팅합니다。
间谍(MvPat (80))
값을가진연립방정식을풉니다。초기조건의경우균일그리드를사용하여 를초기화하고그리드에서 을계산합니다。
N = 80;h = 1/(N+1);xinit = h*(1:N);Uinit = sin(2*pi*xinit) + 0.5*sin(pi*xinit);Y0 = [uinit xinit];
odeset
을사용하여다음여러값을설정하는选项구조체를만듭니다。
질량행렬에대한함수핸들
질량행렬의상태종속성。질량행렬은
및
모두의함수이므로이문제의경우이값은“强”
입니다。
야코비행렬의희소성패턴을계산하는함수핸들
벡터를곱한질량행렬의도함수의희소성패턴을계산하는함수핸들
절대허용오차및상대허용오차
Opts = odeset(“质量”@mass,“MStateDependence”,“强”,“JPattern”JPat (N),...“MvPattern”MvPat (N),“RelTol”1 e-5“AbsTol”1的军医);
마지막으로,ode15s
를호출하여movingMeshODE
도함수,시간길이,초기조건및选项구조체를사용하여구간
에서연립방정식을풉니다。
Tspan = [0 1];sol = ode15s(@movingMeshODE,tspan,y0,opts);
적분의결과는시간스텝
,메시점
,해
를포함하는구조체索尔
입니다。구조체에서이값들을추출합니다。
T = sol.x;x = sol.y(N+1:end,:);u = sol.y(1:N,:);
시간경과에따른메시점의움직임을플로팅합니다。플롯을보면(모니터함수로인해)시간경과에따라메시점이꽤일정한간격을유지하지만해가이동함에따라해의불연속부분근처에군집화할수있음을확인할수있습니다。
情节(x, t)包含(“t”) ylabel (“x (t)”)标题(汉堡方程:网格点轨迹)
이제 일부
값에서
를샘플링하고시간경과에따른해의변화를플로팅합니다。구간의끝에서메시점이고정되므로X (0) = 0
이고x(N+1) = 1
입니다。경계값은U (t,0) = 0
과U (t,1) = 0
이며图에대해계산된알려진값에이경계값을추가해야합니다。
色调= 0:0.2:1;Yint = deval(sol,色调);图标签= {};为J = 1:长度(着色)解= [0;yint (1: N, j);0);位置= [0;yint (N + 1:结束,j);1);标签{j} = ['t = 'num2str(色(j)));情节(位置、解决方案“o”)举行在结束包含(“x”) ylabel (“解决方案u (x, t)”{:})传说(标签,“位置”,“西南”)标题(“运动网格上的Burgers方程”)举行从
플롯을보면 은 쪽으로이동하는동안시간경과에따라급격한기울기가발생하는매끄러운파동임을알수있습니다。메시점은추가계산점이각시간스텝에서적절한위치에있도록불연속부분의움직임을추적합니다。
[1]黄伟章等“基于动网格偏微分方程的动网格方法”。计算物理杂志,第113卷,no。2, 1994年8月,第279-90页。https://doi.org/10.1006/jcph.1994.1135.
여기나열된함수는솔버ode15s
가해를계산하기위해호출하는로컬헬퍼함수입니다。또는이러한함수를MATLAB경로에있는디렉터리에고유의파일로저장할수도있습니다。
函数g = movingMeshODE(t,y)提取解u的y分量,并对x进行网格划分N =长度(y)/2;u = y(1:N);x = y(N+1:结束);%解u与网格x的边界值U0 = 0;uNP1 = 0;X0 = 0;xNP1 = 1;预分配g矢量的导数值。g = 0 (2*N,1);用中心有限差分近似Burgers的RHS%方程(边有单面差异)。第一个Ng中的%元素对应于Burgers方程。为i = 2:N-1 delx = x(i+1) - x(i-1);G (i) = 1e-4*((u(i+1) - u(i))/(x(i+1) - x(i)) -...(u(i) - u(i-1))/(x(i) - x(i-1)) /(0.5*delx)...- 0.5*(u(i+1)²- u(i-1)²)/delx;结束Delx = x(2) - x0;g(1) = 1的军医* ((u (2) - u (1)) / (x (2) - (1) - (u(1) -情况)/ (x (1) - x0)) / (0.5 * delx)...- 0.5*(u(2)²- u0²)/delx;delx = xNP1 - x(N-1);g(N) = 1e-4*((uNP1 - u(N))/(xNP1 - x(N)) -...(u(N) - u(N-1))/(x(N) - x(N-1)) /delx -...0.5*(uNP1²- u(N-1)²)/delx;计算监测函数值(参考文献中公式21),用于网格方程的% RHS。内部采用中心有限差分%点,边沿使用单面差异。M = 0 (N,1);为我= 2:n - 1 M (i) =√6 (1 + ((u (i + 1) - u(张))/ (x (i + 1) - x(张)))^ 2);结束M0 =√(1 + (u(1) - u0)/(x(1) - x0) ^2);M(1) =√(1 + ((u(2) - u0)/(x(2) - x0) ^2);M (N =√(1 + (uNP1 - u (N - 1) / (xNP1 - x (N - 1))) ^ 2);MNP1 =√(1 + ((uNP1 - u(N))/(xNP1 - x(N)))^2);应用空间平滑(公式14和15),gamma = 2, p = 2。SM = 0 (N,1);为我= 3:n - SM (i) =√(4 * M(我2)^ 2 + 6 * M(张)^ 2 + 9 * M (i) ^ 2 +...6*M(i+1)²+ 4*M(i+2)²)/29;结束SM0 =√(9*M0^2 + 6*M(1)^2 + 4*M(2)^2)/19);SM(1) =√(M0 ^ 2 + 6 * 9 * M (1) ^ 2 + 6 * M (2) ^ 2 + 4 * M (3) ^ 2) / 25);SM(2) =√(4 * M0 ^ 2 + 6 * M (1) ^ 2 + 9 * M (2) ^ 2 + 6 * M (3) ^ 2 + 4 * M (4) ^ 2) / 29);SM (N - 1) =√(4 * M (N) ^ 2 + 6 * M (N - 2) ^ 2 + 9 * M (N - 1) ^ 2 + 6 * M (N) ^ 2 + 4 * MNP1 ^ 2) / 29);SM (N =√(4 * M (N - 2) ^ 2 + 6 * M (N - 1) ^ 2 + 9 * M (N) ^ 2 + 6 * MNP1 ^ 2) / 25);SMNP1 =√(4 * M (N - 1) ^ 2 + 6 * M (N) ^ 2 + 9 * MNP1 ^ 2) / 19);为我= 2:N - 1 g (i + N) = (SM (i + 1) + SM(我))* (x (i + 1) - x(我))-...(SM(i) + SM(i-1))*(x(i) - x(i-1));结束g (1 + N) = (SM (2) + SM (1)) * (x (2) - (1) - (SM (1) + SM0) * (x (1) - x0);g (N + N) = (SMNP1 + SM (N)) * (xNP1 - x (N)) - (SM (N) + SM (N - 1)) * (x (N) - x (N - 1));形成参考论文中方程12的最终离散近似,即控制方程%网格点。Tau = 1e-3;g(1+N:end) = - g(1+N:end)/(2*tau);结束% -----------------------------------------------------------------------函数M =质量(t,y)提取解u的y分量,并对x进行网格划分N =长度(y)/2;u = y(1:N);x = y(N+1:结束);%解u与网格x的边界值U0 = 0;uNP1 = 0;X0 = 0;xNP1 = 1;% M1和M2是Burgers方程的质量矩阵的部分。du/dx的导数近似于有限差分,使用%单面差异的边缘和中心之间的差异。M1 = speye(N);M2 =稀疏(N,N);M2(1,1) = - (u(2) - u0)/(x(2) - x0);为我= 2:n - 1平方米(我)= - (u (i + 1) - u(张))/ (x (i + 1) - x(张));结束M2(N,N) = - (uNP1 - u(N-1))/(xNP1 - x(N-1));% M3和M4定义了网格点演化方程,对应于% MMPDE6在参考论文。由于网格函数只涉及d/dt(dx/dt),质量矩阵的M3部分全为零。M4的二阶导数是%近似使用有限差分拉普拉斯矩阵。M3 =稀疏(N,N);e = ones(N,1);M4 = spdigs ([e -2*e],-1:1,N,N);组装质量矩阵M = [m1 m2 m3 m4];结束% -------------------------------------------------------------------------函数out = JPat(N)%雅可比稀疏图S1 = spdigs (ones(N,3),-1:1,N,N);S2 = spdigs (ones(N,9),-4:4,N,N);out = [S1 S1 S2 S2];结束% -------------------------------------------------------------------------函数S = MvPat(N)质量矩阵乘以矢量的导数的%稀疏模式S =稀疏(2*N,2*N);S(1,2) = 1;S(1,2+ n) = 1;为S(i,i-1) = 1;S(i,i+1) = 1;S(i,i-1+N) = 1;S(i,i+1+N) = 1;结束S(n, n -1) = 1;S(n, n -1+ n) = 1;结束% -------------------------------------------------------------------------