Построение корней многочлена

Построение корней многочлена

Мне нужно построить график корней любого заданного полинома на комплексной плоскости.

Пример: Пусть дано $P(x)=x^4-x^3-1$. Я хочу построить на комплексной плоскости $Oxy$ все четыре корня этого многочлена.

Полагаю, что Tikz может оказаться полезным инструментом в данном случае, но у меня нет опыта работы с этим пакетом.

решение1

При переходе к более технической математике вам следует использовать пакет, sagetexпоскольку он предоставляет вам доступ к CAS с открытым исходным кодом, называемомуМУДРЕЦ. Документация по CTAN естьздесь. Вот «быстрый и грязный» способ получить желаемое.

\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
x = polygen(QQ)
f = x^4-x^3-1
root_list = f.roots(CC) 
real_roots = []
for root in root_list:
    real_roots += [root[0].n(digits=3)]
P = list_plot(real_roots,color='red',size=25)
\end{sagesilent}
The roots of the polynomial $\sage{f}$ plotted in the complex plane
\begin{center}
\sageplot[scale=.8]{P}
\end{center}
The roots of $\sage{f}$ are $\sage{real_roots}$.
\end{document}

Вот что получилось: введите описание изображения здесь Я не знаю тонкостей кода, я просто набросал немного кода, ссылаясь наэтотиэтотчтобы разобраться с кодом. Я думаю, x = polygen(QQ)позволит вам найти корни многочленов с рациональными коэффициентами и f.roots(CC)скажет sage найти любые комплексные корни. Поскольку SAGE — это CAS, эти числа могут быть объектами, такими как sqrt(2), и мы хотим преобразовать их в десятичные дроби, которые можно построить. Это достигается с помощью for root in root_list: real_roots += [root[0].n(digits=3)]. Фактический график хранится в переменной P, где P = list_plot(real_roots,color='red',size=25)цвет и размер относятся к точкам, которые изначально слишком малы, чтобы их было легко увидеть. Все это делается в sagesilentрежиме, который похож на клочок бумаги, который не попадает в документ. В коде LaTeX используйте \sage{}для получения чисел/вычислений и \sageplot{}для получения графиков, которые создаются в SAGE. Выполнение графиков через sage помогает сделать код короче, и поскольку CAS выполняет математику, вы можете изменить функцию (просто помните, что вам нужно умножение между коэффициентами и переменными), и SAGE выдаст результат. Вы можете, добавив немного кода, сделать график более красивым tikz, вы можете обратиться к тому, как я это сделал для функции Дзета.здесь. Это займет довольно много дополнительных строк. Обратите внимание, что в моем коде SAGE также смог дать вам 4 нуля с помощью \sage{real_roots}. Наличие CAS, выполняющего эту работу, предотвращает ошибки.

SAGE не является частью дистрибутива LaTeX; лучший способ получить к нему доступ — через бесплатную учетную запись Cocalc, нажавздесь.

решение2

ТикZ — это не система компьютерной алгебры. Конечно, вы можете вычислить корни самостоятельно и построить их с использованием полярных координат. (В принципе, вы даже можете позволить Tiк(Z решают уравнения, определяющие корни численно, но это, пожалуй, было бы немного безумно.)

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{amsmath}
\DeclareMathOperator{\re}{Re}
\DeclareMathOperator{\im}{Im}
\begin{document}
\begin{tikzpicture}[scale=4]
 \draw[-latex] (-1.5,0) -- (1.75,0) node[below left] {$\re z$};
 \draw[-latex] (0,-1.5) -- (0,1.5) node[below right] {$\im z$};
 \draw (1,0.05) -- (1,-0.05) node[below]{1};
 \draw (0.05,1) -- (-0.05,1) node[left]{i};
 \foreach \X/\Y in {-76.5/0.94,76.5/0.94,180/0.82,0/1.38}
  {\fill (\X:\Y) circle[radius=1pt];}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

решение3

В следующий раз вам следует разместить минимальный рабочий пример, чтобы привлечь больше пользователей к вашему посту. В любом случае, вы новый пользователь, поэтому этот ответ для приветствия вас в TeX.SE!


Во-первых, я не думаю, что у него больше двух настоящих корней.

Вы можете легко построить его с помощью TiкЗ:

\documentclass[tikz]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[>=stealth,scale=2]
\draw[->] (0,-2.5)--(0,2.5) node[left] {$y$};
\draw[->,name path=ox] (-2.5,0)--(2.5,0) node[above]{$x$};
\draw (0,0) node[below left] {$O$};
\foreach \i in {-2,-1,1,2} {
    \draw (-.05,\i)--(.05,\i);
    \draw (0,\i) node[left] {$\i$};
    \draw (\i,-.05)--(\i,.05);
    \draw (\i,0) node[below] {$\i$};
}
\draw[red,name path=pl] plot[smooth,samples=500,domain=-1.1:1.6] (\x,{\x*\x*\x*\x-\x*\x*\x-1});
\path[name intersections={of=ox and pl,by={i1,i2}}];
\fill (i1) circle (1pt) node[above right] {$A$};
\fill (i2) circle (1pt) node[below right] {$B$};
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Теперь, когда у вас есть перекрестки, вы можете узнать их координаты:

\documentclass[tikz]{standalone}
\usetikzlibrary{intersections}
\newdimen\xa 
\newdimen\xb 
\newdimen\ya 
\newdimen\yb
\makeatletter
\def\convertto#1#2{\strip@pt\dimexpr #2*65536/\number\dimexpr 1#1}
\makeatother
% https://tex.stackexchange.com/a/239496/156344
\begin{document}
\begin{tikzpicture}[>=stealth,scale=2]
\draw[->] (0,-2.5)--(0,2.5) node[left] {$y$};
\draw[->,name path=ox] (-2.5,0)--(2.5,0) node[above]{$x$};
\draw (0,0) node[below left] {$O$};
\foreach \i in {-2,-1,1,2} {
    \draw (-.05,\i)--(.05,\i);
    \draw (0,\i) node[left] {$\i$};
    \draw (\i,-.05)--(\i,.05);
    \draw (\i,0) node[below] {$\i$};
}
\draw[red,name path=pl] plot[smooth,samples=500,domain=-1.1:1.6] (\x,{\x*\x*\x*\x-\x*\x*\x-1});
\path[name intersections={of=ox and pl,by={i1,i2}}];
\fill (i1) circle (1pt) node[above right] {$A$};
\path (i1); \pgfgetlastxy{\xa}{\ya}
\fill (i2) circle (1pt) node[below right] {$B$};
\path (i2); \pgfgetlastxy{\xb}{\yb} 
\draw (0,-3) node[text width=10cm,align=left] {%
There are two roots:\\
$A$ at $({\convertto{cm}{\xa}*2}, 0)$ and $B$ at $({\convertto{cm}{\xb}*2}, 0)$.};
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Конечно, вы всегда можете использовать его где угодно \xaи \xbкак угодно ;-)


Как сказал сурок, ТикZ — это не калькулятор. Он может только помочь нам найти настоящие корни, используя пересечения. И я не думаю, что это легко сделать с помощью каких-либо инструментов LaTeX, кроме как найти корни самостоятельно.

Связанный контент