CV8 - Metoda střelby - okrajové úlohy

Program Strelba1 pro výpočet řešení diferenciální rovnice y''=f(x,y,y') na intervalu ⟨(Subscript[x, 0]), (Subscript[x, 1])⟩ s okrajovou podmínkou y((Subscript[x, 0]))=(Subscript[y, 0])  a y((Subscript[x, 1]))=(Subscript[y, 1]) (diferenčně počítaná derivace ).

\(Strelba1[f_, a_, b_, ya_, yb_, Eps_, h_, Strel_] := 
	
      Module[{}, 
		z = Strel; 
		s = 99999999999; 
		i = 
          0; 
		While[
          s > Eps\  && \ i < 10, 
		\ \ res1 = 
            NDSolve[{\(y1'\)[x] == y2[x], \(y2'\)[x] == f[x, y1[x], y2[x]], 
                y1[a] == ya, y2[a] == z}, {y1, y2}, {x, a, 
                b}]; 
		\ \ res2 = 
            NDSolve[{\(y1'\)[x] == y2[x], \(y2'\)[x] == f[x, y1[x], y2[x]], 
                y1[a] == ya, y2[a] == z + h}, {y1, y2}, {x, a, 
                b}]; 
		zn = 
            z - \((\((y1[b] /. res1)\)[\([1]\)] - 
                    yb)\)/\((\((\((y1[b] /. res2)\)[\([1]\)] - \((y1[b] /. 
                              res1)\)[\([1]\)])\)/h)\); 
			s = 
            Abs[zn - z]; 
	\ \ 	z = zn; 
		\ \ \(i++\); 
			Print[
            i, "  ", z, "  ", s];]; 
		res = 
          NDSolve[{\(y1'\)[x] == y2[x], \(y2'\)[x] == f[x, y1[x], y2[x]], 
              y1[a] == ya, y2[a] == z}, {y1, y2}, {x, a, b}]; 
		Plot[
          Evaluate[y1[x] /. res], {x, a, b}]; N[zn, 10]]\)
\(			\)

Použítí programu Strelba1 pro výpočet řešení diferenciální rovnice y''=(y^2) s okrajovou podmínkou y(0)=1 a y(1)=1

f[x_, y1_, y2_] = y1*y1;

Strelba1[f, 0, 1, 1, 1, 0.000001, 0.001, 0.0]

Program Strelba2 pro výpočet řešení diferenciální rovnice y''=f(x,y,y') na intervalu ⟨(Subscript[x, 0]), (Subscript[x, 1])⟩ s okrajovou podmínkou y((Subscript[x, 0]))=(Subscript[y, 0])  a y((Subscript[x, 1]))=(Subscript[y, 1]) (pomocí variačních rovnic).

Derivace pomocí variačních rovnic

\(Strelba2[f_, a_, b_, ya_, yb_, Eps_, Strel_] := 
	
      Module[{}, 
		z = Strel; 
		s = 99999999999; 
		h = 
          0.00001; 
		i = 0; 
		While[
          s > Eps\  && \ i < 10, 
		\ \ res1 = 
            NDSolve[{\(y1'\)[x] == y2[x], \(y2'\)[x] == 
                  f[x, y1[x], y2[x]], \(p1'\)[x] == p2[x], \(p2'\)[x] == 
                  D[f[x, y1[x], y2[x]], y1[x]]*p1[x] + 
                    D[f[x, y1[x], y2[x]], y2[x]]*p2[x], y1[a] == ya, 
                y2[a] == z, p1[a] == 0, p2[a] == 1}, {y1, y2, p1, p2}, {x, a, 
                b}]; 
		zn = 
            z - \((\((y1[b] /. res1)\)[\([1]\)] - 
                    yb)\)/\((p1[b] /. res1)\)[\([1]\)]; 
			s = 
            Abs[zn - z]; 
	\ \ 	z = zn; 
		\ \ \(i++\); 
			Print[
            i, "  ", z, "  ", s];]; 
		res = 
          NDSolve[{\(y1'\)[x] == y2[x], \(y2'\)[x] == f[x, y1[x], y2[x]], 
              y1[a] == ya, y2[a] == z}, {y1, y2}, {x, a, b}]; 
		Plot[
          Evaluate[y1[x] /. res], {x, a, b}]; N[zn, 10]]\)
\(			\)

Použítí programu Strelba2 pro výpočet řešení diferenciální rovnice y''=(y^2) s okrajovou podmínkou y(0)=1 a y(1)=1

f[x_, y1_, y2_] = y1*y1;

z2 = Strelba2[f, 0, 1, 1, 1, 0.000001, 0.0]

Použítí programu Strelba2 pro výpočet řešení diferenciální rovnice y''=(x^2) (e^y) s okrajovou podmínkou y(0)=1 a y(1)=1

f[x_, y1_, y2_] = x^2 Exp[y1];

z2a = Strelba2[f, 0, 1, 1, 1, 0.000001, 1.0]

Použítí programu Strelba2 a Strelba1 pro výpočet řešení diferenciální rovnice y''=3  y s okrajovou podmínkou y(0)=1 a y(1)=1 (porovnání výsledků se skutečným řešením)

f[x_, y1_, y2_] = 3*y1;

z2 = Strelba2[f, 0, 1, 1, 1, 0.000001, 0.0]

z1 = Strelba1[f, 0, 1, 1, 1, 0.000001, 0.001, 0.0]

\(\(\(res = 
      DSolve[{\(\(y'\)'\)[x] == f[x, y[x], \(y'\)[x]], y[0] == 1, y[1] == 1}, 
        y[x], x]\)\(
\)
    \)\)

z = N[D[(y[x] /. res)[[1]], x] /. x -> 0, 10]

z - z2

z - z1

Plot[y[x] /. res, {x, 0, 1}]