Как рассчитать линейное уравнение для моей таблицы? - PullRequest
1 голос
/ 31 марта 2011

Я пишу программу, которая выполняет преобразование некоторых единиц из шкалы Брикса в другие единицы.

Программа работает, отображая шкалу для пользователя, и позволяет пользователю щелкнуть по шкале, чтобы выбрать измерение Брикса. Я использую диапазон от 1 до 30.

Проблема в том, что шкала не является линейной. Поскольку число Брикса становится выше, между каждым шагом увеличивается пространство, поэтому мне нужно вычислить линейное уравнение, которое позволило бы мне перевести y-позицию пользовательского ввода в число на шкале.

Я сделал следующую диаграмму, чтобы показать корреляцию между значением brix и y-позицией щелчка пользователя (в пикселях):

Brix | PosY  
=====|=====  
  0  |   0  
  1  |  10  
  5  |  50
 10  | 100    
 12  | 123    
 15  | 155    
 16  | 167    
 19  | 201    
 21  | 225    
 24  | 262    
 26  | 287    
 28  | 314    
 30  | 340

По сути, мне нужно иметь возможность выяснить Брикса, учитывая PosY. Как определить уравнение для использования?

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Для интерполяции в нелинейных ситуациях, когда неизвестно точное уравнение, люди обычно используют кубический сплайн подбор и интерполяцию. В зависимости от необходимой точности, вы можете просто обойтись с кусочно-линейной посадкой ; то есть делать независимые линейные интерполяции между последовательными парами точек.

0 голосов
/ 31 марта 2011

Ну, ваши данные "почти" линейны:

  Brix(PosY) := 0.092 * PosY

enter image description here

Если вы действительно хотите лучшего приближения (я думаю, что это невероятно), вы можете попробовать:

  Brix(PosY) := 0.10370203*Posy + 0.051016908*Cos[(227.63841*Posy)] - 
                0.056852482*Cos[(0.10305045*Posy)] - 4.6300302*10^-5*Posy^2

Что дает:

enter image description here

Я получил последний с использованием наименьших квадратов через Eureqa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...