在MATLAB中生成非均匀的1D网格

时间:2017-02-04 20:18:17

标签: matlab mesh

我试图生成一个非均匀的1D网格,其中常数拉伸的值为0到1之间的值。

这是我尝试的代码,但我似乎无法让它工作。最终值永远不会是1,我不确定这是否是因为索引的数量需要改变,所以总距离保持不变。我是新手,我从来没有做任何类型的非结构化网格,所以任何帮助都会非常棒!

n = 20;    % number of indices
h = 1/(n-1);    % unstretched grid spacing
r = .9;       % stretching factor

x2 = zeros(n,1);
for i=2:n
    x2(i) = x2(i-1)+r^(i-2)*h;
end

1 个答案:

答案 0 :(得分:1)

如果您希望将n个节点放在01之间的比例为r的几何级数中,则节点将放置在

x(1) = 0
x(2) = h
x(3) = h + r*h
x(4) = h + r*h + r^2*h
...
x(n) = h*(1 + r + r^3 + ... + r^(n-2)) = 1

我们可以将h确定为

h = 1/sum(r^j, j = 0..(n-2)) = (r - 1)/(r^(n-1) - 1)

然后我们可以放置所有n个节点:

h = (r - 1)/(r^(n-1) - 1); % 1st grid spacing
x = [0, h*cumsum(r.^(0:(n-2)))];

n = 5r = 0.9的解决方案:

x = 
0.00000   0.29078   0.55249   0.78802   1.00000