Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars., Извлечение данных из ComboBox
 
Цитата
МатросНаЗебре написал: Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars.
Код
Type:=msoControlComboBox

Я сделал две вспомогательные процедуры, одна считывает значение ComboBox в глобальную переменную, вторая запускается кнопкой и использует эту переменную в качестве параметра:
Код
Dim OrderBox As Integer

Private Sub ApproxRead()
   OrderBox = Application.CommandBars("Approximation").Controls(2).ListIndex
End Sub

Private Sub ApproxOrder()
    Call Polynomial(OrderBox + 2)
End Sub
Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars., Извлечение данных из ComboBox
 
Да, благодарю!
.ListIndex работает!
Я его пробовал ранее, не пошло, оказалось проблема в синтаксической ошибке..
Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars., Извлечение данных из ComboBox
 
Всем здравия!

Надстройкой создается панель инструментов и на неё добавляются кнопки и раскрывающийся список, например, так:

Код
Sub Auto_open()
Панель_App
End Sub


Код
Public Sub Панель_App()

  Const MyBarName As String = "Approximation"
  Dim myBar As CommandBar, FindBar As Boolean
  FindBar = False
  
  'Проверка наличия панели среди всех панелей
  For Each myBar In Application.CommandBars
    If myBar.Name = MyBarName Then
        FindBar = True
        Exit For
    End If
  Next
   
  'Если панель не найдена, создать её и отобразить
  If Not FindBar Then
    Set myBar = Application.CommandBars.Add(Name:=MyBarName, Temporary:=False)
      'End If
      myBar.Visible = True
    
    
      'Создать на панели кнопки
    Set myControl = Application.CommandBars(myBar.Index).Controls.Add(Type:=msoControlButton, Before:=1)
    With myControl
        .Style = ButtonStyle
        .FaceId = 422
        .Caption = ""
        .TooltipText = ""
        .OnAction = "App1"
    End With

    
    Set myControl = Application.CommandBars(myBar.Index).Controls.Add(Type:=msoControlComboBox, Before:=2)
    With myControl
        .Caption = "Order"
       '.ControlTipText = ""
        .AddItem Text:="1 вариант", Index:=1
        .AddItem Text:="2 вариант", Index:=2
        .DropDownLines = 3
        .DropDownWidth = 65
        .ListHeaderCount = 0
        .OnAction = "App2"
        .ListIndex = 5
        '.Value = "1 вариант" ', Index:=1
  
    End With

 End If
End Sub


Но никак не могу нормально извлечь данные из раскрывающегося списка.

Цель: по нажатию кнопки вызывается процедура с параметром, извлеченным из раскрывающегося списка.
Точнее, по нажатию кнопки вызывается вспомогательная процедура (без параметра), которая, в свою очередь, должна получить данные из ComboBox.
И вот здесь затык.
Пытался по .OnAction вызывать вспомогательную процедуру и из неё получить данные ComboBox, но тоже не удалось.
С ComboBox на формах никаких проблем нет, а что делать с CommandBars, прошу подсказать.

В сети очень мало информации о ComboBox на CommandBars, если помножить это на мой малый опыт в VBA (немного программировал более 10 лет назад), получается туго.
Прошу помочь.
Изменено: Юрий М - 15.12.2021 13:23:44
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Урря!
Заработало!!!
Всем благодарю!

Не знаю, на всех ли системах это сработает, но сейчас у меня работает без проблем, будем пробовать дальше.
Итак, по порядку.

Цитата
МатросНаЗебре написал:
А так?

