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