Як побудувати x ^ (1/3)?

Я спробував експортувати свої графіки Геогебри в tikz-код. В цілому він працює нормально, але ділянка x ^ 1/3 не працює:

\documentclass[10pt]{article}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\pagestyle{empty}
\begin{document}
\definecolor{ccqqqq}{rgb}{0.8,0,0}
\definecolor{qqttcc}{rgb}{0,0.2,0.8}
\definecolor{cqcqcq}{rgb}{0.75,0.75,0.75}
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm]
\draw [color=cqcqcq,dash pattern=on 1pt off 1pt, xstep=1.0cm,ystep=1.0cm] (-4,-4) grid (4,4);
\draw[->,color=black] (-4,0) -- (4,0);
\foreach \x in {-4,-3,-2,-1,1,2,3}
\draw[shift={(\x,0)},color=black] (0pt,2pt) -- (0pt,-2pt) node[below] {\footnotesize $\x$};
\draw[->,color=black] (0,-4) -- (0,4);
\foreach \y in {-4,-3,-2,-1,1,2,3}
\draw[shift={(0,\y)},color=black] (2pt,0pt) -- (-2pt,0pt) node[left] {\footnotesize $\y$};
\draw[color=black] (0pt,-10pt) node[right] {\footnotesize $0$};
\clip(-4,-4) rectangle (4,4);
\draw[color=qqttcc, smooth,samples=100,domain=-4.0:4.0] plot(\x,{(\x)*(\x)*(\x)});
\draw[color=ccqqqq, smooth,samples=100,domain=-4.0:4.0] plot(\x,{((\x))^(1/(3))});
\draw [color=qqttcc](2.06,4.18) node[anchor=north west] {$f(x)=x^3$};
\draw [color=ccqqqq](2.06,1.18) node[anchor=north west] {$f(x)=\sqrt[3]{x}$};
\begin{scriptsize}
\draw[color=qqttcc] (-1.74,-7.16) node {$f$};
\end{scriptsize}
\end{tikzpicture}
\end{document}

Рядок помилки 21:! Номер відсутній, вважається нульовим.

Тому у сюжету є проблеми з негативним х, я вважаю, але я не знаю. Будь-яка допомога буде великою! Я Googled його протягом майже 1 години - але ніяких реальних відповідей.

Як запропонував він повернутий і віддзеркалений графік - прекрасно працює !:

\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\pagestyle{empty}
\begin{document}
\definecolor{ccqqqq}{rgb}{0.8,0,0}
\definecolor{qqttcc}{rgb}{0,0.2,0.8}
\definecolor{cqcqcq}{rgb}{0.75,0.75,0.75}
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm]
\draw [color=cqcqcq,dash pattern=on 1pt off 1pt, xstep=1.0cm,ystep=1.0cm] (-4,-4) grid (4,4);
\draw[->,color=black] (-4,0) -- (4,0);
\foreach \x in {-4,-3,-2,-1,1,2,3}
\draw[shift={(\x,0)},color=black] (0pt,2pt) -- (0pt,-2pt) node[below] {\footnotesize \x};
\draw[->,color=black] (0,-4) -- (0,4);
\foreach \y in {-4,-3,-2,-1,1,2,3}
\draw[shift={(0,\y)},color=black] (2pt,0pt) -- (-2pt,0pt) node[left] {\footnotesize \y};
\draw[color=black] (0pt,-10pt) node[right] {\footnotesize 0};
\clip(-4,-4) rectangle (4,4);
\draw[color=qqttcc, smooth,samples=100,domain=-4.0:4.0] plot(\x,{(\x)*(\x)*(\x)});
\begin{scope}[yscale=-1,xscale=1]
\draw[rotate=90, color=ccqqqq, smooth,samples=100,domain=-4.0:4.0] plot(\x,{(\x)*(\x)*(\x)});
\end{scope}
\draw [color=qqttcc](2.06,4.00) node[anchor=north west] {$f(x)=x^3$};
\draw [color=ccqqqq](2.06,1.00) node[anchor=north west] {$f(x)=\sqrt[3]{x}$};
\begin{scriptsize}
\draw[color=qqttcc] (-1.74,-7.16) node {f};
\end{scriptsize}
\end{tikzpicture}
\end{document}
15
@ BenjaminMcKay Я спробував намалювати [колір = ccqqqq, гладкий, зразки = 50, домен = 0.0001: 4.0] сюжет (x, {(x) ^ (1/3)}); той самий код, що й jojo , але форма кривої є абсолютно неправильною для значень, менших ніж 1.0 .
додано Автор Rodrigo, джерело
ah ok, я розумію, що з usepackage {fp} до картини додано ключ usetikzlibrary {fixedpointarithmetic} і ключ арифметика з фіксованою точкою. Невдача оголеного pgfmath на цьому є вражаючою!
додано Автор Rodrigo, джерело
Елегантний спосіб полягає в тому, щоб побудувати $ y = x ^ 3 $, але відображатиметься через рядок $ y = x $. Таким чином, вам ніколи не потрібно обчислювати кубічний корінь, тому обчислення відбуваються швидше і, що більш важливо, більш точно.
додано Автор Benjamin McKay, джерело
додано Автор kiss my armpit, джерело
Спробуйте це питання .
додано Автор agentp, джерело
І як мені це зробити?
додано Автор KatDel12364, джерело
Найкращим способом є параметричний сюжет у відповіді Герберта. Це, по суті, те ж саме, що і побудова y = x ^ 3 , але без додаткового перетворення. Крутий нахил y = x ^ {1/3} вимагає високої вибірки в змінній x і високій точності. Але це не є проблемою з побудовою y = x ^ 3 .
додано Автор dave, джерело

