matlab怎麼對曲線進行平滑啊

2022-03-15 05:28:24 字數 5442 閱讀 7469

1樓:shine戚七七

matlab中繪製平滑曲線一般使用最小二乘法或者b樣條插值。

最小二乘法實際上是函式擬合,可以得到目標函式(這裡為多項式)的係數,對outliers相對不敏感,缺點是需要預先設定目標函式的階數,且有時不容易找到最優的目標函式形式。這裡使用polyfit()函式進行多項式擬合,其他類似函式,如:lsqlin()不在討論之列,用法有不同。

b樣條插值是一種插值方法,得不到目標函式,但可以最大限度地在光滑的前提下接近取樣點,對outliers敏感,只是比一般的多項式插值好點。

對照:plot()函式只是將取樣點用直線連線在一起,結果是一條折線。

下面通過一個與條形圖結合的例項對最小二乘法(least square)與b樣條插值(b spline)進行分析:

1. y1=[15.81292 16.

43826 5.696203; 10.91314 8.

493151 5.379747; 10.24499 7.

945205 8.860759; 12.02673 13.

15068 19.62025;...

2. 5.790646 15.

89041 37.34177; 7.349666 9.

041096 6.012658; 10.69042 10.

13699 3.797468; 16.03563 10.

68493 5.696203;...

3. 11.13586 8.219178 7.594937];

4. y11=[15.81292,10.

91314,10.24499,12.02673,5.

790646,7.349666,10.69042,16.

03563,11.13586];

5. y12=[16.43826,8.

493151,7.945205,13.15068,15.

89041,9.041096,10.13699,10.

68493,8.219178];

6. y13=[5.696203,5.

379747,8.860759,19.62025,37.

34177,6.012658,3.797468,5.

696203,7.594937];

7. x=[1 2 3 4 5 6 7 8 9];

8.9. %% bar graph

10.b=bar([y11',y12',y13']);% same with b=bar(y1)

11.grid on;

12.set(gca, 'xticklabel', );

13.legend('156c','164c','172c');

14.xlabel('angle:degree');

15.ylabel('percentage:%');

16.title('angle');

17.hold on;

18.19.%% least square method

20.result1=polyfit(x,y11,3);

21.plot(x,polyval(result1,[1:9]));

22.23.%% b spline

24.values1 = spcrv([[x(1) x x(end)];[y11(1) y11 y11(end)]],3);

25.plot(values1(1,:),values1(2,:),'b','linewidth',2);

上例中,y1=y11', y12', y13' 對於bar()函式,使用二者都可以,但是對於least square與b spline,只能將y值分開;另外,bar()函式對於x軸的值有預設值,所以對於bar(),不寫x=[...]仍可以執行,但對於least square與b spline,需明確指出x值。

2樓:匿名使用者

matlab將曲線進行平滑的方法如下:

clc,clear;

a = 1:1:6;%橫座標

b = [8.0 9.0 10.0 15.0 35.0 40.0]; %縱座標

plot(a, b, 'b'); %自然狀態的畫圖效果

hold on;

第一種,畫平滑曲線的方法:

c = polyfit(a, b, 2); %進行擬合,c為2次擬合後的係數;

d = polyval(c, a, )1; %擬合後,每一個橫座標對應的值即為d;

plot(a, d, 'r'); %擬合後的曲線;

plot(a, b, '*'); %將每個點 用*畫出來;

hold on;

第二種,畫平滑曲線的方法

values = spcrv([[a(1) a a(end)];[b(1) b b(end)]],3);

plot(values(1,:),values(2,:), 'g');

3樓:匿名使用者

>> x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8];

y=[5 9 70 118 100 17 0 5];

y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8];

values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);

values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000);

plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')

>>

matlab 如何使曲線光滑

4樓:匿名使用者

1、首先準備兩列資料,作為xy座標值,使用plot命令作圖如下。

2、然後進行資料擬合,這裡使用matlab的polyfit命令。如果資料的規律性很差的話,polyfit後面設定的引數要足夠大才能保證擬合精度,在這個資料中選擇15。

3、擬合後與原來資料對比後的std約為0.1287.y的平均值為113.精度值根據不同的需要設計不同的擬合值。

4、matlab下的命令為polyder。求導後得到的資料作圖如下。可以看到在比區間上,導數有兩處為0,這與原來曲線相符。

5、最後就完成了。

5樓:匿名使用者

解決方法為三次樣條差值,說白了,就是你給一些稀疏的點,計算機自動根據連續三次多項式函式擬合,並生成密集且連續的點。

例如 x0=[1,2,3,4];

y0=[2,3,1,4];

%以上是稀疏的點

x=1:0.1:4;%這個是1到4之間間距0.1的密集的點y=spline(x0,y0,x);%計算這些密集的x點對應的y點。

