Matlab 输入数组错误消息

Matlab 输入数组错误消息,matlab,Matlab,我试图得到一个N的列表,它将是[8 16 32 64 128 256 512 1024],但是当我输入数组时,我得到了“Size inputs must is scalar”,代码的零部分有一个错误 function Euler_second_order a = input('Enter your a = '); b =input('Enter your b = '); y0 = input('Enter y(t0) = '); N = input('Enter your N or Ns

我试图得到一个N的列表,它将是[8 16 32 64 128 256 512 1024],但是当我输入数组时,我得到了“Size inputs must is scalar”,代码的零部分有一个错误

function  Euler_second_order

a = input('Enter your a = '); b  =input('Enter your b = '); 
y0 = input('Enter y(t0) = '); N = input('Enter your N or Ns: ');

fprintf('        \nThe Second-Order Euler''s method\n')

for n = 1:numel(N) %iterate through the list of N
w = zeros(N+1,1); t = zeros(N+1,1);

w(1)= y0;

t(1) = a;
h = (b-a)/N; 

max = 0;
for k = 1:N     %suppose to go from 1 to the current N
  w(k+1) = w(k) + h*f(t(k),w(k)) + ((h^2)/2)*(Fprimet(t(k),w(k)) +      Fprimey(t(k)) * f(t(k),w(k)));
t(k+1) = t(k) + h;
    p = w(k) - Y(t(k)); 
    if max < abs(p) 
        max = abs(p); 
    end

  end
 fprintf('%5d %12.8f\n',N, max) %prints the N array
 end

function dydt = f(t,y)
dydt = y*(1 + exp(2*t));
end

function yexact = Y(t)
yexact = exp(t+(exp(2*t)-1)/2);
end

function dfdt = Fprimet(t,y) %derivative with respect to t
dfdt = 2*y*exp(2*t);
end

function dfdy = Fprimey(t) %derivative with respect to t
dfdy = 1 + exp(2*t);
end

end
函数Euler\u二阶
a=输入('输入您的a=');b=输入('输入您的b=');
y0=输入('输入y(t0)=');N=输入('输入您的N或N:');
fprintf('\n二阶Euler's方法\n')
对于n=1:numel(n)%n的列表
w=零(N+1,1);t=零(N+1,1);
w(1)=y0;
t(1)=a;
h=(b-a)/N;
max=0;
对于k=1:N%,假设从1到当前N
w(k+1)=w(k)+h*f(t(k),w(k))+((h^2)/2)*(f(t(k),w(k))+f(t(k))*f(t(k),w(k));
t(k+1)=t(k)+h;
p=w(k)-Y(t(k));
如果最大值<绝对值(p)
max=abs(p);
结束
结束
fprintf(“%5d%12.8f\n',n,max)%n打印n个数组
结束
函数dydt=f(t,y)
dydt=y*(1+exp(2*t));
结束
函数yexact=Y(t)
yexact=exp(t+(exp(2*t)-1)/2;
结束
函数dfdt=Fprimet(t,y)%对t的导数
dfdt=2*y*exp(2*t);
结束
函数dfdy=Fprimey(t)%对t的导数
dfdy=1+exp(2*t);
结束
结束

您在整个函数体中使用的是大写
N
,而不是迭代变量
N
。因此,您的主要功能最终将是:

for n = 1:numel(N) %iterate through the list of N
w = zeros(n+1,1); t = zeros(n+1,1);

w(1)= y0;

t(1) = a;
h = (b-a)/n;

max = 0;
for k = 1:n     %suppose to go from 1 to the current N
    w(k+1) = w(k) + h*f(t(k),w(k)) + ((h^2)/2)*(Fprimet(t(k),w(k)) +      Fprimey(t(k)) * f(t(k),w(k)));
    t(k+1) = t(k) + h;
    p = w(k) - Y(t(k));
    if max < abs(p)
        max = abs(p);
    end

end
fprintf('%5d %12.8f\n',n, max) %prints the N array
end
对于n=1:numel(n)%n的列表进行迭代
w=零(n+1,1);t=零(n+1,1);
w(1)=y0;
t(1)=a;
h=(b-a)/n;
max=0;
对于k=1:n%,假设从1到当前n
w(k+1)=w(k)+h*f(t(k),w(k))+((h^2)/2)*(f(t(k),w(k))+f(t(k))*f(t(k),w(k));
t(k+1)=t(k)+h;
p=w(k)-Y(t(k));
如果最大值<绝对值(p)
max=abs(p);
结束
结束
fprintf(“%5d%12.8f\n',n,max)%n打印n个数组
结束

它修复了错误,但输出错误。它打印出1,2,3。我想要81632