Попробовал, при запуске создаётся вспомогательный файл с графиком, висит ровно минуту, после чего закрывается и... всё..((
Если тормознуть перед считыванием, то на графике появляется уравнение тренда и, после продолжения, всё нормально.
То есть, фактически, ничего радикально не поменялось.

Цитата
tutochkin написал:
Вы по ссылке перешли? Тогда смотрите мой пост с прицепленным файлом... Там собственно и макрос и его применение.
Как я уже сказал, так глубоко я не копал, глянул по диагонали.

А вот из этого сообщения файл Копия Сравнение способов аппроксимации 6 пор (урезан)-2.xlsm (283.21 КБ) показал интересный результат - в нём извлечение коэффициентов работает без проблем!
При первом взгляде это был код МатросаНаЗебре без каких-либо серьёзных изменений, но он работал!
И он работает при переносе в другие файлы.
Отличие оказалось в том, что у Вас перед считыванием уравнения DoEvents повторяется дважды!!
DoEvents  я изначально проверял, но у меня и мысли не было попробовать его поставить дважды.
:D  :D  :D

Ещё раз большое спасибо!!


Теперь осталось отшлифовать мелочи для удобства (кнопки на панель, возможность задания области исходных данных выделением и автоматическим поиском границ диапазона и т.п.).


Цитата
tutochkin написал:
Ну вот пример определения коэффициентов влоб. Заметьте какие порядки получаются для полинома 5-й степени просто при Х и У до 10ки и 10 точках. Можете подставить свои значения и своё количество точек...

Пробовал подставлять числа из своей выборки, ничего фатального не заметил.
Но я пока только 10 точек ставил, позже проверю на большой выборке.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
tutochkin написал:
Не поленился, повторно скачал Ваш файлик, вставил тудой макрос и собственно получил:

Не знаю, почему так, но я неоднократно уже пробовал, всё отлично.
Обратил внимание только, Вас в качестве децимального разделителя точка, у меня запятая.

Цитата
tutochkin написал:
В данном случае проблема не в методике расчёта а в исходных данных. Если Х имеет порядок 10^7, и аппроксимируется полиномом 6-й степени (т.е. 10^7^6) то возникают просто проблемы с памятью
Это известное предположение.
Я писал здесь, что проверял его, уменьшал Х на 6 порядков, всё совпало до 7-8-го знака, изменились только порядки. Общая форма кривой ПХ и, соответственно, ошибки аппроксимации, в точности совпали.
А вообще, емнип, Double подразумевает числа до 10Е+308 примерно при 16 полных разрядах.  По моему, должно хватить.. )))

Цитата
tutochkin написал:
Вы по ссылке перешли? Тогда смотрите мой пост с прицепленным файлом... Там собственно и макрос и его применение.
Я не копал настолько глубоко, т.к. содержание сообщения ясно говорило о том, что ответа на мой вопрос в содержимом нет, только альтернативное решение.
Буду иметь в виду.

Цитата
МатросНаЗебре написал:
А так?
Благодарю, завтра посмотрю.
Интересный цикл..

Цитата
tutochkin написал:
А формат такого вида:
Как я заметил, линия тренда выдаёт максимум 14 знаков, если поставить больше - остальные будут нули.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
МатросНаЗебре написал:
Иногда не срабатывал. В этом случае останавливал код перед считыванием, тогда работал. Глюк какой-то.

Как я предполагаю, свойство .DataLabel.Text, также, как и .DataLabel.FormulaR1C1, можно считать только с уже существующего объекта, а в процессе выполнения макроса он ещё не создан, и возникает проблема с синхронизацией..
Причем простые временные задержки или Do events не помогают...  :cry:

Это всё не очень страшно, уже в таком виде код можно использовать, но хочется добиться работы в одно нажатие..
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
Юрий М написал:
alenco ,  вопрос по смене отображаемого имени не праздный: меня его в пределах одной темы, Вы вносите неразбериху.

Цитата
tutochkin написал:
Я не против ника, просто общался с одним, тут влезает другой... Потребовалось время чтобы понять.

Извиняюсь, не подумал.

Цитата
tutochkin написал:
В третьем посте ссылка на решение аналогичной проблемы  А вы по ней даже не удосужились пройти
Сейчас посмотрел ещё раз.
Извините, но я наверное, слепой, т.к. kus_interp не вижу нигде...
Да и поиск не находит.

Цитата
tutochkin написал:
Только макрос Матроса в ячейку начиная с Е заливает результат... А то что вы что то куда то скопировали - это ваше личное
А для Вас сложно поменять адрес ячейки в макросе?
Уверен, что нет.
Или Вы думаете, что я не в состоянии это сделать?
Я сделал, как мне удобно. И, поверьте, пишет это именно макрос.

Вот с безостановочным выполнением есть заморочка, не отрицаю, аналогично и моему, ранее приведённому примеру.
И обновлять все элементы пробовал, и Select, и Do evenrs, но увы, безупречной работы не добился.

