我在Matlab中构建算法存在问题。
鉴于:x(1)
和x(2)
然后:
x(3)=(x(1) + x(2))/2
x(4)=(x(1) + x(3))/2
x(5)=(x(3) + x(2))/2
x(6)=(x(1) + x(4))/2
x(7)=(x(3) + x(2))/2
...
即
让x(1)=0
,x(2)=1
,然后x(3)=0.5
(中点),x(4)=0.25
(x(1)
和x(3)
之间的中点),{{ 1}}(x(5)=0.75
和x(3)
之间的中点),x(2)
是x(6)
和x(1)
之间的中点,x(4)
是x(7)
之间的中点{1}}和x(3)
...
这意味着第一次迭代得到3分(x(5)
,x(1)
和x(3)
),第二次迭代产生5分(x(2)
,{{1} },x(1)
,x(4)
和x(3)
),第三次迭代得到9分(x(5)
,x(2)
,x(1)
,{{1} },x(6)
,x(4)
,x(7)
,x(3)
和x(8)
)。最后,x(5)
次迭代将产生x(9)
个点。
如何使用Matlab实现此逻辑?
答案 0 :(得分:1)
现在你已经清楚了。 :)
你想要的是这个:
clear x;
x(1) = 7; % For example
x(2) = 11; % For example
nIter = 3;
for i = 1:nIter
newX = zeros(1, 2 * numel(x) - 1);
newX(1:2:end) = x;
newX(2:2:end) = (x(1:end-1) + x(2:end)) / 2;
x = newX;
end
disp(x)
但是,如果您查看结果,您会发现您正在做的事情与此相同:
clear x;
x(1) = 7;
x(2) = 11;
nIter = 3;
x2 = linspace(x(1), x(2), 2 ^ nIter + 1);
disp(x)