Консультация № 178082
29.04.2010, 00:31
0.00 руб.
29.04.2010, 09:24
0 1 1
Уважаемые эксперты!
Помогите с проблемкой.
Мне нужно для метода Сипсона, которую я сделал в Excel, сосчитать интеграл. Я вправду сосчитал его вручную, т.е. сам выбирал ячейки, я хотел спросить у Вас, можно было это задать какой-нибудь функцией?
Вот программа. Помогите, пожалуйста.

Обсуждение

давно
Модератор
137394
1850
29.04.2010, 17:58
общий
это ответ
Здравствуйте, Зaйцeв Сeргeй.
Как я понял задачу, у Вас задана функция в виде таблицы. Необходимо вычислить интеграл по методу Симпсона.
При этом Вы не хотите писать формулу вычисления руками, перечисляя в ней вподряд все суммируемые ячейки.

Вот формула для 4 отрезков, которая позволяет почти полностью решить Вашу проблему.
Для 4 отрезков
=O3/3*(($C$2+$C$6)+4*СУММПРОИЗВ(C$3:C5;--(($A$3:$A5)=НЕЧЁТ($A$3:$A5)))+2*СУММПРОИЗВ(C$3:C5;--(($A$3:$A5)=ЧЁТН($A$3:$A5))))

По сравнению с Вашей таблицей я добавил для проверки еще 2 столбца для 64 отрезков.
Вот как меняется формула вычисления интеграла функции для разного кол-ва её разбиения на отрезки:
Для 4 отрезков
=O3/3*(($C$2+$C$6)+4*СУММПРОИЗВ(C$3:C5;--(($A$3:$A5)=НЕЧЁТ($A$3:$A5)))+2*СУММПРОИЗВ(C$3:C5;--(($A$3:$A5)=ЧЁТН($A$3:$A5))))
Для 8 отрезков
=O4/3*(($C$2+$C$6)+4*СУММПРОИЗВ(E$3:E9;--(($A$3:$A9)=НЕЧЁТ($A$3:$A9)))+2*СУММПРОИЗВ(E$3:E9;--(($A$3:$A9)=ЧЁТН($A$3:$A9))))
Для 16 отрезков
=O5/3*(($C$2+$C$6)+4*СУММПРОИЗВ(G$3:G17;--(($A$3:$A17)=НЕЧЁТ($A$3:$A17)))+2*СУММПРОИЗВ(G$3:G17;--(($A$3:$A17)=ЧЁТН($A$3:$A17))))
Для 32 отрезков
=O6/3*(($C$2+$C$6)+4*СУММПРОИЗВ(I$3:I33;--(($A$3:$A33)=НЕЧЁТ($A$3:$A33)))+2*СУММПРОИЗВ(I$3:I33;--(($A$3:$A33)=ЧЁТН($A$3:$A33))))
Для 64 отрезков
=O7/3*(($C$2+$C$6)+4*СУММПРОИЗВ(K$3:K65;--(($A$3:$A65)=НЕЧЁТ($A$3:$A65)))+2*СУММПРОИЗВ(K$3:K65;--(($A$3:$A65)=ЧЁТН($A$3:$A65))))

То есть вид формулы не меняется, но для каждого случая (увы, вручную, полностью автоматически не получается) надо подправить имя столбца, где расположены значения функции и верхние пределы суммирования.
Ваша таблица с моими изменениями здесь. Simpson.xls (48.5 кб)
Я проделывал это в Excell2003, вполне возможно в 2007 есть другая функция, позволяющая суммировать ячейки через одну.

Вообще-то такие задачи наверное легче решить с помощью функции, определённой пользователем (то есть практически с помощью макроса).
У Вас подинтегральная функция у=1/(x*Cos(x))
Я написал функцию для вычисления интеграла по Симпсону. Вот её текст.
Код:
Function Simpson(a As Double, b As Double, N) As Double
Dim ss, h As Double
h = (b - a) / N
Simpson = FuncInIntegral(a) + FuncInIntegral(b)

ss = 0
For i = 1 To N - 1 Step 2
ss = ss + FuncInIntegral(h * i)
Next
Simpson = Simpson + 4 * ss

ss = 0
For i = 2 To N - 2 Step 2
ss = ss + FuncInIntegral(h * i)
Next
Simpson = h / 3 * (Simpson + 2 * ss)

End Function
Function FuncInIntegral(x As Double) As Double
FuncInIntegral = 1 / (x + Cos(x))
End Function
Я не описываю, как её применить в Excel, так как не уверен, как для Вас было сформулировано задание.
Если необходимо, я подробно опишу, как это сделать.
Таблица с макросом здесь. Simpson_My.xls (47.5 кб)
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа