相关文章推荐
完美的馒头  ·  Ruby On ...·  1 年前    · 

1维插值:interp1(x,y,cha_x,‘method’,’’)

引入:对1对变量(x,y),我们没有他们的解析表达式,但可以通过实验得到一张(x:y)映射表。那么对于任意的x值,都可以通过插值来获得y输出。插值的本质:按照插值方式将表无限拓展。
功能:如上。建立(x:y)的任意映射。
实现方式:interp1(x,y,cha_x,‘method’,’’)
插值方式

  • 线性插值
    要求:cha_x必须是在x的区间范围内,若超出x的区间,插值结果为nan
    interp1默认插值方法为线性插值
  • 实例1:演示线性插值

    x=1:5;
    y1=x.^2;
    figure(1);
    plot(x,y1,'ro');
    hold on;
    cha_x=1:0.5:5;
    cha_y=interp1(x,y1,cha_x);
    plot(cha_x,cha_y,'gs')
    

    2维插值:interp2(mesh_x,mesh_y,z’,cha_x,cha_y)

    引入:所谓2维插值,即因变量有两个(x1,x2)。
    功能:建立(x1,x2):y的任意映射
    实现:

  • 插值一个点interp2(mesh_x,mesh_y,z’,cha_x,cha_y)
  • 插值更高精度的点,扩展表
    interp2(mesh_x,mesh_y,z’,mesh_cha_x,mesh_cha_y)
  • 实例1:IQmixer校准
    即通过实验建立

    1维插值:interp1(x,y,cha_x,‘method’,’’)引入:对1对变量(x,y),我们没有他们的解析表达式,但可以通过实验得到一张(x:y)映射表。那么对于任意的x值,都可以通过插值来获得y输出。插值的本质:按照插值方式将表无限拓展。功能:如上。建立(x:y)的任意映射。实现方式:interp1(x,y,cha_x,‘method’,’’)插值方式线性插值要求:cha_x必须是在x的区间范围内,若超出x的区间,插值结果为naninterp1默认插值方法为线性插值实例1:演
    此函数用内或相邻替换一维数组中的 NaN 方案假设数据是均匀分布的。 此函数不进行外推。 句法x = repnan(x); x = repnan(x,method); 描述x = repnan(x) 返回 x 无 NaN。 x = repnan(x,method) 指定替换原始 x 的 NaN 的方法。 方法可以是 'linear'(默认)对 x 中的缺失执行线性, 'nearest' 执行最近邻, 'spline' 使用 not-a-knot 结束条件执行样条, 'pchip' 是保形分段三次, 'cubic' 与 'pchip' 相同, 'v5cubic' 三次卷积通过 Matlab v5 算法'next' 用 x 中的下一个非 NaN 替换 x 中的 NaN , 'previous' 用 x 中先前的非 NaN 替换 x 中的 NaN
    该算法的灵感来自于 John D'Errico 的工作https://www.mathworks.com/matlabcentral/fileexchange/4551-inpaint_nans 但是,我确实注意到,与 griddata 相比,John D'Ericco 给出的 inpaint_nans 算法提供了更高的梯度。 因此,该算法提供了另一种解决方案,有些人可能会觉得它很有帮助。
    可以借助matlab自带的一个函数isnan来检查。如果涉及到计算机视觉图像矩阵处理方面,很可能是归一化的时候出现分母为0的情况。在分步调试的时候,最好在每一个可能出现NaN的地方使用isnan来做测试,例如 if isnan(FeatureMap) disp('BYFeature is a NaN!') break; end这是我的教训!
    拉格朗日是一种常见的方法,在MATLAB中也可以使用。它通过一个多项式来逼近已知数据点,从而实现对未知数据点的估计。 在MATLAB中,可以使用`polyfit`函数来进行拉格朗日。`polyfit`函数可以拟合一个多项式,并返回多项式的系数。 下面是一个使用拉格朗日进行数据拟合的示例: ```MATLAB % 已知数据点 x = [1 2 4 7]; y = [3 5 2 6]; % 使用拉格朗日进行拟合 n = length(x); % 数据点个数 p = zeros(1, n); % 多项式的系数 for i = 1:n % 计算拉格朗日基函数的系数 l = ones(1, n); for j = 1:n if j ~= i l = conv(l, [1, -x(j)]) / (x(i) - x(j)); % 添加到多项式中 p = p + y(i) * l; % 绘制拟合曲线 xx = linspace(min(x), max(x), 100); yy = polyval(p, xx); figure; scatter(x, y, 'ro'); % 绘制原始数据点 hold on; plot(xx, yy, 'b-'); % 绘制拟合曲线 xlabel('x'); ylabel('y'); legend('Data Points', 'Interpolated Curve'); 在上述示例中,`x`和`y`分别表示已知数据点的横纵坐标。通过计算拉格朗日基函数的系数,并将其与对应的纵坐标相乘,可以得到多项式的系数。然后使用`polyval`函数来计算拟合曲线在给定横坐标处的纵坐标。 最后,使用`scatter`函数绘制原始数据点,使用`plot`函数绘制拟合曲线。
    error: command C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe 34227
    error: command C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe m0_63715556: error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2这个问题怎么解决,求助大佬 error: command C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe Lxx_小白: 没有用,要疯了表情包