使用词干时出错(第 43 行)X 必须与 Y 的长度相同

Error using stem (line 43) X must be same length as Y

我正在尝试使用带有词干的 matlab 对二分法进行错误处理 误差是通过 abs(x2-x1) 为每次迭代计算的,所以我需要使用 stem 来绘制它 输出必须是这样的:

这是我的代码:

close all; clear ; clc; 
 syms x;
 
 f=@(x)(x^(2))-(2);
 x1=1;
 x2=2;
 acc=10^(-8);
 n=0;
 
 
 
 disp ('            Bisection Method')
 disp ('===========================================')
 disp ('iteration     root(P-hat)            error')

 
 while (abs(x2-x1)>acc)
     n = n + 1; 
     xm=(x1+(x2-x1)/2); 
     if (f(x1)*f(xm)<0)
         x2=xm;
     else
         x1=xm;
     end
     figure(1)
     X = linspace(0,30);
     Y = abs(x2-x1);
     stem(X,Y);
     grid on
     hold on
     
     fprintf('%3d %20.8f %20.10f \n', n, xm, abs(x2-x1));
 end

我看到了这个错误:

            Bisection Method
===========================================
iteration     root(P-hat)            error
Error using stem (line 43)
X must be same length as Y.

Error in Ass1Bisection (line 28)
     stem(X,Y);

如您所见,迭代、根和错误的值甚至因为这个错误而没有打印出来

我该如何解决?

在这种情况下,Y 被创建为空,指令 Y(end+1) 将使其添加一个元素。

close all; clear ; clc; 
 syms x;
 
 f=@(x)(x^(2))-(2);
 x1=1;
 x2=2;
 acc=10^(-8);
 n=0;
 
 
 
 disp ('            Bisection Method')
 disp ('===========================================')
 disp ('iteration     root(P-hat)            error')

 Y = []
 while (abs(x2-x1)>acc)
     n = n + 1; 
     xm=(x1+(x2-x1)/2); 
     if (f(x1)*f(xm)<0)
         x2=xm;
     else
         x1=xm;
     end
     figure(1)
     Y(end+1) = abs(x2-x1);
     stem(1:length(Y),Y);
     grid on
     hold on
     
     fprintf('%3d %20.8f %20.10f \n', n, xm, abs(x2-x1));
 end