Макросы Матроса построены значительно грамотнее моего (я писал на VBA 10-13 лет назад, и напрочь всё забыл), но с его кодом на моей системе та же проблема..
Возможно, Вы что-то предложите?

Прошу Вас, пожалуйста, не предлагать кусочно-линейную, даже если она и даёт в каких-то случаях хороший результат.
Я про неё знаю и кое-где использовал ранее.
Есть куча оборудования, ПО для МК и рабочих станций, документов, где уже есть то, что есть, то есть полиномиальная обработка, и менять это - страшный гемор и затраты.
Мне сейчас нужно добить методику расчета коэффициентов полиномов 5-7 порядков, чтобы было удобно и результат не хуже, чем в Матлабе/Октаве или на линии тренда.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
МатросНаЗебре написал:
Вариант, вычисляющий коэффициенты через решение системы линейных уравнений. Точность хуже, чем у метода, через уравнение из линии тренда.
Подскажите, а у Вас вариант с линией тренда нормально выполняется, не требует "плясок с бубном" перед считыванием уравнения?  
Изменено: alenco - 09.12.2021 13:31:58
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
tutochkin написал:
Читайте не через строчку - давал вариант. Урезанный правда, только с линейным вариантом, но давал.

Простите великодушно, я и Яндекс не местные и не знакомы с вашими трудами.
Можно нам прямую ссылку?




Цитата
tutochkin написал:
У как всё запущено... А ещё на глаз погрешности определяете.
Как у Вас интересно..
А я вот не смог воспроизвести ваш эксперимент, у меня, к сожалению счастью, всё совпадает до последнего знака!


Так у кого что запущено?
;)
А Вы всё о глазах и о глазах...
Я уже давал комментарий, что считаю погрешностью аппроксимации, не поленюсь, процитирую:

Цитата
Алексей Назаров написал:
Под погрешностью аппроксимации я имею в виду максимальную разницу между любой точкой экспериментальных данных и соответствующей точкой, вычисленной по полиному, построенному по этим данным.

Конечно, это не стандартизованная методика, но вполне адекватная и имеющая право на жизнь.
Хотя, слово методика слишком громкое для модуля разности двух чисел.
Можно ещё и дисперсию посчитать.
И, обратите внимание, я написал "...я имею в виду...".

Если Вы несогласны и знаете, как поступить лучше - пожалуйста, поделитесь, а не тыкайте голословно в глаз.


Цитата
tutochkin написал:
А зачем сменили Имя-фамилию на ник?


А Вы почему пользуетесь ником?  ;)

Я уже писал, что неместный, я только-только зарегистрировался на этом форуме, и не ожидал, что вместо логина будет отображаться имя и фамилия. Зашёл в настройки профиля и снял галочку.  
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
tutochkin написал:
И Вас ничего не смущает?
Кроме малого количества значащих цифр на вашем скрине - ничего.
Я использую 14.

Если Вы про необходимость остановки кода - я верю, что эта проблема будет решена.
Изменено: alenco - 09.12.2021 11:31:18
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
tutochkin написал:
Я так и не увидел как Вы её считаете. Судя по приложенному файлу - контроль отклонений в заданных точках.
Судя по скрину, всё увидели и даже для своего варианта посчитали?

Цитата
tutochkin написал:
Ну и где отклонения при кусочной интерполяции?
Не знаю, с функцией kus_interp я не знаком.
А всё как раз и определяется алгоритмом её работы, количеством точек и параметрами исходной выборки.

Я когда-то пробовал КЛ на своих выборках, при небольшом количестве опорных точек (по моему, 10 или 20, уже не помню) она дала приличную погрешность. Дальше не заморачивался, остановился полностью на полиномах, по образцу предприятий, с кем мы работаем.
Изменено: alenco - 09.12.2021 11:24:26
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
МатросНаЗебре, большое спасибо за (почти) правильно работающий код!

У меня вылезает ошибка 9 (Subscript out of range) на строке
Код
                If brr(1) = "" Then brr(1) = "1"
После замены формата числа на экспоненциальный
Код
.DataLabel.NumberFormat = "0,00000000000000E+00"
ошибка пропала, но и признаки работы ограничились перерисовкой экрана...

Попробовал тормознуть код перед  
Код
GetDataLabelText = .DataLabel.Text
И... вуаля!
Всё (почти) отлично работает!!!!  :D


Осталась мелочь - обойтись без остановки кода.

Такая проблема обсуждалась, например, здесь, здесь, попадалось и на других форумах, но панацеи никто не знает.
Многое зависит от системы, версии Офиса. ((
Изменено: alenco - 09.12.2021 11:00:48
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
О, вроде получилось загрузить файл на 260 кБ, а ранее выше 100 не получалось.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
написал:
А Вы?  Как вы таки определили погрешность то в промежуточных точках? Погрешность это (по определению) отклонение измеренного/расчётного значения от истинного. Вне базовых точек вы истинные значения не знаете.
Вы читаете через строчку.
Во-первых, я везде говорил только о погрешности аппроксимации (а не о полной погрешности измерений), и везде старался это подчёркивать.
И как проверяю её в промежуточных точках, я писал, при наличии избыточности выборки это легко. Для погрешности аппроксимации за истинные принимаются экспериментальные значения.

Во-вторых, даже если говорить о полной погрешности, то параметры определяются на готовом изделии по эталонному прибору. На любой промежуточной точке, включая рекомендованные ГОСТами для данных СИ.

Цитата
написал:
судя по скринам там дребезг процентов под 50 и больше
На первом графике числа по оси Y обрезаны, извините, недоглядел.
Но на втором они есть. На первом значения те-же, но шум неотфильтрован.

Шум +-2...3 емзр от полного значения 30000...150000 это примерно 0,01...0,0015% от измеренного значения. т.е. не более 0,002%FS, это немного ниже, чем 50%?  ;)

Кстати, и ошибка аппроксимации (по коэффициентам Октавы и линии тренда) в данном случае максимальная около 1,9ЕМЗР, т.е. находится на уровне шумов эталонного прибора. Думаю, при использовании более высокоточного СИ и погрешность аппроксимации будет ниже.

Цитата
написал:
Чушь. Говорю как человек почти 20 лет занимающийся экспериментами на энергетическом оборудовании. Включая проведение гарантийных испытаний
Вот именно, Вы занимаетесь метрологией, а я нормативными актами и МИ не особо ограничен, я больше исследователь-разработчик.
Кое-что производим, и на многие наши СИ методики пишутся персонально, т.к. они аналогов не имеют.


В любом случае спасибо Вам за помощь, что помогли разобраться. Хоть этот метод нам и не подошёл, но отрицательный результат - тоже результат!

P.S. Добавил файлы с выборками.
Изменено: Алексей Назаров - 09.12.2021 08:57:15
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
написал:
При кусочной интерполяции в узловых точках погрешность нулевая
Мне не важна погрешность в узловых точках, важна В ЛЮБОЙ точке в заданном интервале. И этого КЛ не обеспечивает.
Если, например, Ваши весы в точках 1 и 1,5 кг дадут погрешность, близкую к нулю, то с какой погрешностью Вы измерите 1,2кг?
Извините, но формулировка "погрешность в узловых точках" применительно к измерительным приборам не имеет никакого смысла.

Цитата
написал:
Т.е. вы с помощью аппроксимации фильтруете точки и говорите о погрешности аппроксимации? Серьёзно?
Не фильтрую, Вы не так поняли (или я неясно объяснил), но при исследовании иногда это использую.
Ибо при исследованиях при выборке конечного размера не всегда есть большая избыточность, и при обработке исходного и обработанного фильтрами массива бывает разница.
А при полиномиальной обработке любые, выходящие из ряда, точки сразу бросаются в глаза. Причём фильтрация (хоть СА, хоть СКв, хоть медианная) далеко не всегда дают приемлемый результат (например, несколько точек подряд с высоким СКО), и можно принять решение, снимать часть данных заново, либо достаточно исключить из выборки несколько точек.
И не нужно делать большие глаза и говорить о нестандартизованных методиках и т.п. В экспериментах все методы хороши, если дают хороший результат.

Цитата
написал:
И не имея исходных данных говорить не о чем
Тут согласен, полноценные (даже сильно урезанные) файлы в лимит не влазят, а кидать на файлообменники не с руки было.
Поэтому я скринил только результат.
Сейчас данных под рукой нет, завтра только могу выложить.
Здесь моя вина - лень было.
Ведь имея актуальную выборку (хоть и урезанную), можно проанализировать и сравнить разные методы.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
написал:
Ну во первых вы так и не показали как считаете погрешность. Во вторых - интерполируйте кусочным способом и получите в узлах 0-ю погрешность.
Под погрешностью аппроксимации я имею в виду максимальную разницу между любой точкой экспериментальных данных и соответствующей точкой, вычисленной по полиному, построенному по этим данным.

В том числе и между узлами. Например, для проверки качества полинома можем сделать 1000 измерений, по 100 точкам (каждой 10-й) построить полином, а погрешность проверить по всем 1000 точкам.
И между узлами погрешность не менее важна, чем в узлах!

Кусочно-линейную пробовали, но при разумном количестве точек (не более нескольких десятков) погрешность аппроксимации наших данных превышает 0,03%, а нужно не более 0,01%.
Также при КЛ погрешность определения значения опорной точки выливается в погрешность измерения в данной точке, а при полиномиальной мы можем делать аппроксимацию по любому количеству точек, при этом ошибочные измерения видны, как на ладони, и сразу отфильтровываются (либо, если они единичные, то мало влияют на результат аппроксимации).
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
на 4-20 с харт протокол
Вот именно, что с HART протоколом, т.е. от 4-20  осталось, фактически, только питание и характеристики физического уровня передачи данных.
Но и эти используются только как общепромышленные.
Я общепромышленным оборудованием не занимаюсь, с монстрами конкурировать сложно.

Цитата
А вот потом уже идёт преобразование хоть по среднемедианному хоть по среднеарефметическому
Это не преобразование, это усреднение/фильтрация, её делают, в зависимости от конкретного применения.
А внутри самого датчика сигнал всё равно обрабатывается в 95% случаев на МК по нелинейным алгоритмам.
А уж дальше выходной сигнал можно и в HART, и в токовый 4..20 преобразовать..

Цитата
Для моих работ выковыривание из лэйблов никуда не годится
Для моих годится всё, что НОРМАЛЬНО РАБОТАЕТ.
А нафига мне нужна аппроксимация, которая даёт погрешность в 4 раза больше, чем "выковырянная" откуда-то? ))

Сейчас разбираюсь с .DataLabel.Text, данные получить удаётся, но либо при пошаговом выполнении кода, либо, если в тексте есть ошибка, вызывающая остановку компилятора. После пропуска ошибки данные и появляются. (((
Код
Sub AddTrend()
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Select
    ActiveChart.SetSourceData Source:=Range( _
        "'Pdm2_2021_11_17_102_(усреднен.)'!$B$4:$C$68")
    ActiveChart.FullSeriesCollection(1).Trendlines.Add
    ActiveChart.FullSeriesCollection(1).Trendlines(1).Select
        
    With ActiveChart.FullSeriesCollection(1).Trendlines(1)
        .Type = xlPolynomial
        .Order = 6
        .DisplayEquation = True
        .DisplayRSquared = False
        .DataLabel.NumberFormat = "0,00000000000000E+00"
        
        'Здесь (например) нужно код тормознуть, иначе дальнейшие действия не имеют смысла....

        Range("Y17").Value = .DataLabel.Text
        MsgBox (.DataLabel.Text)
    End With

        Range("Y17").Value = ActiveChart.FullSeriesCollection(1).Trendlines(1).DataLabel.Text
End Sub
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
написал:
а куда 4...20мА дели ?
4..20 кануло в лету.
Т.е. оно ещё применяется, но уже редко.
Но, даже у датчиков, в которых используется, сигнал предварительно обрабатывается МК с использованием тех самых полиномов.
И уже затем передаётся по каким либо протоколам (Eth, HART, либо через АЦП - 4...20)

Цитата
написал:
Вот это зря.
Виноват, исправлюсь! )))


Сейчас разбираюсь со свойством .DataLabel.Text, пытаюсь корректно выдернуть из него данные.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
написал:
Да, это известная проблема при больших Х.
Боюсь, большие Х здесь не главная причина.
Даже с малыми Х результаты ЛИНЕЙН не соответствуют линии тренда, погрешность для данной выборки около 0,02%.
Сейчас специально уменьшил Х на шесть порядков.
При этом и коэффициенты от Линейн, и от линии тренда сохранили неизменными первые 7..9 знаков, и общая форма линий осталась той же.

