2013-02-18 4 views
-1

У меня есть таблица, как InputЧтобы найти уравнение между двумя колоннами

A B 
3 20 
5 30 
6 35 

мне нужен алгоритм, чтобы выяснить формулу (уравнение), связанных с двумя колонками А и В

Выход

B=(A+1)*5 
+0

Эта формула не работает для первого ряда ... –

+0

рассмотрен вопрос это алгоритм, чтобы найти связь между двумя столбцами..ie, для таблицы I/P. Мне нужен алгоритм для вычисления (выяснить) формулы как O/P – Yoshi

ответ

-1

Если формула первого порядка линейна, как в примере, тогда yo U ищут:

http://en.wikipedia.org/wiki/Linear_regression

или это для линейных уравнений высших порядков

http://en.wikipedia.org/wiki/Polynomial_regression

+1

Линейная регрессия не подходит, если формула не в первом порядке !! ! –

+0

О да. Я думал, что линейный означает первый порядок. моя вина. Благодарю. фиксированный ответ – fsw

1

один относительно простой подход должен был бы использовать кривую наименьших квадратов для различных семейств кривых (скажем, полиномы до степени n-2, экспоненты, степенные законы) и ищем один с минимальным остатком. Это даст вам приблизительные формулы (если только вы не принимаете только кривую с нулевым остатком), но, возможно, это нормально для вашего приложения?

0

Предполагая, что формула, которую вы хотите, является полиномом.

Что мы знаем? Для списка значений A мы имеем их значения B. При значениях «n» A наилучший полином, который мы можем найти, имеет (n-1) -й степени. Зачем?

В основном я решения линейной системы, как в следующем:

x + Ay + (A^2)z = B 

С Например:

x + 3y + 9z = 20 
x + 5y + 25z = 30 
x + 6y + 35z = 35 

После решения этого мы можем найти, что (х, у, г) = (5, 5, 0). Это означает, что наш полином равен 5 + 5A + 0 (A^2), то есть в основном тот же B = (A + 1) * 5, который вы показали в примере.

Мы можем решить систему, используя любой метод. Не знаю, если это поможет, но я брошу некоторый код здесь, чтобы решить с методом исключения Гаусса (в Python):

def solve(A, B): 
    n = len(A) 
    M = [[a**i for i in range(n)]+[b] for a,b in zip(A,B)] 

    for i in range(n): 
     M[i] = [x/M[i][i] for x in M[i]] 

     for j in range(n): 
      if j==i: continue 
      M[j] = [xj - xi * M[j][i] for xi, xj in zip(M[i], M[j])] 

    return [M[i][-1] for i in range(n)] 

print solve([3,5,6], [20, 30, 35]) 
Смежные вопросы