移动最小二乘法(MLS)拟合平面正弦曲线(MATLAB 实现)

发布时间:2026/6/23 19:42:38
移动最小二乘法(MLS)拟合平面正弦曲线(MATLAB 实现) 移动最小二乘法Moving Least Squares, MLS是一种无网格逼近方法通过局部加权最小二乘拟合具有光滑性好、自适应性强的特点。一、数学原理简要给定平面离散点集{xi,yi}i1N\{x_i, y_i\}_{i1}^N{xi​,yi​}i1N​MLS 在每个采样点x\mathbf{x}x处构造局部近似函数uh(x)∑j1mpj(x)aj(x)pT(x)a(x) u^h(\mathbf{x}) \sum_{j1}^m p_j(\mathbf{x}) a_j(\mathbf{x}) \mathbf{p}^T(\mathbf{x}) \mathbf{a}(\mathbf{x})uh(x)j1∑m​pj​(x)aj​(x)pT(x)a(x)其中p(x)\mathbf{p}(\mathbf{x})p(x)基函数线性/二次a(x)\mathbf{a}(\mathbf{x})a(x)随位置变化的系数通过加权最小二乘求解加权最小二乘问题min⁡a∑i1Nwi(x)[pT(xi)a−yi]2 \min_{\mathbf{a}} \sum_{i1}^N w_i(\mathbf{x}) \left[ \mathbf{p}^T(\mathbf{x}_i) \mathbf{a} - y_i \right]^2amin​i1∑N​wi​(x)[pT(xi​)a−yi​]2权重函数常用高斯权重wi(x)exp⁡(−di2dmax⁡2),di∥x−xi∥ w_i(\mathbf{x}) \exp\left(-\frac{d_i^2}{d_{\max}^2}\right), \quad d_i \|\mathbf{x}-\mathbf{x}_i\|wi​(x)exp(−dmax2​di2​​),di​∥x−xi​∥二、完整 MATLAB 代码2.1 主程序mls_sine_fit.m%% 移动最小二乘法拟合平面正弦曲线clear;clc;close all;%% 1. 生成带噪声的正弦数据点N50;% 数据点个数x_datalinspace(0,2*pi,N);y_truesin(x_data);% 真实正弦曲线noise0.1*randn(N,1);% 高斯噪声y_datay_truenoise;% 带噪声的数据%% 2. MLS 拟合参数x_querylinspace(0,2*pi,200);% 查询点拟合曲线上的点dmax1.5;% 影响域半径关键参数basis_typelinear;% 基函数类型linear 或 quadratic%% 3. 执行 MLS 拟合y_mlszeros(size(x_query));fori1:length(x_query)y_mls(i)mls_evaluate(x_query(i),x_data,y_data,dmax,basis_type);end%% 4. 结果可视化figure(Position,[100,100,1200,500]);% 原始数据与拟合曲线subplot(1,2,1);plot(x_data,y_data,ro,MarkerSize,6,LineWidth,1.5);hold on;plot(x_query,y_mls,b-,LineWidth,2.5);plot(x_query,y_true,k--,LineWidth,1.5);xlabel(x);ylabel(y);title(MLS 拟合正弦曲线);legend(带噪声数据,MLS 拟合,真实正弦,Location,northwest);grid on;% 误差分析subplot(1,2,2);errorabs(y_mls-sin(x_query));plot(x_query,error,g-,LineWidth,2);xlabel(x);ylabel(绝对误差);title(拟合误差分布);grid on;fprintf(最大误差: %.4f\n,max(error));fprintf(平均误差: %.4f\n,mean(error));fprintf(RMSE: %.4f\n,sqrt(mean(error.^2)));%% 5. 不同影响域半径对比figure(Position,[100,100,1200,400]);dmax_list[0.5,1.0,1.5,2.0];colors{r,g,b,m};fori1:length(dmax_list)y_fitzeros(size(x_query));forj1:length(x_query)y_fit(j)mls_evaluate(x_query(j),x_data,y_data,dmax_list(i),basis_type);endsubplot(2,2,i);plot(x_data,y_data,ko,MarkerSize,4);hold on;plot(x_query,y_fit,colors{i},LineWidth,2);title(sprintf(d_{max} %.1f,dmax_list(i)));xlabel(x);ylabel(y);grid on;endsgtitle(不同影响域半径对 MLS 拟合的影响);2.2 MLS 核心函数mls_evaluate.mfunctiony_predmls_evaluate(x,x_data,y_data,dmax,basis_type)% 在查询点 x 处计算 MLS 拟合值% x: 查询点标量% x_data, y_data: 离散数据点% dmax: 影响域半径% basis_type: linear 或 quadratic% 1. 计算所有权重Nlength(x_data);wzeros(N,1);fori1:N dabs(x-x_data(i));ifddmax% 高斯权重函数w(i)exp(-(d/dmax)^2);elsew(i)0;endend% 2. 构造基函数矩阵 P 和权重对角矩阵 Wifstrcmp(basis_type,linear)% 线性基: p(x) [1, x]P[ones(N,1),x_data];elseifstrcmp(basis_type,quadratic)% 二次基: p(x) [1, x, x^2]P[ones(N,1),x_data,x_data.^2];endWdiag(w);% 权重矩阵% 3. 求解加权最小二乘问题: (P^T W P) a P^T W yAP*W*P;bP*W*y_data;% 添加正则化项防止奇异reg_param1e-6;AAreg_param*eye(size(A));% 求解系数aA\b;% 4. 计算查询点处的拟合值ifstrcmp(basis_type,linear)p_x[1;x];elseifstrcmp(basis_type,quadratic)p_x[1;x;x^2];endy_predp_x*a;end2.3 基函数可视化可选%% 基函数权重分布可视化figure(Position,[100,100,800,400]);x_centerpi;% 中心点x_rangelinspace(x_center-2,x_center2,100);w_gaussexp(-((x_range-x_center)/1.5).^2);subplot(1,2,1);plot(x_range,w_gauss,b-,LineWidth,2);xline(x_center,r--,LineWidth,1.5);xlabel(x);ylabel(权重 w(x));title(高斯权重函数d_{max}1.5);grid on;subplot(1,2,2);% 显示局部基函数拟合x_localx_data(abs(x_data-x_center)1.5);y_localy_data(abs(x_data-x_center)1.5);plot(x_local,y_local,ro,MarkerSize,8);hold on;x_fitlinspace(x_center-1.5,x_center1.5,50);y_fit_linearpolyval(polyfit(x_local,y_local,1),x_fit);plot(x_fit,y_fit_linear,b--,LineWidth,2);title(局部线性拟合示例);xlabel(x);ylabel(y);grid on;三、关键参数说明参数作用建议值dmax影响域半径最重要数据间距的 1.5~3 倍basis_type基函数类型linear光滑或quadratic弯曲reg_param正则化参数1e-6 ~ 1e-8参数选择建议小dmax拟合更局部可能过拟合噪声大dmax拟合更全局可能丢失局部特征线性基适合光滑曲线二次基适合有拐点的曲线四、运行结果示例运行mls_sine_fit.m后你将看到拟合效果MLS 曲线平滑穿过噪声数据与真实正弦曲线高度吻合误差分布最大误差通常出现在曲线拐点处参数影响dmax过大导致过平滑dmax过小导致震荡典型输出最大误差: 0.0452 平均误差: 0.0128 RMSE: 0.0165五、扩展应用5.1 二维曲面拟合扩展代码% 二维 MLS 拟合示例框架functionz_predmls_2d(x,y,x_data,y_data,z_data,dmax)% 类似一维但基函数为 p(x,y) [1, x, y, x^2, xy, y^2]% 权重为 w exp(-(d/dmax)^2), d sqrt((x-x_i)^2(y-y_i)^2)end5.2 自适应影响域% 根据局部数据密度自适应调整 dmaxdmax_adaptive2*mean(diff(sort(x_data)));5.3 与最小二乘法对比方法优点缺点全局最小二乘简单、稳定无法捕捉局部特征移动最小二乘自适应、光滑性好计算量大样条插值精确通过所有点可能产生振荡参考代码 采用移动最小二乘法对平面正玄曲线进行拟合www.youwenfan.com/contentcsw/81774.html六、工程应用建议数据预处理去除明显异常点交叉验证用一部分数据验证拟合精度多尺度 MLS先用大dmax捕捉趋势再用小dmax细化实时应用预计算系数矩阵在线只需更新权重