Цитата
написал:
Понятие точности относительно. Вот на рисунке несколько видов интерполяции через одни и те-же опорные точки.... А какая разница в промежутках  Выбирай на вкус.
Вы привели пример интерполяции, у меня - аппроксимация, причём количество точек не просто превышает порядок полинома, оно составляет от нескольких десятков до нескольких тысяч.

В измерительных устройствах является стандартом де-факто использование именно полиномиальной аппроксимации.
Во-первых, погрешность преобразования первичных датчиков/преобразователей имеет вид, очень хорошо аппроксимируемый полиномами.
Во-вторых, коэффициенты полинома занимают мало памяти в МК, и процесс вычислений проходит всегда по одному и тому же алгоритму, независимо от значения входного сигнала, никаких условий, сравнений, смен формул и т.п., что обеспечивает низкую интегральную погрешность.

Фактически, этот способ полностью и меня удовлетворяет, остался один нюанс - нужно выработать инструмент для удобного расчёта адекватных коэффициентов. ))

P.S.
Почитал про WorksheetFunction.LinEst.
Фактически, это и есть ЛИНЕЙН, так что всё, ранее написанное, не имеет смысла...  :cry:
Я изначально не вникал в код и не понял, что коэффициенты вовсе не "выдёргиваются" из инструмента работы с графиками, а вычисляются другой функцией, не связанной с ними.
, спасибо, что попытались помочь.

Сейчас попробую разобраться в примерах МатросНаЗебре, может, здесь что получится.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цитата
Так этот макрос и выводит полную формулу... Там же написано - "' Программа формирования текста уравнения по всем точкам"
Какой инженер читает инструкции? )))
Я не обратил внимания на эти строки, поэтому удивился.
Но это не особая проблема, распотрошить текстовую строку по составляющим - дело техники.

Цитата
Так это в макросе и прописано... Format(Application.Index(WorksheetFunction.LinEst(yn, xn, True, True), 1, k), "0.####E+") увеличивайте, или вообще удалите.
Да, благодарю, разрядность получил.

Цитата
Если нужны просто коэфф-ты (зачем?) то вот
Сейчас попробую

Цитата
Но они не будут отличаться от того что выдаст  =ИНДЕКС(ЛИНЕЙН($E$5:$E$12;$D$5:$D$12^{1;2;3;4;5;6});1;G5)
К сожалению....  :cry:

В самом первом сообщении в этой ветке я постарался подробно расписать, почему именно меня не удовлетворяют коэффициенты, полученные функцией ЛИНЕЙН.
Коэффициенты из Октавы оказываются значительно лучше! (в том смысле, что отличие любой точки аппроксимированной кривой от экспериментальных данных получается существенно меньше).
И меня очень поразило, что коэффициенты линии тренда в Excel почти совпадают с коэффициентами из Октавы (а при больших выборках и с коэффициентами AGraphe), и линии погрешности этих способов практически совпадают, обеспечивая очень хорошие результаты!! Значительно лучше, чем ЛИНЕЙН.

