matlab曲線擬合方法和函式拐點查詢

2021-10-02 02:27:23 字數 2404 閱讀 7161

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...