Вычисление средней точки для численного интегрирования

#python #arrays #integration #numeric

#python #массивы #интеграция #числовое

Вопрос:

Я пытаюсь написать некоторый код для численного интегрирования с использованием метода средней точки. A и b являются границами интегрирования. Я продолжаю получать только одно значение в моем списке средних точек. Я хочу, чтобы python просмотрел список моих значений и вычислил среднюю точку для всех значений в списке.

Это то, что я хочу: binlist = [1,2,3,4] средняя точка = [1,5, 2,5,3,5]

 a=0 
b=5
bins=10 #Number of bins

binnumber = np.linspace(a,b,bins)  
binlist = binnumber.tolist() 
midpoint= []  

for elements in range(10): 
    i=0
    midpoint1 = (binlist[i 1]-binlist[i])/2
    midpoint.append(midpoint1) 
    i =1

print(midpoint)
    
  

Комментарии:

1. Вопрос не ясен.. Чего вы ожидаете?

2. Извините. По сути, я хочу, чтобы программа просматривала мой список значений и вычисляла среднюю точку между каждым из значений. Например: a = [1,2,3,4] средняя точка = [1,5, 2,5,3,5]

3. Тщательно подумайте о значении, которое i имеет каждая точка процесса. Также подумайте, какое значение elements будет иметь каждая точка процесса, а затем подумайте, действительно ли вы используете это значение для чего-либо и можете ли вы использовать это значение для чего-либо.

4. Также, пожалуйста, прочитайте ericlippert.com/2014/03/05/how-to-debug-small-programs

5. @KarlKnechtel спасибо за ссылку. Ошибка была в логике вычисления средней точки. Я не добавлял разницу обратно к i-му значению, поэтому я получал одно и то же значение снова и снова. Во-вторых, если у меня есть список из 10 точек, я должен получить список из 9 средних точек. И да, мне не нужно было повторять с i, я мог просто использовать «элементы» в коде, и этого было бы достаточно.

Ответ №1:

 l = [1,2,3,4]
n = 0
output = []

for x in range(len(l) -1):
    n = (l[x]   l[x 1]) /2
    output.append(n)
    
print(output)
  

Вывод:

 [1.5, 2.5, 3.5]
  

Комментарии:

1. Спасибо за публикацию этого. Я увидел, что я помещал свое определение i в неправильное место. Код переопределял i каждый раз, когда выполнялся цикл.

Ответ №2:

Проблема с вашим решением заключается в следующем

midpoint1 = (binlist[i 1]-binlist[i])/2

Это должно быть: midpoint1 = (binlist[i 1] binlist[i])/2

Вы должны добавлять элементы в список, а затем разделять

Следующий код выдает желаемый результат

 import numpy as np
a=0.0
b=5.0
bins=10 #Number of bins

binnumber = np.linspace(a,b,bins)
binlist = binnumber.tolist() 
midpoint= []
i = 0
while i < len(binlist)-1:
   
    
    midpoint1 = (binlist[i 1] binlist[i])/2
    midpoint.append(midpoint1)
    i  =1
            
print(midpoint)