Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос подсчета суммы косинусов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос подсчета суммы косинусов (Функции Function)
Макрос подсчета суммы косинусов
Khorr Дата: Среда, 29.01.2014, 14:20 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго дня. Не могу составить функцию для подсчета суммы абсолютных значений косинусов.
Собственно постановка задачи: Окружность делят на n равных частей (т.е. на окружность наносятся n точек, первая точка находится на оси отсчета( косинус равен 1)). Необходимо найти сумму квадратов отклонений (сумму квадратов косинусов) этих точек от оси.
Прошу помочь с написанием формулы в VBA, с вводимыми аргументами постараюсь разобраться.
[vba]
Код
For i = 1 To n
результат = сумма Abs(Cos((n - i) * Pi() * 360 / (n * 180))) * d / 2
[/vba]
вот что-то такое у меня получилось, где
n - кол-во точек, d - диаметр окружности.
Заранее благодарю всех небезучастных.


Сообщение отредактировал Khorr - Среда, 29.01.2014, 14:30
 
Ответить
СообщениеДоброго дня. Не могу составить функцию для подсчета суммы абсолютных значений косинусов.
Собственно постановка задачи: Окружность делят на n равных частей (т.е. на окружность наносятся n точек, первая точка находится на оси отсчета( косинус равен 1)). Необходимо найти сумму квадратов отклонений (сумму квадратов косинусов) этих точек от оси.
Прошу помочь с написанием формулы в VBA, с вводимыми аргументами постараюсь разобраться.
[vba]
Код
For i = 1 To n
результат = сумма Abs(Cos((n - i) * Pi() * 360 / (n * 180))) * d / 2
[/vba]
вот что-то такое у меня получилось, где
n - кол-во точек, d - диаметр окружности.
Заранее благодарю всех небезучастных.

Автор - Khorr
Дата добавления - 29.01.2014 в 14:20
AndreTM Дата: Среда, 29.01.2014, 14:41 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Если первая точка находится на "оси" и её косинус равен единице - то угол радиус-вектора точки, соответствующий этому косинусу - равен нулю. "Отклонение от оси" тогда тоже равно нулю (cos(0)=1). Для следующих точек величина "отклонения от оси" - это, по-видимому, расстояние до этой оси. Которое будет равно не косинусу, а синусу угла соответствующего радиус-вектора... Вы ничего в условиях не напутали? Или приведите условие в виде рисунка с принятыми вами обозначениями (главное - это взаимное расположение окружности и оси отсчёта).


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеЕсли первая точка находится на "оси" и её косинус равен единице - то угол радиус-вектора точки, соответствующий этому косинусу - равен нулю. "Отклонение от оси" тогда тоже равно нулю (cos(0)=1). Для следующих точек величина "отклонения от оси" - это, по-видимому, расстояние до этой оси. Которое будет равно не косинусу, а синусу угла соответствующего радиус-вектора... Вы ничего в условиях не напутали? Или приведите условие в виде рисунка с принятыми вами обозначениями (главное - это взаимное расположение окружности и оси отсчёта).

Автор - AndreTM
Дата добавления - 29.01.2014 в 14:41
Khorr Дата: Среда, 29.01.2014, 14:59 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вот набросал, необходимо искать отклонения от оси Y, а первая точка лежит на оси X
[p.s.]Извиняюсь, если выражаю мысли не понятно
К сообщению приложен файл: okr.pdf (48.9 Kb)


Сообщение отредактировал Khorr - Среда, 29.01.2014, 15:03
 
Ответить
СообщениеВот набросал, необходимо искать отклонения от оси Y, а первая точка лежит на оси X
[p.s.]Извиняюсь, если выражаю мысли не понятно

Автор - Khorr
Дата добавления - 29.01.2014 в 14:59
AndreTM Дата: Среда, 29.01.2014, 15:28 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Примерно так:
[vba]
Код
    результат = 0
      For i = 1 To n
          результат = результат + (Abs(Cos((i - 1) * Application.Pi * 2 / n)) * d / 2) ^ 2
      Next
[/vba]
И можем упростить:
[vba]
Код
    результат = 0
     For i = 0 To n - 1
         результат = результат + (Cos(i * Application.Pi * 2 / n) * d / 2) ^ 2
     Next
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 29.01.2014, 15:32
 
Ответить
СообщениеПримерно так:
[vba]
Код
    результат = 0
      For i = 1 To n
          результат = результат + (Abs(Cos((i - 1) * Application.Pi * 2 / n)) * d / 2) ^ 2
      Next
[/vba]
И можем упростить:
[vba]
Код
    результат = 0
     For i = 0 To n - 1
         результат = результат + (Cos(i * Application.Pi * 2 / n) * d / 2) ^ 2
     Next
[/vba]

Автор - AndreTM
Дата добавления - 29.01.2014 в 15:28
zmur2004 Дата: Среда, 29.01.2014, 15:35 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
в вашем рисунке ошибка отклонение от y будет cos(90-а)*r
 
Ответить
Сообщениев вашем рисунке ошибка отклонение от y будет cos(90-а)*r

Автор - zmur2004
Дата добавления - 29.01.2014 в 15:35
Khorr Дата: Среда, 29.01.2014, 15:44 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010

Спасибо. У меня получилась вот такая функция:
[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
Дата добавления - 29.01.2014 в 15:44
Khorr Дата: Среда, 29.01.2014, 15:46 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
cos(90-а)*r

а разве это не sin(a) и тогда это отклонение от Х, или я в тригонометрии совсем запутался?
 
Ответить
Сообщение
cos(90-а)*r

а разве это не sin(a) и тогда это отклонение от Х, или я в тригонометрии совсем запутался?

Автор - Khorr
Дата добавления - 29.01.2014 в 15:46
AndreTM Дата: Среда, 29.01.2014, 15:50 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Вы пропустили одну скобочку... Вы не умеете делать дебаг?
У меня вообще ваша "функция" не откомпилировалась - какой может быть вызов её?
Скопипастить даже не можем? :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеВы пропустили одну скобочку... Вы не умеете делать дебаг?
У меня вообще ваша "функция" не откомпилировалась - какой может быть вызов её?
Скопипастить даже не можем? :)

Автор - AndreTM
Дата добавления - 29.01.2014 в 15:50
Khorr Дата: Среда, 29.01.2014, 16:00 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вот посл текст:
[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 - Среда, 29.01.2014, 16:16
 
Ответить
СообщениеВот посл текст:
[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
Дата добавления - 29.01.2014 в 16:00
AndreTM Дата: Среда, 29.01.2014, 17:07 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
но ошибка та же
Нету здесь ошибок. Не-ту. У меня ведь работает...

Хотя-я... Друг мой, а в какой модуль вы поместили код данной функции? :)
Случайно, не в модули листов или книги? :D
И вообще, выражение "ошибка та же" говорит о чем-то только вам. Мы же не телепаты, отсюда не вилим...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
но ошибка та же
Нету здесь ошибок. Не-ту. У меня ведь работает...

Хотя-я... Друг мой, а в какой модуль вы поместили код данной функции? :)
Случайно, не в модули листов или книги? :D
И вообще, выражение "ошибка та же" говорит о чем-то только вам. Мы же не телепаты, отсюда не вилим...

Автор - AndreTM
Дата добавления - 29.01.2014 в 17:07
Khorr Дата: Четверг, 30.01.2014, 07:29 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
а в какой модуль вы поместили код данной функции?


А можно с этого места поподробнее? :)

Потыкался немного, почему-то не вычисляется косинус
[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]
вот пример
К сообщению приложен файл: 123.xlsm (17.6 Kb)


Сообщение отредактировал Khorr - Четверг, 30.01.2014, 10:00
 
Ответить
Сообщение
а в какой модуль вы поместили код данной функции?


А можно с этого места поподробнее? :)

Потыкался немного, почему-то не вычисляется косинус
[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]
вот пример

Автор - Khorr
Дата добавления - 30.01.2014 в 07:29
Khorr Дата: Четверг, 30.01.2014, 08:22 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А возможно сделать еще 1 функцию, чтобы она выводила максимальное значение косинуса?
[vba]
Код
For i = 0 To n - 1
результат = максимальное значение (Cos(i * Application.Pi * 2 / n) * d / 2)
[/vba]
 
