【问题标题】:Subscript indices must either be real positive integers or logicals - Matlab error下标索引必须是真正的正整数或逻辑 - Matlab错误
【发布时间】:2021-07-02 19:20:15
【问题描述】:

我正在尝试使用 euler 方法来使用 matlab 解决初始值问题

    close all; 
clear; 
clc;

a=0; %initial limit
b=1.2;% final limit
n=20; %Number of points
h=(b-a)/n; %step length

t=a:h:b;
wn(i+1)=[0.5 zeros(1,n)];

for i=1:n
wn(i+1)=wn(i)+h*(wn(i)-t(i)^2)+1;
end

yActual=(t+1).^2-0.5*exp(t);

err=abs(wn-yActual);

 disp('==============================================================================')
disp('   t_i              w_i                  y_i              |w_i-y_i| ')
disp('               (Approximation)      (Actual Value)         (Error) ')
disp('==============================================================================')


for i=1:n+1
fprintf('%0.5f \t %0.5f \t %0.5f \t %0.5f \n',t(i),wn(i),yActualI(i),err(i));
end

plot(t,wn,'-or','Linewidth',2)
hold on
gird on
plot(t,yActual,'-b','Linewidth',2)


xlabel('t')
ylabel('y')
legend('Euler Approximation','Actual Value')

但是当我运行代码时,它显示了这个错误,我搜索了很多,但没有找到解决它的方法:

Subscript indices must either be real positive integers or logicals.

Error in Assignment3_Q2 (line 11)
wn(i+1)=[0.5 zeros(1,n)];

我该如何解决?请您通过代码向我展示,因为我是 MatLab 的初学者

【问题讨论】:

  • 在 MATLAB 编辑器中,打开调试器以在出错时停止。然后运行你的程序。它将在您发生错误的 11 处停止。现在检查此时i 的值。它有你期望的价值吗?围绕这一点检查您的代码,为什么i 没有您期望的值?你在哪里设置它的值?
  • 在错误所在的行,i 被定义为复杂单位,因为这是默认值,您还没有重新分配它(尽管您稍后会这样做,这是不好的做法)。您向 Matlab 询问向量的 i+1th 元素,它可以理解地抛出错误。

标签: matlab numerical-analysis


【解决方案1】:

代码中有一些错字/错误...以下运行。原始代码中第 11 行错误的确切原因是,没有变量声明(例如,i = n),i 是复数中的单位虚部(即,0 + 1i),但这可能是不必要的详细说明您的目的。

close all; 
clear; 
clc;

a=0; %initial limit
b=1.2;% final limit
n=20; %Number of points
h=(b-a)/n; %step length

t=a:h:b;
wn=[0.5 zeros(1,n)];

for i=1:n
wn(i+1)=wn(i)+h*(wn(i)-t(i)^2)+1;
end

yActual=(t+1).^2-0.5*exp(t);

err=abs(wn-yActual);

 disp('==============================================================================')
disp('   t_i              w_i                  y_i              |w_i-y_i| ')
disp('               (Approximation)      (Actual Value)         (Error) ')
disp('==============================================================================')


for i=1:n+1
fprintf('%0.5f \t %0.5f \t %0.5f \t %0.5f \n',t(i),wn(i),yActual(i),err(i));
end

plot(t,wn,'-or','Linewidth',2)
hold on
grid on
plot(t,yActual,'-b','Linewidth',2)


xlabel('t')
ylabel('y')
legend('Euler Approximation','Actual Value')

【讨论】:

    猜你喜欢
    • 2016-06-12
    • 2016-02-16
    • 2014-09-11
    • 2016-02-14
    • 2013-02-05
    • 1970-01-01
    • 2012-12-29
    • 2014-09-25
    • 2013-04-19
    相关资源
    最近更新 更多