需要MATLAB插值和排序点的帮助

1l5u6lss  于 2023-05-01  发布在  Matlab
关注(0)|答案(2)|浏览(109)

我成功地从a读取了数据。trk文件并解析其头和主体。现在我必须应用插值。在此之前,这里是关于我的变量的信息:
我有tracks <1x110470 struct>在tracks结构下,我有两个向量。它们是nPointsmatrixnPoints包括向量matrix中存在的点的数量。
例如,如果我选择轨道(1,95607),则nPoints=3且matrix={(1.2323,1.4441,2.345),(2.333,4.555,4.123)、(1.22,2.33,3.44)}
nPoints不是固定的数字。也可以是100等。但矩阵是一个nPoints*3向量。我总是有三个坐标。
现在我要做的是一个基本的插值,比如取一半的边界,然后添加新的点。让我假设,在轨道(1,2)下,我有三个点a,B,c,d,那么我需要添加点(a+b)/2和(b+c)/2和(c+d)/2。
首先,我甚至不能写一个成功的算法来做到这一点。你能帮帮我吗?(插值将应用于所有轨迹。但是我不会在轨道(1,1)和轨道(1,2)之间进行任何插值,我只会将其应用于轨道内的点,轨道中的点也不排序。)
第二,我想知道的是:有可能有一种进行参数化内插的算法。我的意思是:
假设我的观点是:a、B
如果参数=1,那么我只想加上(a+B)/2
如果parameter=2,那么除了parameter=1时的参数之外,我还希望有(a+(a+B)/2)/2和((a+b)/2)+b)/2
......
我想让它像这样反复进行。这可能吗?

c0vxltue

c0vxltue1#

我真的不知道你真正想要的是什么“参数化插值”,我把我最好的猜测放在这里。
我猜你想在某个时候做一个[a b c d] -> [a (a+b)/2 b (b+c)/2 c (c+d)/2 d]转换,可能需要多次迭代。
对于这个问题,我的解决方案是

ret = function interp(v, rounds)
    n=length(v);
    avg = (v(1:n-1)+v(2:n))./2;
    temp = [v(1:n-1); avg];
    ret = [temp(:), v(n)];
    if rounds>1
        ret = interp(ret, rounds-1);
    end
end

[a b c d] -> [a (a+b)/2 b (b+c)/2 c (c+d)/2 d]变换由下式给出
interp([a b c d], 1)
其他示例:interp([1 2], 2) -〉[1 1.25 1.5 1.75 2]

d4so4syb

d4so4syb2#

查看Signal Processing和官方Matlab帮助(F1)。

相关问题