Dopo aver letto il tuo primo messaggio, ho aperto
Mathematica e ho scritto:
- Codice:
{xsol, zsol} = NDSolveValue[{x'[ϕ] == Cos[ϕ]/(2 + 80 z[ϕ] - Sin[ϕ]/x[ϕ]),
z'[ϕ] == Sin[ϕ]/(2 + 80 z[ϕ] - Sin[ϕ]/x[ϕ]),
x[0] == 10^-3, z[0] == 0}, {x, z}, {ϕ, 0, π/2}];
ParametricPlot[{xsol[ϕ], zsol[ϕ]}, {ϕ, 0, π/2}]
dove, come puoi vedere, mi è bastato copiare il tuo sistema di equazioni differenziali con l'unica accortezza di non imporre \(x(0)=0\), altrimenti è evidente che anche
Mathematica, come qualsiasi altro software, si pianti.
A quel punto, non ho fatto altro che implementare il più semplice
metodo Runge-Kutta, ossia
Eulero:
- Codice:
{Φ, n} = {1.571, 1000};
{x, z, ϕ} = Table[0, {3}, {n}];
{x[[1]], z[[1]], ϕ[[1]]} = {0.001, 0., 0.};
Do[x[[k + 1]] = x[[k]] + Φ/n Cos[ϕ[[k]]]/(2 + 80 z[[k]] - Sin[ϕ[[k]]]/x[[k]]);
z[[k + 1]] = z[[k]] + Φ/n Sin[ϕ[[k]]]/(2 + 80 z[[k]] - Sin[ϕ[[k]]]/x[[k]]);
ϕ[[k + 1]] = ϕ[[k]] + Φ/n, {k, n - 1}];
ListLinePlot[Transpose[{x, z}], AspectRatio -> Automatic,
AxesLabel -> {"x", "z"}, GridLines -> Automatic]
ma con più sudore possiamo complicarlo implementando il celeberrimo
metodo Runge-Kutta-4:
- Codice:
{Φ, n} = {1.571, 1000};
{x, z, ϕ} = Table[0, {3}, {n}];
{x[[1]], z[[1]], ϕ[[1]]} = {0.001, 0., 0.};
f[u_, v_, w_] = Cos[u]/(2 + 80 w - Sin[u]/v);
g[u_, v_, w_] = Sin[u]/(2 + 80 w - Sin[u]/v);
h = Φ/n;
Do[f1 = f[ϕ[[k]], x[[k]], z[[k]]];
g1 = g[ϕ[[k]], x[[k]], z[[k]]];
f2 = f[ϕ[[k]] + h/2, x[[k]] + f1 h/2, z[[k]] + f1 h/2];
g2 = g[ϕ[[k]] + h/2, x[[k]] + g1 h/2, z[[k]] + g1 h/2];
f3 = f[ϕ[[k]] + h/2, x[[k]] + f2 h/2, z[[k]] + f2 h/2];
g3 = g[ϕ[[k]] + h/2, x[[k]] + g2 h/2, z[[k]] + g2 h/2];
f4 = f[ϕ[[k]] + h, x[[k]] + f3 h, z[[k]] + f3 h];
g4 = g[ϕ[[k]] + h, x[[k]] + g3 h, z[[k]] + g3 h];
x[[k + 1]] = x[[k]] + (f1 + 2 f2 + 2 f3 + f4) h/6;
z[[k + 1]] = z[[k]] + (g1 + 2 g2 + 2 g3 + g4) h/6;
ϕ[[k + 1]] = ϕ[[k]] + h, {k, n - 1}];
ListLinePlot[Transpose[{x, z}], AspectRatio -> Automatic,
AxesLabel -> {"x", "z"}, GridLines -> Automatic]
dove, entrambi i codici, basandosi su compilazione tabellare, risultano facilmente implementabili in qualsiasi foglio di calcolo, anche semplicemente in
Excel, non serve nulla di più sofisticato. Chiaramente, una volta scelto l'ambiente di lavoro, come
MatLab, tocca conoscerlo molto bene, altrimenti diventa una roulette russa!
Più di così non saprei aiutarti, superato l'esame di calcolo numerico
MatLab è caduto nel dimenticatoio!