Математический форум Math Help Planet
Обсуждение и решение задач по математике, физике, химии, экономике Теоретический раздел |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
новый онлайн-сервис число, сумма и дата прописью |
|
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Страница 2 из 3 |
[ Сообщений: 24 ] | На страницу Пред. 1, 2, 3 След. |
|
Автор | Сообщение | |
---|---|---|
Exzellenz |
|
|
Скопировал вашу базу данных в Excel, написал "теоретическую" формулу [math]y=\frac{1}{ax+b}+c,[/math] запустил свою программу. Результат: [math]a \approx -5,2624; b \approx -2,6366; c \approx -0,0001646; \sigma \approx 0,0045[/math] Что касается "Так в этом собственно и вопрос." Тут нужно различать две разные постановки задачи: 1) Аппроксимация / интерполяция данных. Тут без разницы - локальный минимум невязки, или глобальный, если данные аппроксимированы хорошо. 2) Определение "истинных" значений параметреов. Тут все плохо. Если параметров мало (2-3), то глобальный минимум отыскивается достаточно быстро. Но если их много, с ростом их числа задача становится некорректной (плохо обусловленной), т.е. малые вариации в базе данных дают сколь угодно большой разброс в значениях параметров, даже если отыскать глобальный минимум. Хотя как его искать - непонятно. |
||
Вернуться к началу | ||
За это сообщение пользователю Exzellenz "Спасибо" сказали: ipgmvq |
||
ipgmvq |
|
|
Exzellenz
Спасибо большое за подробное пояснение и проверку моего датасета у себя в VBA. Хорошая программа. |
||
Вернуться к началу | ||
Exzellenz |
|
|
Да на здоровье!
Если хотите, могу выложить вам текст VBA-программы. Но предупреждаю заранее: программа доморощенная, написана на скорую руку, и ее нужно запускать несколько раз, контролируя внешний вид графика и величину невязки – до тех пор, пока невязка не перестанет убывать. Так что прошу строго не судить. Для меня главное, что она работает и выдает результаты, которые меня устраивают. |
||
Вернуться к началу | ||
ipgmvq |
|
|
Exzellenz писал(а): Если хотите, могу выложить вам текст VBA-программы. Если Вы её сами написали, то конечно покажите. Очень интересно. Я в VBA слаб, но надеюсь разберусь. |
||
Вернуться к началу | ||
Exzellenz |
|
|
Прежде, чем вызвать программу, нужно маркировать все клетки таблицы, содержащие значения параметров (которые нужно вариировать); а последней маркировкой должна быть клетка таблицы с невязкой.
Клетки с параметрами можно маркировать в любом порядке, причем эти клетки не обязательно должны лежать в односвязной области. Итак, текст программы: Public Sub Solution() Dim Dis As Double, Bereiche As Long, Zellen As Long, i As Integer, j As Integer, Davor() As Double, Zelle As Range Dim Z As Integer, S As Integer, Danach() As Double, W As Single, dW As Single, AltDis As Double, Wert() As Double Dim k As Integer Bereiche = Selection.Areas.Count j = 0 For i = 1 To Bereiche - 1 For Each Zelle In Selection.Areas(i) j = j + 1 ReDim Preserve Davor(j) ReDim Preserve Danach(j) ReDim Wert(j) S = Zelle.Column Z = Zelle.Row Davor(j) = Cells(Z, S).Value ' Запомнить параметры до оптимизации Call Optimizer(Z, S) Danach(j) = Cells(Z, S).Value ' Параметры после первой оптимизации Next Zelle Next i W = 0 For i = 1 To j: W = W + (Davor(i) - Danach(i)) ^ 2: Next i W = Sqr(W): dW = W Dis = ActiveCell.Value Do Do AltDis = Dis k = 0 For i = 1 To Bereiche - 1 For Each Zelle In Selection.Areas(i) k = k + 1 S = Zelle.Column Z = Zelle.Row Wert(k) = Cells(Z, S).Value + dW * (Danach(k) - Davor(k)) / W Cells(Z, S).Value = Wert(k) Next Zelle Next i Dis = ActiveCell.Value Loop While Dis < AltDis dW = -dW / 3 Loop While Abs(dW) > 0.000000001 End Sub --------------------------------------------------------------------------------------------- Public Sub Optimizer(Z, S) Dim Dis As Double, Wert As Double, dW As Double, AltDis As Double Dis = ActiveCell.Value Wert = Cells(Z, S).Value dW = Wert / 10 Do Do AltDis = Dis Wert = Wert + dW Cells(Z, S).Value = Wert Dis = ActiveCell.Value Loop While Dis < AltDis dW = -dW / 3 Loop While Abs(dW) > 0.000000001 End Sub К сожалению, местный текстовый редактор игнорирует отступы в начале строки, как и множественные пробелы. |
||
Вернуться к началу | ||
За это сообщение пользователю Exzellenz "Спасибо" сказали: ipgmvq |
||
ipgmvq |
|
|
Спасибо большое за код! Отступы расставил. С немецкого перевел. Соориентируюсь, как выделять области перед запуском правильно, и испытаю.
|
||
Вернуться к началу | ||
Exzellenz |
|
|
Да пользуйтесь на здоровье!
А чего там было переводить с немецкого? |
||
Вернуться к началу | ||
Exzellenz |
|
|
Ну как, сориентировались? Программа работает как надо?
|
||
Вернуться к началу | ||
ipgmvq |
|
|
Exzellenz писал(а): А чего там было переводить с немецкого? Когда понимаешь название переменной, легче по ходу программы ориентироваться/помнить, где что лежит. Exzellenz писал(а): Ну как, сориентировались? Программа работает как надо? Да, спасибо! Я делаю на листе зону с параметрами и зону таблицы, создаю справа график, чтобы видеть, что происходит, (как на Вашем скриншоте), выделяю две клетки с параметрами и потом одну клетку, где лежит сумма квадратов ошибок (она вероятно поэтому остается "активной", и на это расчитывает программа). И запускаю. Если задать очень неподходящие изначальные параметры для этой конкретной модели, что мы обсуждали, то можно воспроизвести то, что кажется зависанием Excel (хотя возможно он просто очень долго считает и нужно ждать). В более благоприятных условиях он подбирает более хорошие параметры, чем изначальные. Зачастую повтороный запуск макроса после этого генерит ещё более хорошие параметры (меньшую сумму квадратов ошибок). Потом повторный запуск генерит ещё более хорошие параметры. Т.к. синтаксис Visual Basic для меня несколько непривычен (хотя я понимаю, что похожий необычный синтаксис нашёл свой путь и в более современные языки такие как Julia, и в Ruby) я не сразу улавливаю, что происходит. Поэтому я отдельно ещё пройдусь по программе, чтобы полностью понять её логику и до конца понять, почему она работает именно так. |
||
Вернуться к началу | ||
Exzellenz |
|
|
ОК, будут вопросы - обращайтесь.
|
||
Вернуться к началу | ||
На страницу Пред. 1, 2, 3 След. | [ Сообщений: 24 ] |
Похожие темы | Автор | Ответы | Просмотры | Последнее сообщение |
---|---|---|---|---|
Регрессионный анализ | 2 |
421 |
14 ноя 2014, 19:34 |
|
Регрессионный анализ | 2 |
377 |
13 май 2017, 18:47 |
|
Регрессионный анализ | 1 |
417 |
19 мар 2015, 17:08 |
|
Множественный регрессионный анализ | 0 |
300 |
10 май 2014, 12:04 |
|
Регрессионный анализ разных значений
в форуме Численные методы |
2 |
349 |
11 апр 2018, 16:12 |
|
Линейная регрессия(Регрессионный анализ) | 7 |
632 |
27 окт 2016, 12:44 |
|
Корреляционно-регрессионный анализ запасов | 5 |
430 |
10 ноя 2017, 15:11 |
|
МНК и регрессионный анализ. Не отображаются картинки формул | 1 |
793 |
18 дек 2014, 10:01 |
|
Регрессионный анализ. Понять задание. Выбрать переменные. | 0 |
313 |
20 дек 2015, 22:14 |
|
Метод конечных разностей нелинейный PDE
в форуме Дифференциальное исчисление |
0 |
430 |
04 апр 2015, 23:17 |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |