Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Сентябрь 2019, 16:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Реализация макроса Подбор параметра - нужна помощь.  (Прочитано 7257 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vip-s
Новичок
*
Offline Offline

Сообщений: 4


« Стартовое сообщение: 12 Август 2014, 17:12 »

Добрый день. Возникла необходимость реализовать макросом функцию Подбора параметра в Openoffice.

Есть исходный vba код из ms office

"Sub GoalSeek()
   Range("I4").GoalSeek Goal:=Range("C14"), ChangingCell:=Range("C16")
End Sub
"
Каким образом эта функция реализуется в Oо?
Заранее спасибо.

Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 760


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 12 Август 2014, 19:54 »

Каким образом эта функция реализуется в Oо?
Смотрите пример в файле "Подбор параметра".

* Подбор параметра.ods (15.39 Кб - загружено 256 раз.)
Записан

vip-s
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #2: 12 Август 2014, 20:44 »

Пасиб большое, rami!
Записан
calc4fem
Форумчанин
***
Offline Offline

Сообщений: 278


« Ответ #3: 13 Август 2014, 00:20 »

присоединяюсь к спасибе.
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #4: 13 Август 2014, 08:45 »

Это все, конечно, хорошо.
Но как быть с уравнением 10*C2-10/C2=15
SeekGoal находит параметр 2, но тут же есть еще один параметр -0,5.
Как его найти?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 760


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 13 Август 2014, 10:02 »

Но как быть с уравнением 10*C2-10/C2=15
SeekGoal находит параметр 2, но тут же есть еще один параметр -0,5.
Как его найти?
10*C2-10/C2=15  это квадратное уравнение   =10*C2^2-15*C2-10   имеет два (или один или ни одного) корня, если в ячейку C2 вставить начальное значение меньше -0,5 , то найдётся первый корень(-0,5), а если больше -0,5 , то второй (2). В "чистом Подборе параметра" при выполнении условий итерации (максимальное число шагов или минимальное изменение) вычисления прекращаются и всегда выдаётся одно решение(если есть), но в макросе с помощью циклов и условий можно "заставить" "Подбор" искать дальше.
Записан

Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #6: 13 Август 2014, 10:22 »

если в ячейку C2 вставить начальное значение меньше -0,5 , то найдётся первый корень(-0,5)
Только почему-то не находится?
Записан
tagezi
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Finland
Сообщений: 793



WWW
« Ответ #7: 13 Август 2014, 10:41 »

Но как быть с уравнением
Корни уравнений лучше искать: Метод половинного деления, Метод хорд или Метод касательных (метод Ньютона).
Эти методы при правильной реализации позволяют не обращать внимание на степень и каноничность уравнения.
Минусом является то, что корни всегда находятся с определённым приближением и только на заданном участке.
Записан

(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 760


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 13 Август 2014, 10:46 »

Только почему-то не находится?
В предыдущем ответе немного ошибся, если меньше полусуммы корней (это 0.75), находится первый корень, а если больше, то второй.
Но вообще "Подбор параметра" используется не для решения задачи, а для подбора решения.
Записан

Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #9: 13 Август 2014, 10:53 »

В предыдущем ответе немного ошибся, если меньше полусуммы корней (это 0.75), находится первый корень, а если больше, то второй.
Завязывайте с теоретизированием.
Нужен работающий пример.
Но вообще "Подбор параметра" используется не для решения задачи, а для подбора решения.
Это одно и тоже.
« Последнее редактирование: 13 Август 2014, 11:14 от Helen » Записан
calc4fem
Форумчанин
***
Offline Offline

Сообщений: 278


« Ответ #10: 13 Август 2014, 18:16 »

В данном случае, когда корней несколько а уравнение простое - лучше записать аналитическую формулу в ячейке
а в целом для решения уравнений есть надстройки вроде этой http://extensions.services.openoffice.org/en/project/CmathOOoCAS
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #11: 13 Август 2014, 18:52 »

В данном случае, когда корней несколько а уравнение простое - лучше записать аналитическую формулу в ячейке
Есть простая задача для seekGoal: подобрать (найти) решения для уравнения, которое может иметь 2 (3,4,5,...) решений.
seekGoal находит только одно, но совсем не очевидно, что это решение именно то, которое и нужно.
Второе решение seekGoal найти не может никаким образом, хотя, возможно, именно это и есть то решение, которое нужно было найти.
Вопрос: на фига нам seekGoal???
Записан
calc4fem
Форумчанин
***
Offline Offline

Сообщений: 278


« Ответ #12: 13 Август 2014, 21:48 »

вот тут в коде метод Ньютона для решения тренсцендентного уравнения
(с конкретным уравнением и уравнением первой производной)

Код:
'Solve transcendental equation by Newton's method
'limits and initial value
Nmax=1e10 'max
N1=1 'min
N2=Nmax

'do cycle
Do While N2-N1>1 'go until get minimal difference
e1=log(100/(100-psi))/((4*N1)^mp+(1+r1)/(1-r1))+(fs/E)/((4*N1)^me+(1+r)/(1-r))-ea
e2=log(100/(100-psi))/((4*N2)^mp+(1+r1)/(1-r1))+(fs/E)/((4*N2)^me+(1+r)/(1-r))-ea
tan1=-4*mp*(4*N1)^(mp-1)*log(100/(100-psi))/((4*N1)^mp+(1+r1)/(1-r1))^2-4*me*(4*N1)^(me-1)*(fs/E)/((4*N1)^me+(1+r)/(1-r))^2
tan2=(e2-e1)/(N2-N1)

N1=N1-e1/tan1
N2=N2-e2/tan2
Loop

* fatigue(OpenOfficeWithMacro).ods (79.51 Кб - загружено 28 раз.)
« Последнее редактирование: 14 Август 2014, 00:36 от calc4fem » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!