You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Hermite函数的函数最小二乘逼近问题求助

问题分析与修正方案

你遇到的Hermite函数最小二乘逼近效果不佳的问题,主要源于代码中基函数调用错误、Hermite多项式/函数定义偏差这两个核心问题,下面逐一拆解并修正:

1. 致命错误:逼近值计算时误用基函数阶数

你的calculateVal函数中,循环遍历系数p时,始终用k(基函数总阶数)作为Hermite函数的阶数,导致所有项都使用同一个k阶Hermite函数叠加,完全偏离了最小二乘的线性组合逻辑:

错误代码:

function[y] = calculateVal(p,a,k)
y=0;
for i=1:size(p)
    y = y+p(i,1)* hermite(a,k); % 所有项都用k阶Hermite,错误!
end
end

修正后:

function[y] = calculateVal(p,a)
y=0;
% 遍历每个系数,对应使用第i阶Hermite基函数
for i=1:length(p)
    y = y + p(i,1) * hermite(a, i);
end
end

同时主逻辑中调用calculateVal时,不需要传入k,改为calculateVal(p,x(i))。

2. Hermite多项式与函数的定义偏差

你实现的Hermite函数和多项式不符合标准正交Hermite函数的定义,这会破坏基函数的正交性,导致最小二乘系数求解失效:

问题1:Hermite多项式的一阶项错误

标准概率型Hermite多项式的递推中,$H_1(x)=2x$,你当前写的是h = x,这会导致基函数的形状完全错误:

修正hermitePar函数:

function[h] = hermitePar(k,x)
if (k>1)
    h = (2*x*hermitePar(k-1,x)) - ((2*k-2)*hermitePar(k-2,x));
elseif (k==1)
    h = 2*x; % 修正为标准H₁(x)=2x
elseif (k==0)
    h =1;
end
end

问题2:Hermite函数的指数权重错误

标准正交Hermite函数的形式是$H_n(x)e{-x2/2}$(而非你写的$e{-x2}$),这个权重是保证Hermite函数在实数轴上正交的关键:

修正hermite函数:

function[h] = hermite(x,k)
h = hermitePar(k,x) * exp(-x^2 / 2); % 修正指数权重为-x²/2
end

3. 其他优化建议

  • 简化采样点计算:在findCoeficients中,你已经生成了x=linspace(-1,1,N),后续计算-1+2*(i-1)/(N-1)其实就是x(i),可以直接替换,避免重复计算:
    Fi(i,j) = hermite(x(i),j);
    
  • 基函数索引一致性:如果你的Hermite多项式从k=0开始定义($H_0=1$),可以考虑将基函数的阶数从0到k-1,这样更符合数学定义,避免混淆。

修正后的核心代码验证

修正上述问题后,Hermite基函数的最小二乘逼近应该能达到和其他基函数类似的效果。你可以先测试小阶数(比如N=5,k=3)的情况,观察拟合曲线是否贴合目标函数$cos(\pi x)e^x$。

内容的提问来源于stack exchange,提问作者sswwqqaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:08:00