Café du jeudi: exemple 3

132 days ago by thierry.chappuis

Exploration de quelques possibilités graphiques de Sage

Sage permet d'accéder à de nombreuses possibilités de visualisation graphique. Afin de démontrer ces possibilités, nous allons résoudre un système de deux équations de manière algébrique:

var('x') f(x) = x^2 g(x) = x^3 - 2 * x^2 + 2 solutions=solve(f == g, x, solution_dict=True) for s in solutions: show(s) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\left\{x : -\sqrt{3} + 1\right\}
\newcommand{\Bold}[1]{\mathbf{#1}}\left\{x : \sqrt{3} + 1\right\}
\newcommand{\Bold}[1]{\mathbf{#1}}\left\{x : 1\right\}
\newcommand{\Bold}[1]{\mathbf{#1}}\left\{x : -\sqrt{3} + 1\right\}
\newcommand{\Bold}[1]{\mathbf{#1}}\left\{x : \sqrt{3} + 1\right\}
\newcommand{\Bold}[1]{\mathbf{#1}}\left\{x : 1\right\}

Illustrons notre réponse avec une image

p1 = plot(f, (x, -1, 3), color='blue', axes_labels=['x', 'y']) p2 = plot(g, (x, -1, 3), color='red') labels = [] lines = [] markers = [] for s in solutions: x_value = s[x].n(digits=3) y_value = f(x_value).n(digits=3) labels.append(text('y=' + str(y_value), (x_value+0.5, y_value+0.5), color='black')) lines.append(line([(x_value, 0), (x_value, y_value)], color='black', linestyle='--')) markers.append(point((x_value,y_value), color='black', size=30)) show(p1+p2+sum(labels) + sum(lines) + sum(markers)) 
       

Visualiser une surface en 3 dimensions

Voici un exemple de courbe en 3 dimensions (Java doit activé dans votre navigateur):

NOTE: Les images 3D ne s'affichent actuellement que dans le notebook et pas sur les pages publiées. Je dois encore regarder pourquoi.

var('u,v') r = 2.0 f_x = (r + cos(u / 2) * sin(v) - sin(u / 2) * sin(2 * v)) * cos(u) f_y = (r + cos(u / 2) * sin(v) - sin(u / 2) * sin(2 * v)) * sin(u) f_z = sin(u / 2) * sin(v) + cos(u / 2) * sin(2 * v) parametric_plot3d([f_x, f_y, f_z], (u, 0, 2 * pi),(v, 0, 2 * pi), color="red") 
       

Ou encore

var('u, v') f1 = (4 + (3 + cos(v)) * sin(u), 4 + (3 + cos(v)) * cos(u), 4 + sin(v)) f2 = (8 + (3 + cos(v)) * cos(u), 3 + sin(v), 4 + (3 + cos(v)) * sin(u)) p1 = parametric_plot3d(f1, (u, 0, 2 * pi), (v, 0, 2 * pi), texture="red") p2 = parametric_plot3d(f2, (u, 0, 2 * pi), (v, 0, 2 * pi), texture="blue") combination = p1 + p2 combination.show() 
       

Graphes vecoriels

On utilise les graphes vectoriels par exemple pour représenter un champs de forces magnétiques

var('x, y') a = plot_vector_field((x, y), (x, -3, 3), (y, -3, 3), color='blue') b = plot_vector_field((y, -x), (x, -3, 3), (y, -3, 3), color='red') show(a + b, aspect_ratio=1, figsize=(4, 4)) 
       

Graphes polaires

import numpy import matplotlib.pyplot as plt N = float(7) theta = numpy.arange(0, numpy.pi, numpy.pi/100) def normalized_element_pattern(theta): return abs(numpy.sin(theta)) def array_factor(theta, N): return abs(float(1 / N) * numpy.sin(float(N * pi / 2) * numpy.cos(theta)) / numpy.sin(float(pi / 2) * numpy.cos(theta))) plt.figure(figsize=(6, 4)) plt.subplot(121, polar=True) plt.polar(theta, normalized_element_pattern(theta)) plt.title('Element factor') plt.subplot(122, polar=True) plt.polar(theta, array_factor(theta, N), color='red', label="Array factor") plt.polar(theta, array_factor(theta, N) * normalized_element_pattern(theta), label="Pattern", color='blue') plt.legend(loc='lower right', bbox_to_anchor = (1, 0)) plt.subplots_adjust(wspace=0.3) plt.savefig('Polar_plot.png') plt.close()