6 Відповіді

Я впевнений, що ми відповіли на це раніше, але це рішення можна отримати за допомогою pgfplots .

При побудові функцій кореня куба корисно знати, що багато програм (включаючи чудовий пакет pgfplots ) використовують логарифми для побудови їх. Таким чином, ви повинні бути обережні з доменом.

У наведеному нижче коді я намалював цю функцію

x/|x|*(|x|)^(1/3)

яка гарантує, що функція побудована для всього домену.

screenshot

% arara: pdflatex
\documentclass{standalone}
\usepackage{pgfplots}

% set the arrows as stealth fighters
\tikzset{>=stealth}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    xmin=-10,xmax=10,
    ymin=-10,ymax=10,
    axis lines=center,
    axis line style=<->]
    \addplot[<->] expression[domain=-10:10,samples=100]{x/abs(x)*abs(x)^(1/3)}; 
  \end{axis}
\end{tikzpicture}
\end{document}
16
додано
@Marienplatz спасибі! Я боюся, що я не можу зайняти будь-яку заслугу, хоча :) Це трюк, який я отримав з де-небудь ще.
додано Автор nullDev, джерело
x/abs (x) * abs (x) ^ (1/3) - це геніальне вираження, яке є безперервним, але не диференційованим. +1!
додано Автор kiss my armpit, джерело
Цікаво, що він також працює для samples = 11 , тобто для x = 0.
додано Автор quinmars, джерело

З PSTricks.

