Имея функцию f (x, y, z), мне нужно решить ограничение f (x, y, z) = 0, а затем построить его. Я пытался найти для каждой пары (у, г) значения х, для которых F (х, у, г) = 0:Python fsolve() жалуется на форму. Зачем?
from numpy import *
from scipy.optimize import fsolve
def func(x,y,z):
return x+y+z
y = linspace(0,1,100)
z = linspace(0,1,100)
x0 = zeros((y.size,z.size)) + 0.5 # the initial guess
yz = (y[:,newaxis],z[newaxis,:]) # the other parameters
x, info, iterations, message = fsolve(func,x0,yz)
contour(y,z,x)
Python (2.7.5) говорит «TypeError: fsolve: есть несоответствие между формой ввода и вывода аргумента «func» «func».
Но если я проверить это сам, это дает ту же форму:
func(x0,y[:,newaxis],z[:,newaxis]).shape == x0.shape
возвращает True.
Почему fsolve() жалуется?
это не тот же вызов функции. что если вы проверите 'func (x0, y [:, newaxis], z [:, newaxis]). shape == x0.shape'? Не видя кода 'func', отладка этого для вас может быть сложной. – M4rtini
Да, вы правы, я только что осознал это и собирался изменить его в вопросе. Я попробовал, и он также дает ту же форму. – Amenhotep
Функция представляет собой длинную часть программы, но такое же поведение происходит с одной функцией линии def func (x, y, z): return x + y + z; Я не думаю, что это из-за функции. – Amenhotep