Paquete tzplot: problemas con el cálculo del área

Paquete tzplot: problemas con el cálculo del área

Empecé a usar tzplotpaquete en lugar de tikzpaquete. Hay muchos atajos útiles. Pero ahora tengo un problema (quizás sea mi error). De este código:

\documentclass[12pt,a4paper]{article}
\usepackage{tzplot}
\def \N {50} % <-- change to higher/lower number if You want a more/less accurate shading
\begin{document}
    \begin{tikzpicture}[font=\scriptsize,scale=1.5]
        % axex, grid and ticklabels
        \tzhelplines[thick](-2,-4)(2,2)
        \tzshoworigin
        \tzaxes(-2,-4)(2,2)
        \tzticks{-2,-1,,1,2} % x-ticks
        {-4,-3,-2,-1,1,2} % y-ticks
        % plotting
        \clip (-2,-4) rectangle (2,2);
        \def\Fx{.3*(\x)^3-2} % <-- def cubic (F)
        \tzfn\Fx[-2:2]       % <-- naming the path F
        \def\Gx{-2*(\x)^2+2} % <-- def parabola (G)
        \tzfn\Gx[-2:2]       % <-- naming the path G
        \tzXpoint*{Fx}{Gx}(P){$A$}[0]{2pt}
        \tzdot(P-2){$B$}[0]{2pt}  
        \tzgetxyval(P){\Px}{\Py}% <-- coordinate of first point of intersection between F and G
        \tzgetxyval(P-2){\Qx}{\Qy}% <-- coordinate of second point of intersection between F and G
        \pgfmathsetmacro{\dx}{(\Qx-\Px)/\N};
        \def \t {0}; % <-- initial Riemann area
        \foreach \n in {0,1,...,\N}{% <-- loop for shading area
            \pgfmathsetmacro{\x}{\Px+\n*\dx};
            \tzvXpointat{Fx}{\x}(R)%{$R_\n$}[b]
            \tzgetxyval(R){\Rx}{\Ry} % <-- IT SEEMS DONT WORK IN THIS CASE
            \tzvXpointat{Gx}{\x}(S)%{$S_\n$}[t]
            \tzgetxyval(S){\Sx}{\Sy} % <-- IT SEEMS DONT WORK IN THIS CASE
            \pgfmathsetmacro{\t}{\t+(\Sy-\Ry)*\dx} %<-- temporary Riemann area
            \draw[blue!50,opacity=.3] (R)--(S);
        }
        \tzfn[very thick,magenta]\Fx[-2:2]
        \tzfn[very thick,cyan]\Gx[-2:2]
        \draw (0,-3.5) node[fill=yellow,font=\ttfamily] {Area|,=\;\t}; % <-- final Riemann area
    \end{tikzpicture}
\end{document}

Tengo esta salida:

ingrese la descripción de la imagen aquí

Con el código que quiero:...

  1. trazar las dos funciones;
  2. sombrea el área entre las dos funciones (puedo configurar el parámetro \N para esto)
  3. Calcule un valor aproximado (método de Riemann) del área sombreada.

Para los dos primeros puntos no hay problema. Para el tercer punto el resultado siempre es cero (ver en la imagen la zona amarilla). Si en la misma zona intento imprimir no el valor del área sino cualquiera de ,,, \Rxcalculado previamente \Ry, tengo errores. Entonces creo que los problemas surgen del cálculo de estas variables. ¿Cualquier sugerencia? (Lo siento por mi ingles)\Sx\Sy

Nota: en el caso de la figura el valor del área sombreada debe ser igual a 7,68 unidades de área.

Nota 1: ¡Quizás no se pueda usar una variable interna del bucle fuera del bucle! Pero no puedo encontrar una solución...

Respuesta1

Creo que tu cálculo está totalmente bien, pero te encuentras con problemas de alcance, ya que todo lo que está dentro del \foreachbucle tiene un alcance. Por lo tanto, debe empujar el valor calculado fuera del ciclo usando \global\letalgo similar:

\documentclass[12pt,a4paper]{article}
\usepackage{tzplot}
\def\N{50} % <-- change to higher/lower number if You want a more/less accurate shading
\begin{document}
    \begin{tikzpicture}[font=\scriptsize,scale=1.5]
        % axex, grid and ticklabels
        \tzhelplines[thick](-2,-4)(2,2)
        \tzshoworigin
        \tzaxes(-2,-4)(2,2)
        \tzticks{-2,-1,,1,2} % x-ticks
        {-4,-3,-2,-1,1,2} % y-ticks
        % plotting
        \clip (-2,-4) rectangle (2,2);
        \def\Fx{.3*(\x)^3-2} % <-- def cubic (F)
        \tzfn\Fx[-2:2]       % <-- naming the path F
        \def\Gx{-2*(\x)^2+2} % <-- def parabola (G)
        \tzfn\Gx[-2:2]       % <-- naming the path G
        \tzXpoint*{Fx}{Gx}(P){$A$}[0]
        \tzdot(P-2){$B$}[0]  
        \tzgetxyval(P){\Px}{\Py} % <-- coordinate of first point of intersection between F and G
        \tzgetxyval(P-2){\Qx}{\Qy} % <-- coordinate of second point of intersection between F and G
        \pgfmathsetmacro{\dx}{(\Qx-\Px)/\N}
        \def\gt{0} % <-- initial Riemann area (global variable)
        \def\t{0}  % <-- initial Riemann area (local variable inside loop)
        \foreach \n in {0,1,...,\N} { % <-- loop for shading area
            \pgfmathsetmacro{\x}{\Px+\n*\dx}
            \tzvXpointat{Fx}{\x}(R) % {$R_\n$}[b]
            \tzgetxyval(R){\Rx}{\Ry} 
            \tzvXpointat{Gx}{\x}(S) % {$S_\n$}[t]
            \tzgetxyval(S){\Sx}{\Sy} 
            \pgfmathsetmacro{\t}{\gt + (\Sy-\Ry)*\dx} % <-- temporary Riemann area
            \global\let\gt\t % <-- set global variable to new value
            \draw[blue!50,opacity=.3] (R)--(S);
        }
        \tzfn[very thick,magenta]\Fx[-2:2]
        \tzfn[very thick,cyan]\Gx[-2:2]
        \draw (0,-3.5) node[fill=yellow,font=\ttfamily] {Area\;=\;\gt}; % <-- final Riemann area
    \end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Por cierto, tendría cuidado al definir macros de una sola letra \defa nivel de documento.

información relacionada