2014-08-13 2 views
-2

Я хочу решить систему нелинейных уравнений (у меня ровно 17 переменных и 17 уравнений). Я использовал scipy.optimize.fsolve, но сообщение об ошибке говорит: «fsolve: есть несоответствие между формой ввода и вывода аргумента« func »'.", знает ли кто-нибудь почему? Я прикладываю сюда свой код (это может выглядеть сложным, но на самом деле просто система нелинейных уравнений) Спасибо большое !!!!Решите систему нелинейных уравнений в scipy, почему она говорит «несоответствие между формой ввода и вывода

import scipy 
import scipy.optimize 
f = lambda x: [0.5*x[4]*x[6]*(x[16]**2-x[15]**2)-x[0],\ 
      0.5*x[4]*x[7]*(x[16]**2-x[15]**2)-x[1],\ 
      0.5*x[4]*x[9]*(1-x[16]**2)-x[2],\ 
      0.5*x[4]*x[8]*(x[16]**2-x[15]**2)+0.5*x[4]*x[10]*(1-x[16]**2)+x[5]-x[3],\ 
      (2*x[6]*(x[16]**2-x[15]**2))/((x[6]**2+x[7]**2)*(x[16]**2-x[15]**2)**2+x[9]**2*(1-x[16]**2)**2)-x[4],\ 
      1-0.5*x[4]*((x[6]+x[8])*(x[16]**2-x[15]**2)+x[10]*(1-x[16]**2))-x[5],\ 
      (1-x[0])/(x[0]*x[2]**2)-x[6],\ 
      -x[1]/(x[0]*x[2]**2)-x[7],\ 
      -x[3]/(x[0]*x[2]**2)-x[8],\ 
      -x[2]/(x[0]*((1-x[0])**2+x[1]**2))-x[9],\ 
      ((1-x[0])-x[3])/(x[0]*((1-x[0])**2+x[1]**2))-x[10],\ 
      (1-x[0])*(2*x[6]+x[8])-x[1]*x[7]-x[3]*x[6]-x[3]*x[8]-x[11],\ 
      x[10]*(1-x[0])-x[2]*x[9]-x[3]*x[10]-x[12],\ 
      x[6]**2*(3*(1-x[0])**2+2*x[1]**2+2*x[2]**2+x[3]**2)+x[7]**2*(2*(1-x[0])**2+x[1]**2+x[2]**2)+x[8]**2*((1-x[0])**2+x[1]**2+x[2]**2)-x[13],\ 
      x[9]**2*(2*(1-x[0])**2+x[1]**2+x[2]**2+x[3]**2)+x[10]**2*((1-x[0])**2+x[1]**2+x[2]**2)-x[14],\ 
      (x[12]-0.5*x[0]*x[14])*x[15]-0.5*x[0]/x[15]*(2*x[0]**2+x[1]**2+x[2]**2+x[3]**2-2)-0.1+x[2]] 

x0 = scipy.optimize.fsolve(f,[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7],) 
print x0 

ответ

0

Ваша целевая функция содержит 16 элементов, а не 17 элементов, как вы предложили. так, просто предоставляя еще элементы для f() будет решить проблему, например:

f = lambda x: [..., ..., ..., sum(x)] 

x0 = scipy.optimize.fsolve(f,[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7],) 
print x0 
[ 5.00037636e-01 1.69907838e-12 4.99999999e-01 4.99962364e-01 
    9.63171784e-05 1.00000000e+00 3.99939790e+00 7.19258762e-12 
    -3.99939790e+00 -4.00030112e+00 7.16678138e-15 1.99954843e+00 
    2.00015055e+00 3.19873572e+01 1.60006023e+01 4.67385102e-01 
    -5.09548388e+01] 
Смежные вопросы