Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Stevotherad
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 21
1

Вычисление функций в vba

07.04.2019, 17:09. Просмотров 1732. Ответов 3
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста решить задачку на вычисление функции.

Написать оптимальную (по числу арифметических операций) программу для вычисления приведенной ниже функции:
0
Миниатюры
Вычисление функций в vba  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2019, 17:09
Ответы с готовыми решениями:

Создание функций в VBA
Здравствуйте.Не поручается выполнить эти 2 задания. 1. функцию FIO(), выделяющую из фамилии имени...

Разработка функций на языке VBA
№1 Разработать функцию, выполняющую указанное задание. Функция должна получать диапазон для...

Примеры API функций на VBA
Уважаемые форумчане здравствуйте! Большая просьба прислать ссылки на разные примеры связанные с...

Создание пользовательских функций VBA
Нужно написать функцию через форму в Exccel. Функция записана на кнопку, но при нажатии на кнопку...

Вычисление ArcCos в VBA
Подскажите как запсать arccos в VBA?

3
Kate_27
191 / 128 / 64
Регистрация: 27.03.2019
Сообщений: 274
07.04.2019, 19:05 2
Лучший ответ Сообщение было отмечено Stevotherad как решение

Решение

Stevotherad, У мня получилось так (Без проверки на адекватность вводных данных):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub Stevothrad()
    Dim N As Long
    Dim M As Long
    Dim x As Double
    Dim i As Long
    Dim F As Double
    x = InputBox("Введите x: ")
    If x > 0 Then
        M = InputBox("Введите целое M: ")
        For i = 0 To M
            F = F + ((-1) ^ i) * (Sin(x) ^ (2 * i + 1))
        Next i
    Else
        N = InputBox("Введите целое больше 0 N: ")
        If N > 0 Then
            F = 1
            For i = 1 To N
                F = F + (x ^ (2 * i)) / Factorial(2 * i)
            Next i
        End If
    End If
    MsgBox F
End Sub
 
Private Function Factorial(N As Long) As Long
    Dim i As Long
    Factorial = 1
    For i = 0 To N - 1
        Factorial = Factorial * (i + 1)
    Next i
End Function
2
Catstail
Модератор
24847 / 12633 / 2307
Регистрация: 12.02.2012
Сообщений: 20,574
10.04.2019, 08:26 3
Лучший ответ Сообщение было отмечено Stevotherad как решение

Решение

Kate_27, это плохой код. Прежде, чем кодить, стоит подумать. Для x > 0 имеем:

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n}=({x}^{2n})/(2n!) отсюда http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n+1}=({x}^{2n+2})/((2n+2)!).

Тогда:

http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n+1}/{a}^{n}=({x}^{2n+2})(2n!)/((2n+2)!)/({x}^{2n})={x}^{2}/((2n+1)*(2n+2))

Значит, чтобы получить следующий член из предыдущего нужно предыдущий умножить на x2 и разделить на (2n+1)(2n+2). При этом http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{0}=1.

Для второй последовательности последующий член получается из предыдущего умножением на -sin2(x)

Все это порождает такой код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function F(x as double, n as integer, m as integer)
Dim a as double, k as double, s as double,b as double
Dim i as integer
             if (x >0) then
                a=1.0
                k=0
                s=1.0
                for i=1 to n
                     k=k+1
                     a=(-x*x)/((2*k+1)*(2*k+2))
                     s=s+a
                next i 
             else
                a=sin(x)
                b=a
                s=a
                 for i=1 to m
                      a=-a*b*b
                      s=s+a
                next i 
             end if
             f=s
End Function
При желании, можно несколько улучшить.
3
Kate_27
191 / 128 / 64
Регистрация: 27.03.2019
Сообщений: 274
10.04.2019, 09:44 4
Catstail, согласна на все 100. Математические преобразования я как-то напрасно проигнорировала)
1
10.04.2019, 09:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2019, 09:44

Вычисление суммы VBA
Даны значения n и m( ввести через окно ввода) Вычислить: B=\sum_{k=1}^{n}\sum_{j=1}^{m}\left(k + j...

Использование стандартных функций в UserForm VBA
Как использовать функции Excel-я, (например макс, впр, и др.), в VBA? например, в ячейках А1 и...

Работа функций Randomize/Rnd в VBA
Доброго времени суток, господа! Прошу помочь с куском кода, почему две генерации случайного ряда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.