2017清华4.29测试数学题 x_{n+1}=x_{n}+x_{n+1}, x

%北太天元求解2017清华4.29测试题目
% 已知数列{x_n}, 其中x_1 =a, x_2 = b, a,b 都是正整数,
% x_{n+1} = x_n + x_{n-1}, 若2008 为数列中的某一项, 则a+b
% 可能为 ( )
% A 8, B 9, C 10, D 11.
% 我们引入 c= a+b
x = zeros(2,30);
x(:,2) = [0; 1];% x_2=b 通过[c,b]* x(:,2)得到,[c,b]*[0;1] = b
x(:,3) = [1; 0];% x_3=c 通过[c,b]* x(:,3)得到,[c,b]*[1;0] = c
x(:,4) = [1; 1];% x_4=c+b 通过[c,b]*x(:,4)得到,[c,b]*[1;1]=c+b
x(:,5) = [2; 1];% x_5=2c+b 通过[c,b]*x(:,5)得到,[c,b]*[2;1]=2c+b
x(:,6) = [3; 2];% x_6=3c+2b 通过[c,b]*x(:,6)得到,[c,b]*[3;2]=3c+2b
M= [ 1 1 ;
1 0 ];
%x(:,n+1) = M* x(:,n) ;
for n= 3:29
x(:,n+1) = M * x(:,n);
end
%估计 x_n能够取得2008的n的一个下界
n_min = min( find ( sum(x) * 11 > 2008) );
%估计 x_n能够取得2008的n的一个上界
n_max = max( find ( x(1,:)*8 < 2008) );
[c,b] = meshgrid(8:11, 1:10);
%c 可能的取值8,9,10,11,
%b 可能取之 1:10, 因为 1<= b < c.
for n = n_min:n_max
z = x(1,n)*c + x(2,n)*b;
[行号,列号] = find( z == 2008);
if ( ~isempty(行号) )
fprintf("a+b 可以取值为 %d\n", c(行号,列号));
fprintf("b 此时取值为 %d\n", b(行号,列号));
fprintf("这是数列的第 %d 项\n", n);
fprintf("演草纸上的表达式 2008 = %d*%d+%d*%d\n\n", ...
x(1,n), c(行号,列号), x(2,n), b(行号,列号) );
end
end