若要調整格點大小,可以改變x數列的值。例如要間隔0.01,那麼x=1:0.01:4即可。

除了三次樣條差值,還有線性差值,把spline改為interp1即可。另外,還有拉格朗日差值等,不過你應該用三次樣條足以。

6樓:赤日の流轉

做加密演算法,把你要的點用演算法加的更密集

7樓:真情

用三次樣條插值 演算法 可以使 曲線 很光滑不知道 你學過 這個演算法吧

如果沒有 你可以搜 下 這個演算法

網上比較多

請採納。

如何在matlab中用樣條函式平滑曲線 20

8樓:匿名使用者

就是用spline()

spline()是根據採集的一些點平滑成一條曲線。

比如:x=[1 2 3 5 8];

y=[3 2 6 4 9];

t=1:5;

ts=1:0.01:5;

xs=spline(t,x,ts);

ys=spline(t,y,ts);

plot(xs,ys,x,y,'o')

畫出的圖就是把(x,y) 這5個點進行光滑連線成曲線

9樓:匿名使用者

也就是用插值方法,增加樣點,用樣條函式擬合,這樣使得曲線平滑了%不是很平滑的曲線

x=1:5;

y=1+x.^2+8*rand(1,length(x));

plot(x,y,'b-');

%插值,增加x樣點數

x1 = 1:0.1:5

%用樣條函式插值

y1=spline(x,y,x1);

hold on;

plot(x1,y1,'r-');

(紅線比藍線平滑)

如何使matlab中曲線平滑?

10樓:墨汁諾

%第一種,畫平滑曲線的方法

c = polyfit(a, b, 2); %進行擬合,c為2次擬合後的係數

d = polyval(c, a, 1); %擬合後,每一個橫座標對應的值即為d

plot(a, d, 'r'); %擬合後的曲線

plot(a, b, '*'); %將每個點 用*畫出來

hold on;

%第二種,畫平滑曲線的方法

values = spcrv([[a(1) a a(end)];[b(1) b b(end)]],3);

plot(values(1,:),values(2,:), 'g');

擬合簡介

在matlab中可以用polyfit 來擬合多項式。擬合以及插值還有逼近是數值分析的三大基礎工具,通俗意義上它們的區別在於:擬合是已知點列,從整體上靠近它們;插值是已知點列並且完全經過點列;逼近是已知曲線,或者點列,通過逼近使得構造的函式無限靠近它們。

11樓:匿名使用者

有兩種方法可以畫平滑曲線,第一種是擬合的方法,第二種是用spcrv。

其實原理應該都一樣就是插值。下面是源程式,大家可以根據需要自行選擇,更改擬合的引數。

clc,clear;

a = 1:1:6;  %橫座標

b = [8.0 9.0 10.0 15.0 35.0 40.0]; %縱座標

plot(a, b, 'b');   %自然狀態的畫圖效果

hold on;

%第一種,畫平滑曲線的方法

c = polyfit(a, b, 2);  %進行擬合,c為2次擬合後的係數

d = polyval(c, a, 1);  %擬合後,每一個橫座標對應的值即為d

plot(a, d, 'r');       %擬合後的曲線

plot(a, b, '*');       %將每個點 用*畫出來

hold on;

%第二種,畫平滑曲線的方法

values = spcrv([[a(1) a a(end)];[b(1) b b(end)]],3);

plot(values(1,:),values(2,:), 'g');

matlab對複數訊號進行楔分析

沒遇到類似情況,資料是複數或實數cwt和dwt都可以執行。不知你用啥函式?在matlab中對覆訊號進行小波變換用哪個函式 dwt2函式 二維單尺度小波變換 ca,ch,cv,cd dwt2 x,wname ca,ch,cv,cd dwt2 x,lo d,hi d lo d和hi d的長度必須相同。c...

怎麼用matlab對示波器波形進行傅立葉分析

建立一個simulink檔案,一個輸入和一個示波器,還有一個powergui模組,powergui模組是進行電學分析的一個很重要的模組,裡面可以進行潮流計算,rlc分析,傅立葉分析等。用matlab對實驗波形進行頻譜分析 5 示波器應該能生成bai資料檔案吧,把數du據檔案import進matlab...

matlab中如何對一條曲線和X軸之間的區域進行顏色的填充

這個沒有一次bai性的du 辦法,只能用area分段拼zhi湊出來了 dao 如何用matlab只對一條曲線的波峰區域進行擬合 10 你這一看就是高斯函式啊,我也在想辦法擬合,擬合之後還要再求面積。波峰區域 具體指什麼區域?可以在圖上粗略畫一下您理想中的擬合結果。excel中,怎麼樣自動讓內容相同的...