Итерация с фиксированной точкой по матрице с использованием python - PullRequest
0 голосов
/ 03 февраля 2020

Я новичок в python и только изучаю итерации с фиксированной запятой, так что я не совсем понимаю, как решить эту проблему. Это моя задача:

Простая формула traffi c для того, как автомобили должны быть расположены, учитывая, что они должны держать безопасное расстояние друг от друга, в то время как замедление может быть сформулировано следующим образом .:

Уравнения для x

Где M - автомобиль № 10, один перед всеми остальными. Верхний и нижний индексы связывают каждый x с указанным c автомобилем и шагом по времени, где h - наш временной шаг в секундах. Все позиции могут быть описаны с помощью матрицы nxM, и наша задача - найти x_i ^ {n + 1}, следующую машину для любой данной строки, используя формулу выше и итерацию с фиксированной точкой с обратным Эйлером. У меня уже есть точная матрица для позиций, использующих другой метод, но я не получаю нигде с итерацией. Это то, что у меня есть:

import numpy as np
from matplotlib import pyplot as plt
from functions_constants import * #Some constants and functions for velocity

h = 0.1                  #Step size in seconds
iterations = 40          #Number of iterations
cars2 = np.zeros([n,M])  #A 400*10 matrix. 400 time-steps and 10 cars

lastcar=cars[0,9]    #Initial value for last car
guess1 = cars[1,8]   #Arbitrary guess for car n,i

for i in range(n):                  #Loop over all timesteps (400)
    for iter in range(iterations):  #Iterate for iterations=40
        cars2[i,M-1]= lastcar+5*h   #Determine position of last car for all timesteps
    startguess = cars2[i,M-1]                   #Fixed point
    for j in range(8,-1,-1):                    #Loop over cars 0-8
        for iter in range(iterations):          #Iterate for iterations=40
            guess2=lastcar                      #Make an initial guess for car i+1,j+1
            cars2[i,j] = (3*guess1+h*guess2)/(h+3)  #See Equations for x
        guess1 = cars2[i,j]                         #Fixed point
        guess2 = cars2[i,j+1]                       #Fixed point

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

При нанесении с использованием другого метода в конечном итоге это выглядит следующим образом: Положение автомобиля в зависимости от времени . Мы хотим что-то похожее с методом итерации.

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

...