MATLAB - Кривая Фитинг 1 / х Функция - PullRequest
2 голосов
/ 12 марта 2012

Я хотел бы найти способ подгонки кривой к определенной функциональной форме, а именно:

y = константа / x

Есть ли хороший способ сделать это?Мои данные - это просто набор (x, y) пар.

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Нет причин использовать что-либо более сложное, чем обратная косая черта, хотя код внутри обратной косой черты довольно сложен.

constant = (1./x(:))\y(:);

Это делает линейную регрессию для модели вида y = constant / x. Посмотрите, что я инвертировал элементы x, используя ./, а затем применил обратную косую черту для регрессии.

2 голосов
/ 12 марта 2012

Конечно, попробуйте это.

Вы можете переписать это уравнение следующим образом: y = c0 + c1*z, где c0 и c1 - константы, для которых вы хотите найти, и z = 1/x.

Если у вас есть n точек, вы можете написать одно уравнение для каждой пары:

y1 = c0 + c1*z1
y2 = c0 + c1*z2
...
yn = c0 + c1*zn

У вас есть (n x 1) вектор известных значений y с левой стороны. Существует матрица (n x 2), где первый столбец - все единицы, а второй - известный вектор значений x, который умножает вектор (2 x 1) неизвестных коэффициентов c0 и c1.

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

Подробнее см. .

1 голос
/ 12 марта 2012

У вас есть набор инструментов оптимизации? Если это так, используйте функцию lsqcurvefit .

a=lsqcurvefit(@(a,x) a(1)./x,1,x,y);
hold on
plot(x,y,'o') %plot data
plot(x,a./x) %fit
...