Мера кривизны квадратичного полинома в Matlab

Я строю полином второго порядка, используя следующий код в Matlab:

 xx = 1 : 4000;
 mu =    1.0e+03 * [ 2.0733; 0.6569];
 b = 198;   
 P = [2.5577,   -1.0134,  102.4344];

 figure;imshow(img,'border','tight');
            hold on;
 plot(xx,polyval(P,xx,[],mu)+b,'LineWidth',1.5,'Color','r');

В результате получается следующее изображение:

введите описание изображения здесь

Однако, если я закомментирую figure;imshow(img,'border','tight');, он покажет следующую кривую:

введите описание изображения здесь

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

Во-вторых, я ищу меру степени изгиба для объекта, показанного на рисунке 1, чтобы иметь возможность сравнивать два объекта с низким или высоким изгибом (кривизной). Однако я не знаю, как извлечь такую ​​меру из полиномиальной формулы. Я пытался использовать коэффициент x^2 (P(2)), но я не уверен, что он представляет собой кривую на рисунке 1, потому что рисунок 2 показывает что-то другое.


person Ahmad    schedule 13.10.2016    source источник
comment
Да, вы можете количественно оценить изгиб объекта по его второй производной или, что то же самое, (в 2 раза) по коэффициенту x^2. Взгляните на эти страницы, если вы пытаетесь измерить изгиб: Это и это.   -  person erfan    schedule 13.10.2016
comment
Если вы хотите увидеть одинаковую кривизну на изображении и на графике, поэкспериментируйте с axis. Попробуйте axis xy сразу после imshow, чтобы понять, что я имею в виду.   -  person Dev-iL    schedule 13.10.2016
comment
@Dev-iL спасибо, изображение перевернуто, но все же две кривые разные. Я не знаю, имеет ли здесь какое-то значение масштабирование.   -  person Ahmad    schedule 13.10.2016


Ответы (2)


Первая часть: если вы имеете в виду знак кривизны, вы должны обратить внимание на системы координат на изображении или в матрице и на графике. Когда мы plot, как на вашем графике, обычно нижний левый угол соответствует минимуму осей x и y. В то время как в системе координат изображения у вас есть что-то вроде:

Координация (с индексом строки и столбца) начинается с левого верхнего угла.

Другое визуальное различие между двумя кривыми заключается в их абсолютной кривизне, и это связано только с ограничениями оси. Если вы установите пределы осей равными, вы увидите две кривые с одинаковым изгибом. Используйте xlim и ylim для этой цели.


Вторая часть: если вы хотите количественно определить нагрузку/давление/вес, приложенные к системе, абсолютное значение коэффициента x^2 равно монотонная переменная. Поэтому вы можете полагаться исключительно на него и калибровать его, прикладывая к системе различные известные уровни нагрузки.

person erfan    schedule 13.10.2016
comment
Я новичок в Matlab, как я могу установить ограничения по осям? Мне нравится быть уверенным, что они равны. Какова роль mu. Во всяком случае, вы не сказали, как измерить степень изгиба. - person Ahmad; 13.10.2016
comment
используйте xlim и ylim, чтобы установить пределы осей. Чтобы узнать все о polyval и его входных аргументах, просто ознакомьтесь с ним. - person erfan; 13.10.2016

Радиус кривизны равен (1 + (dy/dx)^2)^3/2 по всему d^2y/dx^2.

Или поместить это в псевдокод

     /*
         curvature of ax*x + b*x + c, given x
     */
     curvaturequad(a, b, c, x)
     {
        dybydx = 2*a*x + b;  // first derivative
        d2ybydx2 = 2 * a;    // second derivative

        dybydx2 = dybydx*dybybx;
        numerator = sqrt(dybydx2 + 1)*(dybydx +1);
        return numerator / d2ybydx2;
     }
person Malcolm McLean    schedule 13.10.2016
comment
Что это? Это не код MATLAB (если это псевдокод - так и скажите, чтобы не запутать потенциальных читателей). Также он не касается 1-й части вопроса ОП. - person Dev-iL; 13.10.2016