polyfit曲線擬合函式
a=
polyfit
(x,f,7)
;%曲線擬合
輸入:x 為所有離散點的橫座標的取值
f 為所有離散點的縱座標的取值
7 為多項式擬合的最高次數(根據自己需要選擇);
輸出:a 為擬合曲線後自變數的係數
擬合出多項式後,需要配合使用polyval來求出對應因變數的值
y=
polyval
(a,x)
;%根據擬合的函式得出x對應的因變數的值
輸入:a 為擬合出的多項式的係數
x為所有離散點的橫座標的取值;
輸出:y 為根據多項式求解出對應自變數的因變數的值
clear,clc;
i=imread
('./imagelib/dt1.png');
i=im2double
(i);
%歸一化
[h,w,l]
=size
(i);
%計算影象的大小
i1=0.299*i
(:,:
,1)+
0.587*i
(:,:
,2)+
0.114*i
(:,:
,3);
%計算灰度圖,用加權平均法
%計算每行的灰度平均值,針對整個影象而言x=1
:1:h;f_all=
sum(
(i1')
)/w;
plot
(x,f_all,
'o')
;%畫出平均值曲線圖
hold on;
[a,~
,mu]
=polyfit
(x,f_all,13)
;%曲線擬合 自變數的係數
y=polyval
(a,x,
,mu)
;%根據擬合的函式得出x對應的因變數的值
plot
(x,y,
'g')
;
效果圖:首先,得明確拐點是啥,數學中定義的拐點是函式凹凸性改變的點;
數學求解原理:
(1)求函式 f(x) 的二階導
(2)二階導存在且導數為0同時三階導不為0的點為函式拐點;二階導不存在的點,其左右邊二階導異號的點也為拐點;
matlab 方法:
diff差分和近似導數
de2=
diff
(y,2);
%擬合曲線的二階導
輸入:y 待求導函式(matlab中就是一陣列,因變數陣列)
2 求導階數(根據需要填寫)
輸出: de2 對應個點的導數值
ps:diff只是近似求導,實際是求的各點的差分值
如:一階導:
de1(1)=y(2)-y(1)
de1(2)=y(3)-y(2)
…de1(i)=y(i+1)-y(i)
…de1(n-1)=y(n)-y(n-1)
二階導:
de2(1)=de1(2)-de1(1)
de2(2)=de1(3)-de1(2)
…de2(i)=de1(i+1)-de1(i)
…de2(n-1)=de1(n)-de1(n-1)
%
%y是上例中擬合的曲線,看客自己操作時切記要兩段**合在一起跑
de2=
diff
(y,2);
%擬合曲線的二階導
de3=
diff
(y,3);
%擬合曲線的三階導
rowx=
linspace(0
,0,h);
for row1=h-3:
-1:2
if(de2(row1)==0
&&de3
(row1)~=
0)||(
de2(row1)
*de2
(row1+1)
<0)
rowx
(row1)=1
; end
endplot(x
(find
(rowx)),
y(find
(rowx)),
'ob'
);
查詢效果:
MATLAB曲線擬合函式
一 多項式擬合 clear all clcx 0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8 y 1 2 3 5 6 7 6 5 4 1 p5 polyfit x,y,5 5 階多項式擬合 y5 polyval p5,x p5 vpa poly2sym p5 5 顯示...
MATLAB曲線擬合函式
一 多項式擬合 clear all clcx 0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8 y 1 2 3 5 6 7 6 5 4 1 p5 polyfit x,y,5 5 階多項式擬合 y5 polyval p5,x p5 vpa poly2sym p5 5 顯示...
MATLAB 曲線擬合
x0.1 0.20.15 0.0 0.2 0.3y 0.95 0.84 0.86 1.06 1.50 0.72 函式功能多項式的擬合運算 呼叫方法polyfit x,y,n x為橫座標,y為縱座標,n為擬合階數。例子x 0 0.1 2.5 1y erf x p polyfit x,y,6 p 0.0...