Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

VBA: Ошибка в вычислении суммы членов ряда.

57K
10 февраля 2010 года
tiamatos
2 / / 10.02.2010
Здравствуйте.
Макрос написан в Visual Basic for Application в MS Word. Суть задачи в нахождении суммы членов ряда, имея такие условия:

Цитата:
s=1-((x^2)/2!)+((x^4)/4!)-...+((-1)^n)*(x^(2*n))/(2*n!)
x=pi/6 , отклонение: 0,5*10E-4. Количество членов ряда n=5.


x=pi/6, n=5 и 0,5*10E-4 нужны при тестировании программы. Так же известно, что cos(x) равен s.
Для проверки значений я использовал MS Excel. При проверке получилось, что cos(x)=s, что придало уверенности, что проверка правильна. Когда программа вывела результат он отличался от проверки. Допустимое отклонение указывает, что программа написана неправильно.
Код:

Цитата:
Sub Iter_cykl_za_index()
Dim fact As Single
Dim i As Integer
Dim n As Integer
Dim S As Single
Dim x As Single
'Виведення назви програми
MsgBox ("Iter_cykl_za_index")
'Введення занчень x, n
x = InputBox("Ввести значення x=")
n = InputBox("Ввести значення n=")
S = 1
fact = 1
For i = 1 To n - 1
fact = fact * 2 * i
S = S + (((-1) ^ (2 * i + 1)) * ((x ^ (2 * i)) / fact))
Next i
' Виведення значень i та s
MsgBox ("i=" + Str(i) + ";" + Chr(13) + "s=" + CStr(S) + ";")


End Sub


Проверка показало такое значение - 0,866025403784439
Программа показала немного иное значение (при вышеуказанном тексте программы) - 0,85083.
У меня есть вариант, что я неправильно записал факториал, точнее, прирост факториала.

44K
11 февраля 2010 года
Bonez92
37 / / 25.08.2009
Создайте два цикла. Один из них вычисляет факториал. Другой - суммирует члены рядов. Причем первый цикл должен быть внутри второго.

Цитата:
s=1-((x^2)/2!)+((x^4)/4!)-...+((-1)^n)*(x^(2*n))/(2*n!)


Может быть (2*n)! ?

58K
11 февраля 2010 года
Zierael
1 / / 11.02.2010
По-моему, цикл второй не нужен, нужно только изменить
 
Код:
fact = fact * i
S = S + (((-1) ^ (2 * i + 1)) * ((x ^ (2 * i)) / 2*fact))
57K
11 февраля 2010 года
tiamatos
2 / / 10.02.2010
Цитата: Zierael
По-моему, цикл второй не нужен, нужно только изменить
 
Код:
fact = fact * i
S = S + (((-1) ^ (2 * i + 1)) * ((x ^ (2 * i)) / 2*fact))



Это не изменило бы ситуации. Ответ был бы другим и неправильным, я разные вариации пробовал.
Вот то, что я заменил, т.е. на что заменил, часть кода. Теперь считает правильно.
Код:

Цитата:
S = 1
For i = 1 To n - 1
fact = 1
For j = 1 To 2 * i
fact = fact * j
Next j
S = S + (((-1) ^ i) * ((x ^ (2 * i)) / fact))
Next i


Спасибо, Bonez92, который подсказал, необходимое направление решения проблемы.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог