Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2009, 18:36   #1
GoreProgrammist
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 52
Печаль Написание пользовательской функции.

Нужно написать функцию которая считает полином Лежандра, по заданным n и x. Сама функция написана, как сделать что бы в Excel'e функция считалась от двух значений

например в ячейку А1 вбивать "=функция(х1,х2)"
GoreProgrammist вне форума Ответить с цитированием
Старый 13.07.2009, 18:38   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сама функция написана
Так выложите тогда её код (на VBA)
Лучше вместе с файлом, с ячеек которого она должна быть доступна.
EducatedFool вне форума Ответить с цитированием
Старый 13.07.2009, 18:48   #3
GoreProgrammist
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Так выложите тогда её код (на VBA)
Лучше вместе с файлом, с ячеек которого она должна быть доступна.
Она должна быть доступна не с ячеек, надо просто в строке формул писать =PlnmL(n,x)
и чтобы в ячейке ответ выдавался.


Код:
Function PlnmL(n As Variant, x As Variant) As Double
    Dim Result As Double
    Dim a As Variant
    Dim b As Variant
    Dim i As Long
     Result = 1
    a = 1
    b = x
    If n = 0 Then
        Result = a
        PlmnL = Result
        Exit Function
    ElseIf n = 1 Then
        Result = b
        PlmnL = Result
        Exit Function
    Else
    For i = 2 To n Step 1
        Result = ((2 * i - 1) * x * b - (i - 1) * a) / i
        a = b
        b = Result
    Next i
    PlmnL = Result
End Function

Последний раз редактировалось GoreProgrammist; 13.07.2009 в 18:55.
GoreProgrammist вне форума Ответить с цитированием
Старый 13.07.2009, 18:55   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А в чём проблема?

Посмотри формулы в желтых ячейках:

Код:
  Ячейка: C1      Формула  (стиль A1):   =PlnmL(A1;B1)
                  Формула  (стиль R1C1): =PlnmL(RC[-2];RC[-1])

  Ячейка: E1      Формула  (стиль A1):   =PlnmL(4;6)
                  Формула  (стиль R1C1): =PlnmL(4;6)
EducatedFool вне форума Ответить с цитированием
Старый 13.07.2009, 19:05   #5
GoreProgrammist
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 52
По умолчанию

Спасибо, но суть проблемы в том, что данные должны вводиться в строку формулы, а не считываться из ячеек. То есть в ячейке вводим например =PlnmL(1;10), и получаем ответ.
GoreProgrammist вне форума Ответить с цитированием
Старый 13.07.2009, 19:08   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
То есть в ячейке вводим например =PlnmL(1;10), и получаем ответ.
Вот именно это я и сделал в столбце E
Если бы Вы внимательнее изучили файл-пример, вопросов бы не было...
EducatedFool вне форума Ответить с цитированием
Старый 13.07.2009, 19:22   #7
GoreProgrammist
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вот именно это я и сделал в столбце E
Если бы Вы внимательнее изучили файл-пример, вопросов бы не было...
У меня тот же самый код не работает: выдаёт 0 и первым способом, и вторым, поэтому и спрашиваю.
GoreProgrammist вне форума Ответить с цитированием
Старый 13.07.2009, 19:27   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
У меня тот же самый код не работает: выдаёт 0 и первым способом, и вторым
У Вас не тот же самый код...

Сравните имя функции в разных строках своей "функции":
Function PlnmL(n As Variant, x As Variant) As Double
PlmnL = Result

В файле-примере я исправил эти мелочи.
EducatedFool вне форума Ответить с цитированием
Старый 13.07.2009, 19:35   #9
GoreProgrammist
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
У Вас не тот же самый код...

Сравните имя функции в разных строках своей "функции":
Function PlnmL(n As Variant, x As Variant) As Double
PlmnL = Result

В файле-примере я исправил эти мелочи.
Не заметил, теперь работает.. спасибо!
GoreProgrammist вне форума Ответить с цитированием
Старый 15.07.2009, 15:28   #10
GoreProgrammist
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 52
По умолчанию

я взялся написать присоединённый полином Лежандра в виде второго модуля, использующего результат вычисления первого модуля: PlnmL(n,x) и набросал следующий код
Код:
Public Function PPlnmL(n As Variant, m As Variant, x As Variant) As Double
Dim a As Double
Dim Result As Double
Dim i As Long
a = -m
For i = 1 To m - 1 Step 1
a = a * (-m - 1)
m = m + 1
Next i
Result = a * x ^ (-2 * m)
PPlnmL = ((1 - x ^ 2) ^ (m / 2)) * Result * PlnmL(n, x)
End Function
в ячейке возвращается #Знач.. В чём может быть проблема?
GoreProgrammist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
набор списках в пользовательской форме, adonis Microsoft Office Excel 4 09.04.2009 14:03
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57
файл пользовательской справки Antonio85 Microsoft Office Access 1 23.01.2009 21:06
Получение пользовательской функцией данных с закрытой книги KozakMamaj Microsoft Office Excel 18 22.10.2008 06:55
Вопрос про правильное написание функции AndreichSB Microsoft Office Excel 6 25.12.2006 19:27