Je viens de tester un exemple de Méthodes numériques en ingénierie avec Python .
from numpy import zeros, array
from math import sin, log
from newtonRaphson2 import *
def f(x):
f = zeros(len(x))
f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
f[1] = 3.0*x[0] + 2.0**x[1] - x[2]**3 + 1.0
f[2] = x[0] + x[1] + x[2] -5.0
return f
x = array([1.0, 1.0, 1.0])
print newtonRaphson2(f,x)
Quand je le lance, il affiche l'erreur suivante:
File "example NR2method.py", line 8, in f
f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
ValueError: math domain error
Je l'ai réduit au journal comme lorsque je supprime le journal et ajoute une fonction différente, cela fonctionne. Je suppose que c'est à cause d'une sorte d'interférence avec la base, je ne peux pas comprendre comment. Quelqu'un peut-il proposer une solution?
Votre code fait une log
d'un nombre inférieur ou égal à zéro. C'est mathématiquement indéfini, donc la fonction log
de Python soulève une exception. Voici un exemple:
>>> from math import log
>>> log(-1)
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
log(-1)
ValueError: math domain error
Sans savoir ce que fait votre fonction newtonRaphson2
, je ne suis pas sûr de pouvoir deviner d'où vient la valeur x[2]
invalide, mais j'espère que cela vous mènera sur la bonne voie.
Vous essayez de faire un logarithme de quelque chose qui n’est pas positif.
Les logarithmes déterminent la base après avoir reçu un numéro et la puissance à laquelle elle a été augmentée. log(0)
signifie que quelque chose élevé à la puissance de 2
est 0
. Un exposant ne peut jamais aboutir à 0
*, ce qui signifie que log(0)
n'a pas de réponse, jetant ainsi le math domain error
* Remarque: 0^0
peut entraîner 0
, mais peut également entraîner 1
en même temps. Ce problème est largement débattu.
J'ai continué à avoir une erreur similaire. Cela ressemble à un problème matplotlib. Le redémarrage de ma session ipython a résolu le problème pour moi.
~/uqing/forreal100/analysis.py in corrf(a, nam1, nam2)
60 plt.axis('equal')
61 plt.title(r'$\rho^2 = %f$' % a.corr()['second']['des'] ** 2)
---> 62 plt.savefig(nam1 + nam2 + '.pdf')
63 plt.clf()
64 plt.close('all')
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/pyplot.py in savefig(*args, **kwargs)
695 def savefig(*args, **kwargs):
696 fig = gcf()
--> 697 res = fig.savefig(*args, **kwargs)
698 fig.canvas.draw_idle() # need this if 'transparent=True' to reset colors
699 return res
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/figure.py in savefig(self, *args, **kwargs)
1570 self.set_frameon(frameon)
1571
-> 1572 self.canvas.print_figure(*args, **kwargs)
1573
1574 if frameon:
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
2242 orientation=orientation,
2243 bbox_inches_restore=_bbox_inches_restore,
-> 2244 **kwargs)
2245 finally:
2246 if bbox_inches and restore_bbox:
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backends/backend_pdf.py in print_pdf(self, filename, **kwargs)
2523 RendererPdf(file, image_dpi, height, width),
2524 bbox_inches_restore=_bbox_inches_restore)
-> 2525 self.figure.draw(renderer)
2526 renderer.finalize()
2527 finally:
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
61 def draw_wrapper(artist, renderer, *args, **kwargs):
62 before(artist, renderer)
---> 63 draw(artist, renderer, *args, **kwargs)
64 after(artist, renderer)
65
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/figure.py in draw(self, renderer)
1141
1142 mimage._draw_list_compositing_images(
-> 1143 renderer, self, dsu, self.suppressComposite)
1144
1145 renderer.close_group('figure')
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, dsu, suppress_composite)
137 if not_composite or not has_images:
138 for zorder, a in dsu:
--> 139 a.draw(renderer)
140 else:
141 # Composite any adjacent images together
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
61 def draw_wrapper(artist, renderer, *args, **kwargs):
62 before(artist, renderer)
---> 63 draw(artist, renderer, *args, **kwargs)
64 after(artist, renderer)
65
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe)
2345 self.apply_aspect(pos)
2346 else:
-> 2347 self.apply_aspect()
2348
2349 artists = self.get_children()
/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/axes/_base.py in apply_aspect(self, position)
1463 if aspect_scale_mode == "log":
1464 dL = self.dataLim
-> 1465 dL_width = math.log10(dL.x1) - math.log10(dL.x0)
1466 dL_height = math.log10(dL.y1) - math.log10(dL.y0)
1467 xr = 1.05 * dL_width
ValueError: math domain error