2017-02-04 7 views
1

Я пытаюсь создать неравномерное 1D сетки с постоянным растяжением на величину г между 0 и 1.Создание неравномерной 1D сетки в MATLAB

Это код, который я попробовал, но я могу Кажется, что это работает. Конечное значение никогда не будет 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 

ответ

0

Если вы хотите разместить n узлы в геометрической прогрессии между 0 и 1 с отношением 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 = 5 и r = 0.9:

x = 
0.00000 0.29078 0.55249 0.78802 1.00000 
+0

Спасибо! Это работает фантастически! – WnGatRC456

Смежные вопросы