ENOを改良して,重み付き平均をとることで5次精度を実現したのがWENOである. 3次精度のENOでは&ref(eqa_phix-i.gif,,70%);について, &ref(eqa_weno1.gif,,70%);の6つの内,4つの値を用いて補間を行う. 3次精度のENOでは&ref(eqa_phix-i.gif,nolink,70%);について, &ref(eqa_weno1.gif,nolink,70%);の6つの内,4つの値を用いて補間を行う. そして,その組み合わせは3パターン (&ref(eqa_weno2.gif,,70%);と&ref(eqa_weno3.gif,,70%);と&ref(eqa_weno4.gif,,70%);)である. 実際に展開してみと以下となる(&ref(eqa_phix-.gif,,70%);では,k=i-1). (&ref(eqa_weno2.gif,nolink,70%);と&ref(eqa_weno3.gif,nolink,70%);と&ref(eqa_weno4.gif,nolink,70%);)である. 実際に展開してみと以下となる(&ref(eqa_phix-.gif,nolink,70%);では,k=i-1). #ref(eqa_weno5.gif,,70%) #ref(eqa_weno5.gif,nolink,70%) 1+2+4, 1+2+5, 1+3+6, 1+3+7の4パターンになるが, 以下に示すように1+2+5と1+3+6が同じなので,組み合わせは3パターンになる. それぞれさらに展開してφiの式にする. #ref(eqa_weno6.gif,,70%) #ref(eqa_weno6.gif,nolink,70%) 差分を&ref(eqa_weno7.gif,,70%);と表記すると上記3パターンは, 差分を&ref(eqa_weno7.gif,nolink,70%);と表記すると上記3パターンは, #ref(eqa_weno8.gif,,70%) #ref(eqa_weno8.gif,nolink,70%) ENO近似は結局この3つのパターンに集約される. これらの内どれかが状況に応じて用いられる. WENO(Weighted ENO)はその名の通り,これら3つの凸結合 ((凸結合とは一次結合&ref(eqa_weno9.gif,,70%);でアフィン結合(&ref(eqa_weno10.gif,,70%);),かつ,&ref(eqa_weno11.gif,,70%);)) で&ref(eqa_phix.gif,,70%);を近似する ((凸結合とは一次結合&ref(eqa_weno9.gif,nolink,70%);でアフィン結合(&ref(eqa_weno10.gif,nolink,70%);),かつ,&ref(eqa_weno11.gif,nolink,70%);)) で&ref(eqa_phix.gif,nolink,70%);を近似する ((X. D. Liu, S. Osher, and T. Chan, "Weighted essentially non-oscillatory schemes", J. Comput. Phys. 115(1), pp. 200-212, 1994.)). つまり, #ref(eqa_weno12.gif,,70%) ここで,&ref(eqa_weno13.gif,,70%);. #ref(eqa_weno12.gif,nolink,70%) ここで,&ref(eqa_weno13.gif,nolink,70%);. 問題となるのは&ref(eqa_weno14.gif,,70%);の選択である. 関数が滑らかならば,&ref(eqa_weno15.gif,,70%);で5次精度が得られる 問題となるのは&ref(eqa_weno14.gif,nolink,70%);の選択である. 関数が滑らかならば,&ref(eqa_weno15.gif,nolink,70%);で5次精度が得られる ((G. Jiang and C.-W. Shu, "Efficient implementation of weighted ENO schemes", J. Comput. Phys. 126, pp.202-228, 1996.)). ただし,矩形波のように滑らかでない関数だととたんに不安定になる. ((G. Jiang and D. Peng, "Weighted ENO Schemes for Hamilton Jacobi Equations", SIAM J. Sci. Comput. 21, pp.2126-2143, 2000.))では滑らかでない関数でも安定な重みの計算法を提案している.その方法を以下に示す. &ref(eqa_phix.gif,,70%);の滑らかさ(smoothness)を以下のように定義する. #ref(eqa_weno16.gif,,70%) 先ほどの重みの組み合わせ(&ref(eqa_weno17.gif,,70%);)をsmoothnessの2乗で割ることで重みを得る. #ref(eqa_weno18.gif,,70%) &ref(eqa_phix.gif,nolink,70%);の滑らかさ(smoothness)を以下のように定義する. #ref(eqa_weno16.gif,nolink,70%) 先ほどの重みの組み合わせ(&ref(eqa_weno17.gif,nolink,70%);)をsmoothnessの2乗で割ることで重みを得る. #ref(eqa_weno18.gif,nolink,70%) ここで, #ref(eqa_weno19.gif,,70%) &ref(eqa_weno20.gif,,70%);はゼロ割を防ぐための項である. &ref(eqa_weno21.gif,,70%);は&ref(eqa_phi.gif,,70%);が符号付距離場であることが前提で設定されている. つまり,&ref(eqa_phix.gif,,70%);がほぼ1であり,&ref(eqa_weno22.gif,,70%);の場合である. 最終的に&ref(eqa_weno23.gif,,70%);を満たすために,正規化を行う. #ref(eqa_weno24.gif,,70%) #ref(eqa_weno19.gif,nolink,70%) &ref(eqa_weno20.gif,nolink,70%);はゼロ割を防ぐための項である. &ref(eqa_weno21.gif,nolink,70%);は&ref(eqa_phi.gif,nolink,70%);が符号付距離場であることが前提で設定されている. つまり,&ref(eqa_phix.gif,nolink,70%);がほぼ1であり,&ref(eqa_weno22.gif,nolink,70%);の場合である. 最終的に&ref(eqa_weno23.gif,nolink,70%);を満たすために,正規化を行う. #ref(eqa_weno24.gif,nolink,70%) これらから, #ref(eqa_weno25.gif,,70%) により&ref(eqa_phi.gif,,70%);を更新することで5次精度の結果が得られる. #ref(eqa_weno25.gif,nolink,70%) により&ref(eqa_phi.gif,nolink,70%);を更新することで5次精度の結果が得られる.