Как вы перебираете и обновляете массив numpy, чтобы решить систему линейных уравнений вида Ax = B? - PullRequest
0 голосов
/ 26 февраля 2020

Итак, я ищу решение системы уравнений в python 3.7 с numpy. Однако мне нужно решить систему уравнений в конце каждой итерации. Во время итераций он решит некоторые уравнения, которые будут составлять содержимое A и B, чтобы найти x в форме Ax = B. После решения для x мне нужно сохранить эти значения, чтобы затем решить основные уравнения для следующей итерации, которая будет переопределена в A и B.

Я попробовал более линейный подход к решению проблемы, но это не хорошо для моей конечной цели решения уравнения прилагается на изображении. То, что я сделал до сих пор, также было приложено ниже:

i = 0


while (y[i] >= 0 ):                     #Object is above water
    t[i+1] = t[i] + dt

    vx[i+1] = vx[i] + dt * ax[i]       #Update the velocities
    vy[i+1] = vy[i] + dt * ay[i]

    v_ax[i+1] = (vx[i]*np.sin(phi/180*np.pi)) - (vy[i]*np.cos(phi/180*np.pi))
    v_nor[i+1] = (vx[i]*np.cos(phi/180*np.pi)) + (vy[i]*np.sin(phi/180*np.pi))

    F_wnor[i+1] = (Cd_a * A_da * rho_air * (v_nor[i] - v_wind*np.sin(phi/180*np.pi)) * abs(v_nor[i] - v_wind*np.sin(phi/180*np.pi)))/2
    F_wax[i+1] = (Cd_a * A_da * rho_air * (v_ax[i] - v_wind*np.sin(phi/180*np.pi)) * abs(v_ax[i] - v_wind*np.sin(phi/180*np.pi)))/2

    F_wx[i+1] = (-F_wax[i] * np.sin(phi/180*np.pi)) - (F_wnor[i] * np.cos(phi/180*np.pi))
    F_wy[i+1] = (F_wax[i] * np.cos(phi/180*np.pi)) - (F_wnor[i] * np.sin(phi/180*np.pi))

    ax[i+1] = F_wx[i]/M  
    ay[i+1] = (F_wx[i]/M) - g

    y[i+1] = (y[i]+dt*vy[i])
    x[i+1] = (x[i]+dt*vx[i])

    i = i + 1


j = i 
#under water velocities

# if y(t)>0: M*z'' = M.g - Fb + Fd + Fm

while (y[j] <= 0 and y[j] > -10):

    if (abs(y[j]/r)< 2):
        theta_degree = 2 * np.arccos(1 - (abs(y[j])/r))
        theta = theta_degree/180*np.pi
        m = ((rho_water * r**2)/2) * (((2*(np.pi)**3*(1-np.cos(theta))) / ( 3 * (2*np.pi-theta)**2)) \
             + (np.pi * (1-np.cos(theta)*1/3)) + (np.sin(theta)) - (theta))

        dm_dz = ((rho_water * r)/np.sin(theta/2)) * (((2 * (np.pi)**3 / 3) * ((np.sin(theta) / (2*np.pi - theta)**2) \
                  + (2 * (1-np.cos(theta)) / (2*np.pi - theta )**3))) + (np.pi * np.sin(theta) / 3) + np.cos(theta) - 1)

        A_i = (r**2)/2 * (theta - np.sin(theta))

        F_m[j] = - m * ay[j] - dm_dz * np.max(vy)*vy[j]

        F_uwater[j] = (M * g) - (rho_water * A_i * g) - (Cd_y * rho_water * r * vy[j] * abs(vy[j]))



    else:
        m = np.pi * rho_water * r**2

        dm_dz = 0

        A_i = np.pi * r**2

        F_m[j] = - m * ay[j] - dm_dz * vy[j]**2

        F_uwater[j] = (M * g) - (rho_water * A_i * g) - (Cd_y * rho_water * r * vy[j] * abs(vy[j]))

        print("Fully submerged")


    t[j+1] = t[j] + dt

    vx[j+1] = vx[j] + dt * ax[j]       #Update the velocities
    vy[j+1] = vy[j] + dt * ay[j]

    ax[j+1] = F_wx[j]/M  
    ay[j+1] = (F_uwater[j] + F_m[j]/M)

    y[j+1] = (y[j]+dt*vy[j])
    x[j+1] = (x[j]+dt*vx[j])

    print(y[j])

    j = j + 1

Я не знаю, как go об этом, и помощь в начале работы будет принята с благодарностью!.

Проблема, которую я пытаюсь решить, видна на картинке. Система уравнений, которую я пытаюсь решить

...