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中,怎麼樣自動讓內容相同的...