операнды не могут быть переданы вместе с ошибками фигур (12,999) (12,1000) с использованием scipy.integrate.solve_BVP - PullRequest
0 голосов
/ 11 ноября 2019

Ранее я задавал вопрос, где я спрашивал о том, где я обычно ошибался, пытаясь решить BVP здесь: Решение BVP с использованием scipy.solve_bvp, где функция возвращает массив

В одном из ответов, которые я получил, отвечая на это, говорилось, что функция, которую я передавал solve_bvp(), не имела формы (12,1000) в соответствии с документацией. Я исправил это, создав функцию, которая генерирует решения с требуемой формой, сначала инициализируя массив 12 на 1000, а затем устанавливая каждый из 12 массивов формы 1000 равным значению соответствующего ему дифференциального уравнения для каждого момента времени, в которыймоя функция называется. Код, который я написал ниже, с новым аннотированным кодом.

##find our velocity at time t=-1000, where the BVP is started from 
def find_vel_past():
    daynum=1000
    ts=np.linspace(0,-daynum*day2sec,daynum)
    angles=np.zeros([daynum,2])
    trange =(ts[0],ts[-1])
    fi=np.ndarray.flatten(np.array(rs+vs))
    sol= integrate.solve_ivp(earth_mars_motion,trange,fi,t_eval=ts, max_step=3*day2sec,dense_output=True)
    return(sol.y[0:6][:,-1])
##return an array of six velocities at this time 
def estimate_errors_improved():
    daynum=1000
    ##generating np arrays for bouundary conditions
    a=np.ndarray.flatten(np.array(find_vel_past()))
    rpast=np.ndarray.flatten(np.array(rspast))
    acond=np.concatenate([rpast,a])
    bcond=np.ndarray.flatten(np.array(rs+vs))
    t=np.linspace(0,daynum*day2sec,daynum)
    y=np.zeros(([12,daynum]))
    y[:,0]=acond
    ## THE FUNCTION I HAVE UPDATED AS PER ADVICE RECIEVED
    def earth_mars_motion1(t,y):
        x=np.zeros([12,daynum])
        y1=earth_mars_motion(t,y[:,0])
        for i in range(daynum):
            for i in range(len(y)):
                x[i]=y1[i] 
        return x
    def bc(ya,yb):
        a=ya.ravel()[0:6]-bcond[0:6]
        b=yb.ravel()[0:6]-rpast
        c=np.array([a,b])
        return np.reshape(c,(12))
        #return np.concatenate(ya.ravel()[0:6]-bcond[0:6],yb.ravel()[0:6]-rpast)
    sol = integrate.solve_bvp(earth_mars_motion1,bc,t,y,verbose=1)
    data1=np.transpose(sol.sol(t))
    angles=np.zeros(daynum)
    print(sol.sol(t))
    for i in range(daynum):      
        angles[i]=angle_between_planets(np.transpose(sol.sol(t)[:,0]))
        x = t/day2sec
    plt.plot(x,angles)
    plt.show()
estimate_errors_improved()

Вывод, который я получаю: ValueError: operands could not be broadcast together with shapes (12,999) (12,1000). Может ли кто-нибудь предоставить быстрое решение этой проблемы. Благодаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...