【问题标题】:Bilinear interpolation in Matlab (without built in functions)Matlab中的双线性插值(没有内置函数)
【发布时间】:2016-11-10 17:52:16
【问题描述】:

我在理解如何在 Matlab 中编写双线性插值时遇到了一些麻烦。我们的任务让我们使用这个函数;

B(x,y) = z_(ij) + a*(x - xj) + b*(y - yi) + c*(x - xj)(y - yi)

我们正在构建 2 个函数,一个计算系数(我已经完成了,它通过了教授的“检查”算法)和另一个计算函数的函数。下面是我的代码。 我们得到了 x,y,z,xi, 和 yi,而 a,b,c 已经被计算出来了。

我的问题:该函数运行但在它应该只返回一个向量时返回一个矩阵。但是,它确实在第 1 列、第 1 行和第 2 行返回了正确的值,这让我很困惑。此外,我们给出的值是方阵 (z) 和 1x2 x 和 y 值,但是,在问题的第二部分中,我们给出了一个不是方阵的 z = m x n 矩阵,所以我的代码是不为此工作。以下是我当前的代码。任何帮助将不胜感激,但我不希望您只给我答案!

%Given x = [0,1], y=[0,1], z=[0,1;2,4], a = 1, b = 2, c = 1, xi = [0,.5],      yi = [0,.5]

function zi = bilinear_eval(x, y, z, a, b, c, xi, yi )
    [m,n] = size(z);
    for j = 1:length(xi)
        for i = length(x)
        zi(i,j) = z(j,j) + a*(xi(i) - x(j)) + b*(yi(i) - y(j)) + c*(xi(i) - x(j))*(yi(i) - y(j))
        end
    end
    end

【问题讨论】:

  • 这里为什么会有pythonc++ 标签?
  • 如果你想要一个矢量输出,那么你不应该同时使用ij 来索引zi
  • @taylorswift 我知道 python 和 c++,所以我假设如果有人能够以其中任何一种格式回答它,我也可以推断到 Matlab。但我为你删除了它们。
  • 我绝对意识到@excaza,但是,如果我简单地使用 i OR j,它只是覆盖了之前的任何内容,并且给了我不正确的值。我暂时使用这个索引来“查看”函数在所有迭代中返回的内容
  • @ovp 这是关于算法或编码的问题吗?

标签: matlab math interpolation


【解决方案1】:

我不知道您使用的插值顺序,但了解有限元分析中的拉格朗日多项式或形状函数在这里会有所帮助。

如果我有一个函数 f(x, y) 我想在四个值之间进行插值,我会这样写:

f(x, y) = f1*N1(r, s) + f2*N2(r, s) + f3*N3(r, s) + f4*N4(r, s)

在哪里

-1 <= r <= 1
-1 <= s <= 1

N1(r, s) = (1-r)*(1-s)/4.0
N2(r, s) = (1+r)*(1-s)/4.0
N3(r, s) = (1+r)*(1+s)/4.0
N4(r, s) = (1-r)*(1+s)/4.0

这种排列假设四个点的排列方式是f1在左下,f2在右下,f3在右上,f4在左上形成一个四边形。

插值函数的值范围从零到一。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多