Варіант 1 (із позначенням Postfix)

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\begin{document}
\begin{pspicture}(-3.5,-2.5)(4,3)
    \psaxes{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
    \pstVerb{/power 1 3 div def}
    \psplot[plotpoints=1000,linecolor=blue]{-3}{3}{x dup 0 lt {neg power exp neg} {power exp} ifelse}
\end{pspicture}
\end{document}

Варіант 2 (з позначкою Infix)

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\begin{document}
\begin{pspicture}(-3.5,-2.5)(4,3)
    \psaxes{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
    \psplot[plotpoints=1000,linecolor=blue,algebraic]{-3}{3}{IfTE(x<0,-(-x)^(1/3),x^(1/3))}
\end{pspicture}
\end{document}

enter image description here

Варіант 3 (з обертанням)

Це останній засіб для дітей. Правий аркуш повертається на 180 градусів щодо походження, щоб отримати лівий лист.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\psset{plotpoints=1000}

\begin{document}
\multido{\i=0+10}{19}{%
\begin{pspicture}(-3.5,-2.5)(4,3)
    \psaxes{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
    \def\right{\psplot[linecolor=blue,algebraic]{0}{3}{x^(1/3)}}%
    \rput{\i}{\right}\right
    %\def\right{\psplot[linecolor=red]{0}{3}{x 1 3 div exp}}%
    %\rput{180}{\right}\right
\end{pspicture}}
\end{document}

enter image description here

Варіант 4 (з параметричним графіком)

Будь ласка, див. Відповідь Герберта.

Варіант 5 (із неявним графіком)

З додатковою помилкою.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-func}

\begin{document}
\begin{pspicture}(-3.5,-2.5)(4,3)
  \psaxes{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
  \psplotImp[linecolor=red,stepFactor=0.2,algebraic](-3,-1.5)(3,1.5){y^3-x}
\end{pspicture}
\end{document}

enter image description here

Помилка може бути прихована шляхом відсікання небажаних кривих.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-func}

\begin{document}
\begin{pspicture}(-3.5,-2.5)(4,3)
    \psaxes{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
    \psclip{\psframe[linestyle=none,dimen=monkey](!-3 3 1 3 div exp neg)(!3 3 1 3 div exp)}
        \psplotImp[linecolor=red,stepFactor=0.1,algebraic](-4,-3)(5,4){y^3-x}
    \endpsclip
\end{pspicture}
\end{document}

enter image description here

Варіант 6 (з swapaxes)

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\begin{document}
\begin{pspicture}(-3.5,-2.5)(4,3)
    \psaxes{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
  \psplot[linecolor=red,algebraic,plotpoints=1000,swapaxes]{3 1 3 div exp neg}{3 1 3 div exp}{x^3}
\end{pspicture}
\end{document}

enter image description here

16
додано

використовувати параметричну форму: x = t³ і y = t:

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\begin{document}
\begin{pspicture}(-3.5,-2.5)(4,3)
    \psaxes[labelFontSize=\scriptstyle]{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
    \psparametricplot[linecolor=blue,algebraic]{-1.5}{1.5}{t^3|t}
\end{pspicture}
\end{document}

enter image description here

або неявна форма y³-x = 0 :

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-func}

\begin{document}
\begin{pspicture*}(-3.5,-2.5)(4,3)
  \psaxes[labelFontSize=\scriptstyle,ticksize=0 4pt]{->}(0,0)(-3.5,-2.5)(3.5,2.5)[$x$,0][$y$,90]
  \psplotImp[linecolor=red,linewidth=2pt,algebraic](-4,-3)(4,3){y^3-x}
\end{pspicture*}
\end{document}

enter image description here

12
додано

Математика IEEE зазвичай дає NaN (не число) для x ^ a , якщо x ≤ 0 і a не є цілим числом.

You can draw x^{1/3} for x in [0.00001:4] and -(-x)^{1/3} for x in [-4:-0.00001]

3
додано
Чому ви посилаєтеся на математику IEEE?
додано Автор Werner, джерело
Чи не лежить в основі математики pgf?
додано Автор dqm, джерело

Інший підхід полягає у використанні gnuplot для обчислення 1/3 виразів з плаваючою точкою з < код> -shell-escape увімкнено та встановлено gnuplot .

The idea is to evaluate 1/3 first similar to making atleast one numerator or denominator floating point value like this 1./3 or 1.0/3. Note: sgn(x) is Sign function (-1 if x < 0; 0 if x = 0; 1 if x > 0). One might need more samples of points to get a refined plot. Here are some examples with packages that use gnuplot.

With tkz-fct

\documentclass[preview=true,12pt]{standalone}
\usepackage{tkz-fct}
\begin{document}
\begin{tikzpicture}[scale=2]
\tkzInit[xmin=-2,xmax=2,ymin=-2,ymax=2]
\tkzGrid
\tkzAxeXY
\tkzFct[color=red]{sgn(x)*(abs(x)**(1./3))}
\end{tikzpicture}
\end{document}

enter image description here

gnuplottex

\documentclass[preview=true,12pt]{standalone}
\usepackage{gnuplottex} 
\begin{document} 
\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
  set grid
   set samples 1000
   set xlabel '$x$'
  set ylabel '$ x^{\frac{1}{3}} $'
  plot [-2:2] [-2:2] sgn(x)*(abs(x)**(1./3)) title '$ x^{\frac{1}{3}} $' linetype 1 linewidth 3
\end{gnuplot} 
\end{document}

enter image description here

pgfplots і навіть чистий topic/pgf-tikz "rel =" nofollow noreferrer "> tikz можна використовувати.

\documentclass[preview=true,border=2pt,12pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9} 
\begin{document} 
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel=$x^{\frac{1}{3}}$,grid=major,enlargelimits=false]
\addplot [domain=-2:2,samples=1000,red,no markers] gnuplot[id=poly]{sgn(x)*(abs(x)**(1./3)) };
\end{axis}
\end{tikzpicture}
\end{document}

enter image description here

2
додано
\begin{tikzpicture}[scale=0.5]
\draw[dashed,gray!30](-3,-3)grid(3,3); %this creates the grid you see;
                                       %dashed, gives the dashed lines
                                       %gray!30, gives a gray color be dim by factor of 30.
\draw[<->](-3,0)--(3,0)node[below right]{$x$}; %this is the x-axis
\draw[<->](0,-3)--(0,3)node[above right]{$y$}; %this is the y-axis
\foreach \x in {-2,-1,1,2} %this starts a while loop with "\x" touching -2,-1,1,2 then ends.
    \draw(\x,2pt)--(\x,-2pt)node[below]{\footnotesize{$\x$}}; %this is what I want the foreach
                                                              %loop to do until it reaches the semi-colon.
                                                              %this is what gives the tick marks and numbers on the axis
\foreach \x in {-2,-1,1,2} %same as before but for the y-axis
    \draw(2pt,\x)--(-2pt,\x)node[left]{\footnotesize{$\x$}};
\draw[<->,domain=-1.442249:1.442249,samples=100]plot({\x*\x*\x},\x); %where x^3=2 when x=1.442249'ish
\end{tikzpicture}
0
додано
Будь ласка, не публікуйте лише код або фрагменти коду, поясніть, що робить код!
додано Автор Kurt, джерело