17
Мар
2018

nsolve решение нелинейных уравнений

Заполняю динамически массив аргументов и функций, где N+1 это кол-во уравнений, аргументов:

a = [0]*(N+1)
f = [0]*(N+1)
i = 0
while i < (N + 1):
    a[i] = Symbol(('a'+chr(48+i)))
    f[i] = -R[i]
    i = i + 1
m = 0
while m < (N+1):
    i = 0
    while i <= N - m:
        f[m] = f[m] + a[i]*a[i+m]
        i = i + 1
    m = m + 1
print(f, a) 

показывает:

[a0**2 + a1**2 - 332.236351096697, a0*a1 - 106.241697077312] [a0, a1]

хочу решить эту систему с помощью nsolve:

nsolve(f, a, [1]*(N+1))

Получаю ошибку:

Traceback (most recent call last):
  File "C:/Users/Артем/PycharmProjects/tsp/tsp/tsp.py", line 158, in <module>
    print(ss_n(R[:2], 1))
  File "C:/Users/Артем/PycharmProjects/tsp/tsp/tsp.py", line 118, in ss_n
    return nsolve(f, a, [1]*(N+1))
  File "C:\Users\Артем\PycharmProjects\tsp\venv\lib\site-packages\sympy\utilities\decorator.py", line 91, in func_wrapper
    return func(*args, **kwargs)
  File "C:\Users\Артем\PycharmProjects\tsp\venv\lib\site-packages\sympy\solvers\solvers.py", line 2847, in nsolve
    x = findroot(f, x0, J=J, **kwargs)
  File "C:\Users\Артем\PycharmProjects\tsp\venv\lib\site-packages\mpmath\calculus\optimization.py", line 960, in findroot
    for x, error in iterations:
  File "C:\Users\Артем\PycharmProjects\tsp\venv\lib\site-packages\mpmath\calculus\optimization.py", line 658, in __iter__
    s = self.ctx.lu_solve(Jx, fxn)
  File "C:\Users\Артем\PycharmProjects\tsp\venv\lib\site-packages\mpmath\matrices\linalg.py", line 227, in lu_solve
    A, p = ctx.LU_decomp(A)
  File "C:\Users\Артем\PycharmProjects\tsp\venv\lib\site-packages\mpmath\matrices\linalg.py", line 152, in LU_decomp
    raise ZeroDivisionError('matrix is numerically singular')
ZeroDivisionError: matrix is numerically singular

Источник: https://ru.stackoverflow.com/questions/800639/nsolve-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85-%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9

Тебе может это понравится...

Добавить комментарий