Ответить
СообщениеА возможно сделать еще 1 функцию, чтобы она выводила максимальное значение косинуса?
[vba]
Код
For i = 0 To n - 1
результат = максимальное значение (Cos(i * Application.Pi * 2 / n) * d / 2)
[/vba]

Автор - Khorr
Дата добавления - 30.01.2014 в 08:22
AndreTM Дата: Четверг, 30.01.2014, 11:25 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо Cos() подставить ваш Cos1() :)

Что касается второго вопроса - то в чём проблема-то? Вы не знаете, как найти максимум? Хотя это и не нужно - у вас в условии сказано "первая точка находится на оси отсчета (косинус равен 1))". Уже в ней достигается максимум. Хотя, если у вас там военное время... :D


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНичего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо Cos() подставить ваш Cos1() :)

Что касается второго вопроса - то в чём проблема-то? Вы не знаете, как найти максимум? Хотя это и не нужно - у вас в условии сказано "первая точка находится на оси отсчета (косинус равен 1))". Уже в ней достигается максимум. Хотя, если у вас там военное время... :D

Автор - AndreTM
Дата добавления - 30.01.2014 в 11:25
Khorr Дата: Четверг, 30.01.2014, 11:49 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо 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 - Четверг, 30.01.2014, 11:55
 
Ответить
Сообщение
Ничего не понял с вашим "отдельным" косинусом (файл-пример не читал). Вы там у себя углы указываете в градусах, что ли? И к решаемой задаче эта функция не имеет никакого отношения - в ней нельзя вместо 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
Дата добавления - 30.01.2014 в 11:49
AndreTM Дата: Четверг, 30.01.2014, 11:57 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
на случай, что точка будет не на оси, а смещена на какой-либо угол

[vba]
Код
    максимум = -1
     For i = 1 To n - 1
         максимум = WorksheetFunction.Max(максимум, Cos(i * Application.Pi * 2 / n))
     Next
[/vba]
Или, если нужен максимум по величине, то:
[vba]
Код
    максимум = 0
     For i = 1 To n - 1
         максимум = WorksheetFunction.Max(максимум, Abs(Cos(i * Application.Pi * 2 / n)))
     Next
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
на случай, что точка будет не на оси, а смещена на какой-либо угол

[vba]
Код
    максимум = -1
     For i = 1 To n - 1
         максимум = WorksheetFunction.Max(максимум, Cos(i * Application.Pi * 2 / n))
     Next
[/vba]
Или, если нужен максимум по величине, то:
[vba]
Код
    максимум = 0
     For i = 1 To n - 1
         максимум = WorksheetFunction.Max(максимум, Abs(Cos(i * Application.Pi * 2 / n)))
     Next
[/vba]

Автор - AndreTM
Дата добавления - 30.01.2014 в 11:57
Khorr Дата: Четверг, 30.01.2014, 12:04 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
2 AndreTM
Спасибо за решение с максимумом :)
Но как проблему с косинусом решить? :(
 
Ответить
Сообщение2 AndreTM
Спасибо за решение с максимумом :)
Но как проблему с косинусом решить? :(

Автор - Khorr
Дата добавления - 30.01.2014 в 12:04
Pelena Дата: Четверг, 30.01.2014, 12:56 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 19196
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
как проблему с косинусом решить?

Дело в том, что COS1 в версиях, начиная с Excel 2007 воспринимается как адрес ячейки, отсюда конфликт имён. Дайте своей функции другое имя, например, coscos, и всё у Вас получится :)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
как проблему с косинусом решить?

Дело в том, что COS1 в версиях, начиная с Excel 2007 воспринимается как адрес ячейки, отсюда конфликт имён. Дайте своей функции другое имя, например, coscos, и всё у Вас получится :)

Автор - Pelena
Дата добавления - 30.01.2014 в 12:56
Khorr Дата: Четверг, 30.01.2014, 13:06 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Дайте своей функции другое имя, например, coscos, и всё у Вас получится

Благодарю. Очень помогли :)
 
Ответить
Сообщение
Дайте своей функции другое имя, например, coscos, и всё у Вас получится

Благодарю. Очень помогли :)

Автор - Khorr
Дата добавления - 30.01.2014 в 13:06
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос подсчета суммы косинусов (Функции Function)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!