3種類の初歩的な簡単な方法は数値問題of C++を解く

9722 ワード


1.「二分法解方程式」
二分法では,区間[a,b]から関数値f(a)とf(b)で反対の符号を持つ.fがこの区間で連続している場合、fの画像は少なくともx=a、x=bの間でx軸を1回通過するので、方程式f(x)=0は[a,b]の間に少なくとも1つの解があり、[a,b]の区間を逐次二分処理することによって、その部分で符号を変更し、逐次方程解を縮小するより小さな領域を選択する.
 1 /************************************************************************/

 2 /*                                                                 */

 3 /************************************************************************/

 4 double fun001(double x);

 5 int main() 

 6 {

 7     double acurace;

 8     cout << "     :eg(0.00001)";

 9     cin >> acurace;

10     double left, right;

11     do  

12     {

13         cout << "";

14         cin >> left >> right;

15     } while (fun001(left) * fun001(right) >= 0.0);

16     double width = right - left,

17         midPt,funMidVal;

18 

19 

20     //  

21     while (width/2 > acurace)

22     {

23         midPt = (left + right) / 2.0;

24         funMidVal = fun001(midPt);

25         if (fun001(left) * funMidVal < 0.0)

26         {

27             right = midPt;

28         } 

29         else

30         {

31             left = midPt;

32         }

33         width /= 2.0;

34     }

35 

36     cout << "" << midPt << endl;

37 

38 }

Newton‐Raphson法を用いて方程式問題を解くこともできる.
2.「近接領域の面積」数値積分問題を求める
1つの一般的な方法は、n−1等距離の点x 1、x 2・・xn−1を用いて区間[a,b]をn個等間隔のサブ領域に分割し、各サブ領域の匡杜dealtaX=(b−a)/nとする.曲線上の対応する点については、隣接する点ストロークn個の台形をセグメントでリンクします.
これらの台形の面積の和は、区間[a,b]における曲線f(x)の積分に規定され、台形面積式を用いてi番目の台形の面積を計算することができる:((f(xi-1)+f(xi)*dealtaX)/2;
これらの値を加算して整理した:dealtaX*((y 0+yn)/2+y 1+y 2+y 3...+yn-1);
 1 /************************************************************************/

 2 /*                                                         */

 3 /************************************************************************/

 4 

 5 double funJiFen(double x);

 6 int main() 

 7 {

 8     int n;

 9     cout << "enter                 (n)";

10     cin >> n;

11     double a,b,deltaX, x,y,sum;

12     cout << "          :(a)(b)";

13     cin >> a >> b;

14     deltaX = (b - a)/n;

15     sum = 0;

16     x = a;

17     for (int i = 1; i <= n - 1; i++)

18     {

19         x += deltaX;

20         y = funJiFen(x);

21         sum += y;

22     }

23     sum = deltaX * ((funJiFen(a) + funJiFen(b))/2 + sum);

24     cout << "   " << n << "       "<< sum << endl;

25 

26 }

「台形の代わりに放物線を使う」ことで面積を求めるSimpson法も使用できる.
3.微分方程式を解く問題
微分方程式の定義:導数または微分を含む方程式を微分方程式と呼ぶ.
Euler(Euler)法を用いて微分方程式を解く
1次微分方程式を与える:y′=f(x,y);
初期条件:y(x 0)=y;
ある区間[a,b]でa=x 0である.(1)xの増分dealtaXを選択し,(2)n=0,1,2,3...次の手順に従います.
(i)xn+1=xn+dealtaXとする.
(ii)点Pn(xn,yn)により、傾きf(xn,yn)の直線上に点P(xn+1,yn+1)が見つかり、すなわち次の点の横座標yn+1が求められ、点xn+1の元の関数の近似値とすることができる.
(iii)以上の操作を繰り返し、特定の点で微分方程式の問題を得ることができることを知っている.
 
さらに,微分方程式問題をより正確な方法で解くこともでき,ここでは最も簡単な解の構想を提供するだけである.