И цель этой ветки была следующей:
Если в Excel уже есть механизм расчета "хороших" коэффициентов (линия тренда), то нужно попытаться из этого инструмента коэффициенты выдернуть!!
Либо рассчитать коэффициенты средствами VBA, но чтобы они оказались "по качеству не хуже", чем коэффициенты линии тренда/Октавы.
А коэффициенты, аналогичные ЛИНЕЙН, увы, не имеют смысла... (((

Спасибо за помощь, буду пробовать дальше.
Уважаемый tutochkin,  два последних фрагмента кода - это что? Дают ли они коэффициенты, отличные от ЛИНЕЙН, или то же самое?
В любом случае спасибо, сейчас буду смотреть.
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Ага, уже что-то получается!
Большое спасибо!

На команду
Код
Range("w5:w11") = Case_uravnenie(Range("B4:B68"), Range("C4:C68"), 6)
Получаю результат:
во всех ячейках диапазона полная формула

    4,7737E-38 * X ^ 6 -5,455E-30 * X ^ 5    + 2,1638E-22 * X ^ 4 -3,0827E-15 * X ^ 3  + 0 * X ^ 2    + 0 * X ^ 1  + 5512600
Осталось "раздербанить" строку на составляющие, но есть одно большое НО: в результате всего 5 значащих цифр.....
Нужно не менее 9, лучше все 14..

Кроме того, значения коэффициентов отличаются... Теоретически, как здесь:

Завтра попробую копать LinEst
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Цель - получить коэффициенты аппроксимирующего полинома 5-6 порядка по исходной выборке, находящейся в книге Excel.
Без лишних танцев с бубном, свойственным известным мне надёжным методам, типа линии тренда или Октавы (перекодировки, замены символов, копипасты и т.п.).

Почему именно Excel - в ней я собираю данные с измерительных приборов (с помощью VBA), управляю внешними устройствами  (с помощью VBA же), обрабатываю полученные данные и т.п., и любой прыжок в сторону превращается в неудобный костыль...

И при экспериментах часто вариантов данных очень много, каждый нужно обработать, проверить и т.п.
Функция ЛИНЕЙН по удобству устраивала полностью, но, в определённый момент, перестала устраивать по точности.
Изменено: Алексей Назаров - 08.12.2021 10:17:38 (Орф. ошибки)
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Благодарю за подсказки, пробую использовать.

На VBA не писал очень давно, попал в ступор.
Не могу передать массив в Linia_trenda.

Пытаюсь например, так, получаю ошибку:
Код
Public Sub Linia_START()

Dim myRangeX() As Double
Dim myRangeY() As Double
Dim myRangeC() As Double

myRangeX = Range("B4:B68") '.Value
myRangeY = Range("C4:C68") '.Value
myRangeC = Range("w5:w11") '.Value

Call Linia_trenda(myRangeY, myRangeX, 1, myRangeC)

End Sub

Чувствую, не учёл какую-то  мелочь, а сообразить не могу..
Аппроксимация полиномом в MS Excel., Сравнение разных способов аппроксимации полиномом. Низкое "качество" аппроксимации встроенной функцией ЛИНЕЙН.
 
Уважаемые сопланетники!

Столкнулся с проблемой, прошу помочь.

Для аппроксимации передаточной характеристики измерительных приборов часто используют полином. С точки зрения электроники - это очень удобный способ, требующий от МК относительно мало ресурсов и предоставляющий очень хорошую точность.

Для получения коэффициентов однофакторного полинома я традиционно использовал встроенную в Excel функцию ЛИНЕЙН. Однако в имеющейся в данный момент задаче выяснилось, что погрешность аппроксимации этим способом очень высока, - значительно выше, чем при использовании математических пакетов или линии тренда графика в Excel.

Предположив, что проблема в некорректном использовании функции ЛИНЕЙН, перешерстил интернет, пробовал сторонние файлы. Оказалось, проблема известная, и связана она с алгоритмом работы этой функции (подробности я не понял, в математике не очень).

Я взял одну и ту же выборку и сравнил четыре способа получения коэффициентов:
1. с использованием ЛИНЕЙН
2. с помощью утилиты Agraph
3. построением линии тренда на графике Excel
4. с помощью функций polyfit/polyval в Octave


Выяснилось, что на большой выборке (13 точек по 600 измерений в каждой) первый способ (ЛИНЕЙН) даёт примерно в 1,5...2 раза бОльшую погрешность, чем другие.


При меньшей выборке (13 точек по 5 в каждой, итого 65 точек) ещё интереснее: и ЛИНЕЙН, и Agraph дают погрешность в 4 раза больше, чем два последних.
Agraph имеет ещё два недостатка - максимальное количество обрабатываемых точек - 5000, а количество значащих цифр в коэффициентах - не более 9.



Два последних способа дают отличный результат, но есть одна проблема - сложность извлечения коэффициентов.
Требуется постоянно менять данные, и, соответственно, производить множество вспомогательных действий для загрузки/конвертирования данных и "выдёргивания" коэффициентов.

Хотелось бы все действия максимально автоматизировать и привязать к Excel. Возможно, можно как-то исхитриться и заставить ЛИНЕЙН работать по другому?
Или есть способ (может, с помощью VBA) автоматически выдернуть коэффициенты из линии тренда?
Попадались в сети фрагменты VBA для вычисления коэффициентов, но тоже приемлемого ничего не подобрал...

p.s. Движок запрещает грузить файлы свыше 100к, поэтому нарезал скринов.
Страницы: 1
Наверх