Доброго дня. Не могу составить функцию для подсчета суммы абсолютных значений косинусов. Собственно постановка задачи: Окружность делят на n равных частей (т.е. на окружность наносятся n точек, первая точка находится на оси отсчета( косинус равен 1)). Необходимо найти сумму квадратов отклонений (сумму квадратов косинусов) этих точек от оси. Прошу помочь с написанием формулы в VBA, с вводимыми аргументами постараюсь разобраться. [vba]
Код
For i = 1 To n результат = сумма Abs(Cos((n - i) * Pi() * 360 / (n * 180))) * d / 2
[/vba] вот что-то такое у меня получилось, где n - кол-во точек, d - диаметр окружности. Заранее благодарю всех небезучастных.
Доброго дня. Не могу составить функцию для подсчета суммы абсолютных значений косинусов. Собственно постановка задачи: Окружность делят на n равных частей (т.е. на окружность наносятся n точек, первая точка находится на оси отсчета( косинус равен 1)). Необходимо найти сумму квадратов отклонений (сумму квадратов косинусов) этих точек от оси. Прошу помочь с написанием формулы в VBA, с вводимыми аргументами постараюсь разобраться. [vba]
Код
For i = 1 To n результат = сумма Abs(Cos((n - i) * Pi() * 360 / (n * 180))) * d / 2
[/vba] вот что-то такое у меня получилось, где n - кол-во точек, d - диаметр окружности. Заранее благодарю всех небезучастных.Khorr
Сообщение отредактировал Khorr - Среда, 29.01.2014, 14:30
Если первая точка находится на "оси" и её косинус равен единице - то угол радиус-вектора точки, соответствующий этому косинусу - равен нулю. "Отклонение от оси" тогда тоже равно нулю (cos(0)=1). Для следующих точек величина "отклонения от оси" - это, по-видимому, расстояние до этой оси. Которое будет равно не косинусу, а синусу угла соответствующего радиус-вектора... Вы ничего в условиях не напутали? Или приведите условие в виде рисунка с принятыми вами обозначениями (главное - это взаимное расположение окружности и оси отсчёта).
Если первая точка находится на "оси" и её косинус равен единице - то угол радиус-вектора точки, соответствующий этому косинусу - равен нулю. "Отклонение от оси" тогда тоже равно нулю (cos(0)=1). Для следующих точек величина "отклонения от оси" - это, по-видимому, расстояние до этой оси. Которое будет равно не косинусу, а синусу угла соответствующего радиус-вектора... Вы ничего в условиях не напутали? Или приведите условие в виде рисунка с принятыми вами обозначениями (главное - это взаимное расположение окружности и оси отсчёта).AndreTM
Спасибо. У меня получилась вот такая функция: [vba]
Код
Function sm1(n As Single, d As Single) As Double Dim i As Long sm1 = 0 For i = 1 To n sm1 = sm1 + (Abs(Cos(i - 1) * Application.Pi * 2 / n ) * d / 2)) ^ 2 Next End Function
[/vba] при использовании функции выдается ошибка: "#ССЫЛКА! Функция возвращает ошибку ссылки"
Спасибо. У меня получилась вот такая функция: [vba]
Код
Function sm1(n As Single, d As Single) As Double Dim i As Long sm1 = 0 For i = 1 To n sm1 = sm1 + (Abs(Cos(i - 1) * Application.Pi * 2 / n ) * d / 2)) ^ 2 Next End Function
[/vba] при использовании функции выдается ошибка: "#ССЫЛКА! Функция возвращает ошибку ссылки"Khorr
Вы пропустили одну скобочку... Вы не умеете делать дебаг? У меня вообще ваша "функция" не откомпилировалась - какой может быть вызов её? Скопипастить даже не можем?
Вы пропустили одну скобочку... Вы не умеете делать дебаг? У меня вообще ваша "функция" не откомпилировалась - какой может быть вызов её? Скопипастить даже не можем? AndreTM
Function sm1(n As Single, d As Single) As Double Dim i As Long sm1 = 0 For i = 0 To n - 1 sm1 = sm1 + (Cos(i * Application.Pi * 2 / n) * d / 2) ^ 2 Next End Function
[/vba] "Compile VBAProject" запустил вроде, но ошибка та же.
Вот посл текст: [vba]
Код
Function sm1(n As Single, d As Single) As Double Dim i As Long sm1 = 0 For i = 0 To n - 1 sm1 = sm1 + (Cos(i * Application.Pi * 2 / n) * d / 2) ^ 2 Next End Function
[/vba] "Compile VBAProject" запустил вроде, но ошибка та же.Khorr
Сообщение отредактировал Khorr - Среда, 29.01.2014, 16:16
Хотя-я... Друг мой, а в какой модуль вы поместили код данной функции? Случайно, не в модули листов или книги? И вообще, выражение "ошибка та же" говорит о чем-то только вам. Мы же не телепаты, отсюда не вилим...
Хотя-я... Друг мой, а в какой модуль вы поместили код данной функции? Случайно, не в модули листов или книги? И вообще, выражение "ошибка та же" говорит о чем-то только вам. Мы же не телепаты, отсюда не вилим...AndreTM
Потыкался немного, почему-то не вычисляется косинус [vba]
Код
Public Function cos1(a As Double) As Double cos1 = Cos(a * Application.Pi / 180) End Function
[/vba] как можно решить данную проблему? Прикрутил файлик с функциями. [p.s.]В закладке разработчик нажимал Visual Basic, там Insert Module и туда вставлял текст. Другие функции так работали [vba]
Код
Function Interp(A As Range, Arng As Range, Krng As Range) As Single Dim al, ks, i As Integer al = Arng.Value: ks = Krng.Value Do i = i + 1 Loop While al(i, 1) < A.Value If i = 1 Then Exit Function If al(i, 1) = A.Value Then Interp = ks(i, 1) Else Interp = (ks(i, 1) - ks(i - 1, 1)) / (al(i, 1) - al(i - 1, 1)) * _ (A.Value - al(i - 1, 1)) + ks(i - 1, 1) End If End Function
Потыкался немного, почему-то не вычисляется косинус [vba]
Код
Public Function cos1(a As Double) As Double cos1 = Cos(a * Application.Pi / 180) End Function
[/vba] как можно решить данную проблему? Прикрутил файлик с функциями. [p.s.]В закладке разработчик нажимал Visual Basic, там Insert Module и туда вставлял текст. Другие функции так работали [vba]
Код
Function Interp(A As Range, Arng As Range, Krng As Range) As Single Dim al, ks, i As Integer al = Arng.Value: ks = Krng.Value Do i = i + 1 Loop While al(i, 1) < A.Value If i = 1 Then Exit Function If al(i, 1) = A.Value Then Interp = ks(i, 1) Else Interp = (ks(i, 1) - ks(i - 1, 1)) / (al(i, 1) - al(i - 1, 1)) * _ (A.Value - al(i - 1, 1)) + ks(i - 1, 1) End If End Function
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо Cos() подставить ваш Cos1()
Что касается второго вопроса - то в чём проблема-то? Вы не знаете, как найти максимум? Хотя это и не нужно - у вас в условии сказано "первая точка находится на оси отсчета (косинус равен 1))". Уже в ней достигается максимум. Хотя, если у вас там военное время...
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо Cos() подставить ваш Cos1()
Что касается второго вопроса - то в чём проблема-то? Вы не знаете, как найти максимум? Хотя это и не нужно - у вас в условии сказано "первая точка находится на оси отсчета (косинус равен 1))". Уже в ней достигается максимум. Хотя, если у вас там военное время... AndreTM
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо Cos() подставить ваш Cos1()
Это не к задаче, а просто отдельно записанная функция (для проверки сделал), которая так же не считается. Угол задается в ячейке в градусах, а под косинусом пересчитывается в радианы(угол_в_градусах*пи/180)
Возможно, опять я непонятно выразился, но и это не к задаче , а на случай, что точка будет не на оси, а смещена на какой-либо угол.
Но беспокоит то, что косинус в функции к задаче не считается:( [p.s.]Сделал через Sub [vba]
Код
Public Sub cs() Dim Parametr1 As Double, Sh As Worksheet Set Sh = ThisWorkbook.Worksheets("Ëèñò1") Parametr1 = Sh.Range("Óãîë").Value Sh.Range("ðçò") = "???" r = Cos(Parametr1) Sh.Range("ðçò") = r End Sub
[/vba] косинус считает, а в функции нет. Но хотелось бы задачу реализовать в функции.
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо Cos() подставить ваш Cos1()
Это не к задаче, а просто отдельно записанная функция (для проверки сделал), которая так же не считается. Угол задается в ячейке в градусах, а под косинусом пересчитывается в радианы(угол_в_градусах*пи/180)
Возможно, опять я непонятно выразился, но и это не к задаче , а на случай, что точка будет не на оси, а смещена на какой-либо угол.
Но беспокоит то, что косинус в функции к задаче не считается:( [p.s.]Сделал через Sub [vba]
Код
Public Sub cs() Dim Parametr1 As Double, Sh As Worksheet Set Sh = ThisWorkbook.Worksheets("Ëèñò1") Parametr1 = Sh.Range("Óãîë").Value Sh.Range("ðçò") = "???" r = Cos(Parametr1) Sh.Range("ðçò") = r End Sub
[/vba] косинус считает, а в функции нет. Но хотелось бы задачу реализовать в функции.Khorr
Сообщение отредактировал Khorr - Четверг, 30.01.2014, 11:55
Дело в том, что COS1 в версиях, начиная с Excel 2007 воспринимается как адрес ячейки, отсюда конфликт имён. Дайте своей функции другое имя, например, coscos, и всё у Вас получится
Дело в том, что COS1 в версиях, начиная с Excel 2007 воспринимается как адрес ячейки, отсюда конфликт имён. Дайте своей функции другое имя, например, coscos, и всё у Вас получится Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816