首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MATLAB 多項式曲線繪製不平滑?通過擬合與加密采樣點優化曲線平滑度

     編輯:程式設計綜合問答

問題現象

原代碼直接使用稀疏數據點繪圖:

x = [0:5:30];
p = [0.00, 0.058, -2.094, 33.88, -246.6, 688, -181.0];
y = polyval(p, x);
plot(x, y, 'r')

因采樣點過少(僅 7 個),導致曲線呈現折線狀,不平滑。

解決方案:多項式擬合 + 加密采樣

  1. 多項式擬合:用 `polyfit` 將離散點擬合為低階多項式(如 2 階),捕捉整體趨勢。
  2. 加密采樣:在擬合曲線上取更密集的點(如步長 2),繪製平滑曲線。

優化代碼

x = 0:5:30;
y = [0.00, 0.058, -2.094, 33.88, -246.6, 688, -181.0];
% 2階多項式擬合
p = polyfit(x, y, 2);
disp('二階擬合多項式:');
f = poly2str(p, 'x');  % 顯示擬合函數表達式

% 加密采樣點
x1 = 0:2:30;           % 步長從 5 縮小為 2
y1 = polyval(p, x1);   % 在密集點上計算擬合值

% 繪圖
plot(x1, y1, 'r-', 'LineWidth', 1.5);
grid on;
xlabel('x'); ylabel('y');
title('平滑的多項式擬合曲線');

關鍵函數說明

  • `polyfit(x, y, n)`:最小二乘法擬合 n 階多項式,返回係數向量(高次在前)。
  • `polyval(p, x)`:計算多項式 p 在 x 處的值。
  • `poly2str(p, 'x')`:將多項式係數轉為可讀字符串表達式。

進階建議

  • 若原始數據噪聲大,可嘗試更高階擬合(如 3-5 階),但需防止過擬合(Runge 現象)。
  • 對於非多項式趨勢,考慮樣條插值(`spline`、`interp1`)或平滑濾波(`smooth`)。
  • 繪圖前加 `grid on`、`xlabel`/`ylabel` 等,提升圖表可讀性。

通過「擬合趨勢 + 密集采樣」,即可將稀疏離散點轉為平滑連續曲線,顯著改善視覺效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved