У меня есть довольно сложная функция H(x)
, и я пытаюсь определить значение x
так, чтобы H(x) = constant
. Я хотел бы сделать это с помощью объекта интерполяции, сгенерированного из дискретного интервала и соответствующего вывода H (интервал), где другие входы остаются постоянными. Я обозначаю объект интерполяции f
.
Моя проблема в том, что функция вызова объекта интерполяции принимает array_like, поэтому о передаче символа в f(x)
для использования метода решателя мудреца не может быть и речи. Любые идеи о том, как обойти это?
У меня есть функция интерполяции f
. Я хочу решить уравнение f(x) == sageconstant for
x.
from scipy.interpolate import InterpolatedUnivariateSpline as IUspline
import numpy as np
#Generating my interpolation object
xint = srange(30,200,step=.1)
val = [H(i,1,.1,0,.2,.005,40) for i in srange(30,299,step=.1)]
f = IUspline(xint,val,k=4)
#This will yield a sage constant
eq_G(x) = freeB - x
#relation that I would like to solve
eq_m(x) = eq_G(39.9) == f(x)
m = solve(eq_m(x),x)
Приведенный выше код (точнее, f(x)
) генерирует
«Ошибка типа: невозможно преобразовать данные массива из dtype («0») в dtype («float64») в соответствии с правилом «безопасно».
редактировать: любая функция H(x)
приведет к той же ошибке, поэтому не имеет значения, что такое H(x)
. Для простоты (я не шутил, когда сказал, что H
сложно), попробуйте H(x) = x
. Тогда блок будет читать:
from scipy.interpolate import InterpolatedUnivariateSpline as IUspline
import numpy as np
#Generating my interpolation object
xint = srange(30,200,step=.1)
H(x) = x
val = [H(i) for i in srange(30,299,step=.1)]
f = IUspline(xint,val,k=4)
#This will yield a sage constant
eq_G(x) = freeB - x
#relation that I would like to solve
eq_m(x) = eq_G(39.9) == f(x)
m = solve(eq_m(x),x)
srange(30, 200, step=.1)
вместоxint
, ноsrange(30, 299, step=.1)
вместоval
, и это200
против299
вызывает ошибку при копировании и вставке. ТогдаfreeB
не определено. Как правило, всегда проверяйте правильность постановки вопроса путем копирования и вставки в новый сеанс Sage, а затем копирования и вставки из этого сеанса точного ввода, вывода и сообщения об ошибке. Может быть, не имеет значения, что такоеfreeB
, но важно, могут ли другие воспроизвести ошибку, чтобы исследовать и помочь решить проблему. - person Samuel Lelièvre   schedule 01.05.2019