为什么我得到错误'下标索引必须是实正整数或逻辑。”?

1404次查看(过去30天)
为什么我会收到以下错误消息:
错误:下标索引必须是实正整数或逻辑数。

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2021年2月17日
当您尝试使用非正整数或逻辑值的索引对数组进行索引时,会发生此错误。以下是导致此错误消息的常见情况的一些提示:
1) 仔细检查索引是否为正整数。MATLAB中的索引不能为0,默认情况下,从1开始。
2)如果你使用逻辑索引索引到一个数组,确保你的索引数组是'logical'类型,而不是'double'数组的1和0。在尝试使用逻辑索引之前,您可以将'double'数组转换为逻辑数组。例如:
A=[1 2 3 4;5 6 7 8];
ind_double=[01101;01101];
ind_logical=逻辑(ind_double);
A(独立逻辑)
对于索引数组'ind',你可以使用' whoos '函数检查它的数据类型:
ind
如果你使用浮点运算来计算索引数组,那么数组的值可能不是精确整数。当您知道您的索引值接近您想要的整数索引时,'round'函数是很方便的。例如,
A=[1 2 3 4;5 6 7 8];
浮点数=2.00001;
ind_int =圆(ind_float);
(ind_float)
下面是一种检查索引数组“ind”是否包含精确整数值的方法。此命令返回一个“逻辑”数组,其中1表示索引值是精确整数值,0表示不是。
ind==圆形(ind)
4)如果你把一个变量赋给与MATLAB中内置函数同名的变量,那么你将重写该函数,并在尝试调用它时遇到错误。例如,
max =兰德(5);
一个=兰德(5);
马克斯(A)
在这种情况下,重命名你的变量并清除旧变量继续:
B = max;
清晰的最高(A)
有关MATLAB中索引的更多信息,请参见以下文档页面:
6评论
沃尔特·罗伯森
沃尔特·罗伯森 2018年9月25日
“在最近的Matlab更新中,这一点有没有改变?(我从2013年到2017年进行了更新)。在此之前,我从不需要从double转换为logical。”
R2013a:
>> A=rand(1,3), A([1 0 0])
一个=
0.8147 0.9058 0.1270
下标索引必须是实正整数或逻辑数。
与R2010bSP1相同,它是我目前安装的最古老的MATLAB。
如果我们检查R14文档, //www.tatmou.com/help/releases/R14/techdoc/matlab.html 在“特殊字符[](){}='..,;:%!@”的文档中,我们看到,
“V的分量必须是整数才能用作下标。如果任何此类下标小于1或大于X的大小,则会发生错误。”
这不是一个新的限制,不,MATLAB中没有任何设置可以改变这一点。

登录评论。

更多答案(20)

安东尼Pichot
安东尼Pichot 2015年11月19日
Iaredi Sabinas的评论应该是一个有效的答案。
当您有一个以现有matlab函数命名的变量(如min或diff)时,可能会发生这种情况。matlab认为您使用的是该变量而不是内置函数。
1评论
斯蒂芬。
斯蒂芬。 2015年11月19日
它是 已经 部分答案是: “另一个常见的原因是变量覆盖了函数名,从而遮蔽了函数。例如:……” 然后给出一个例子,说明这是如何发生的。

登录评论。


Schrecklich呃
Schrecklich呃 2017年3月18日
编辑:沃尔特·罗伯森 2017年4月4日
我得到了这个消息,当我试图使用'imread'处理图像,我有以下结构:
i=1:f
J = 1: c
B(i,j)=([A1(i,j)*A2(i,j)];
B1(i,j)=(A2(i,j)/A1(i,j));
结束
结束
我得到了同样的错误信息,所以直到30分钟的研究,我只是把字母“i”换成了“k”,错误信息消失了,我认为错误在那里,因为字母“i”是用来表示虚数的。
只是一点提示!希望它有用。

法拉·纳迪亚
法拉·纳迪亚 2016年4月22日
这个怎么样。有星号的单词…我如何声明..如果我运行这个prgoram它会出错..thnx很多
我= 0:1:maxrow-1
j=0:1:maxcol-1
%inv([i,j])=255-图像([i,j]);
k=0:1
[i, j] = image([i, j])
结束
结束
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2016年4月22日
MATLAB索引从1开始,而不是从0开始。您需要将1添加到所有索引中。
还要记住,sto([i,j,k])在三个位置对sto进行索引,sto(i),sto(j),sto(k)。它不是三维数组的索引:那将是sto(i,j,k)

登录评论。


普拉图什·洛胡米
普拉图什·洛胡米 2017年3月18日
编辑:沃尔特·罗伯森 2017年3月18日
n=0:ns
(n) = (ns-n) / ns;%滑
Tmech(n)=ph*V1eq^2*R2/((s(n)*ω气体)*((R1eq+R2/s(n))^2+(X1+X2)^2));%机电转矩
结束滑环结束
错误:下标索引必须是实正整数或逻辑数。(第2行)
质疑:似乎不能纠正这个错误吗?
如果有人能为这个循环提供一个有效的解释或更正的代码,那将对我的项目真正有帮助。
3评论
实施BOUGRINE
实施BOUGRINE 2017年4月4日
m = 1: num_pulse_int
%更新传感器和目标位置
[传感器位置,传感器水平]=传感器运动(1/prf);
[tgtpos,tgtvel]=tgtmotion(1/prf);

登录评论。


帕德米尼·库图鲁
帕德米尼·库图鲁 2017年4月26日
编辑:沃尔特·罗伯森 2017年4月26日
有人能帮我吗?谢谢!
j = 1: n
y(j)=(T(j)-Ts)/(tbts);
h (j) = (1/427) * (-0.0717) * L * (Tb-Ts) * (y (j + 1) - y (j - 1) / 2 *δ);
r(j)=(e*sigma*L^2*P*Ts^3)/(kAc)*(T(j)/Ts^3)+(T(j)/Ts^2)+(T(j)/Ts)+1;
c(j)=1-(h(j)*三角洲/2);
(j) = 2 + (r (j) *三角洲^ 2);
b (j) = 1 + (h (j) *δ/ 2);
结束
3评论

登录评论。


惠灵顿佩雷拉·盖德斯酒店
有人能帮我。当使用下面的代码时,我得到了这个错误:
W2=[];%将包含从图像中提取的水印信号
t=1:wmsz
W2=[W2(duw(IND(t,1),IND(t,2))/D(IND(t,1),IND(t,2)))*10]%水印提取
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年10月4日
让我们匹配括号。数字将是与下列字符对齐的字符“之后”的开放括号数:
W2=[W2(duw(IND(t,1),IND(t,2))/D(IND(t,1),IND(t,2)))*10]
1 2 3 4 3 4 32 3 4 3 4 321 0
我们从这里看到W2被索引
D_w(IND(t,1),IND(t,2))/D(IND(t,1),IND(t,2))
1 2 1 2 10 1 2 1 2 10
它包含一个除法。所以对于W2的下标是整数,D_w(IND(t,1),IND(t,2))必须是D(IND(t,1),IND(t,2))的一个非零整数的精确整数倍。这个条件不是 不可能的 ,但我倾向于怀疑这一点。

登录评论。


Yago维罗索
Yago维罗索 2017年10月6日
编辑:沃尔特·罗伯森 2017年10月6日
大家好!在我的代码中,我得到了同样的错误,我试图连接一个函数到我的主代码,其中函数提供了我的代码,我的系统方程解的所有变量。
下面是我的主要代码的一部分,我发现这个错误:
[Y1des]=ANN(Z1,e1,s1,D);
(交流、ao at_coluna kp, r1, r2, L, vj, ro_ar, visc_ar, k_ar,风湿性关节炎,P, t_ar, Tar_e, T_ar_ext, Urel_e, Urel, Uabs_e, cps, ro_p_ap, hparede, cal_lat, cpar, cpl, cpv, ro_p, dp,瑞银(Ubs)、u, Rep1ν,hp1, St, Rep2, hw1, e, ae1,让,X1, t_seg, X, ae,惠普、hw, d_xp, tt, z] = variaveis (h, Y1des,嗨,uar t_min);
[G,u,Pvse,Pve,UAEsat,UAE,He]=prop_ar(ro_ar,uar,ac,ao,at_coluna,t_ar,Tar_e,Urel_e,P);
[vl、mg、mss]=项目(ro_p_ap、ro_p、ro_ar、ac、hi、vj);
% % %初始条件
Tp(1)=298.15;
Tar_s(1)=Tar_e-((1-exp(-X(1)))*(Tar_e-Tp(1));
焦油量(1)=焦油量(1)-273.15;
这是错误消息
下标指数必须是正的
整数或逻辑值。
错误在Dif_finitas_plus_ANN中(第44行)
Tar_s (1) = Tar_e -
((1-exp (- x (1))) * (Tar_e-Tp (1)));
谢谢你的帮助!
3评论

登录评论。


MarkusP
MarkusP 2018年2月5日
编辑:MarkusP 2018年2月5日
大家好,也许你们中有人能帮助我……我tried to fix my problem with the solution above but it wasn`t possible.
如果我运行下面的脚本,我得到相同的错误消息。这个脚本是用特色的方法来解决问题的。
l = 1;
d = 0.01;
rho=1000;
f = 0.1;
= 1;
p0 = 2 e3;
v0=(p0*2*d/(l*rho*f))^0.5;
n=101;
h=l/(n-1);
(1: n) = v0;
p(1)=p0;
我= 2:n
p(i)=p(i-1)-f*rho*v0^2*h/(2*d);
结束
dt=h/a;
达峰时间= 3;
itmax=tmax/dt;
fhr = f * h / (2 * * d);
it=1:itmax
t=it*dt;
i=2:n-1
pa = p(张);
pb=p(i+1);
va=v(i-1);
vb=v(i+1);
电脑(我)= / 2 * ((pa + pb) / a +ρ* (va-vb) + fhr * (vb * abs (vb)弗吉尼亚州* abs (va)));
vc(i)=0.5*((pa-pb)/(a*rho)+va+vb-fhr*(vb*abs(vb)+va*abs(va));
结束
pc(1)=p0;
vb = v (2);
pb=p(2);
vc(1)=vb+(pc(1)-pb)/(a*rho)-fhr*vb*abs(vb);
vc (n) = v0 *阀(t);
弗吉尼亚州= v (n - 1);
pa = p (n - 1);
pc(n)=paρ*a(vc(n)-va)+f*h*rho/(2*d)*va*abs(va);%%错误在这行
vres(it,1:n)=vc(1:n);
pres(it,1:n)=pc(1:n);
p=pc;
v =风险;
结束
我的阀(t)功能如下所示:
作用vrel =阀(t)
如果t < 1。
vrel=1;
其他的
vrel=exp(-10*(t-.1));
结束
错误信息如下:
下标索引必须是实正整数或逻辑数。
错误在MOCwaterhammer中(第45行)
pc(n)=paρ*a(vc(n)-va)+f*h*rho/(2*d)*va*abs(va);
谢谢你的帮助!

Torsten
Torsten 2018年2月5日
编辑:Torsten 2018年2月5日
您忘记了一个乘法符号:
电脑(n) = pa-rho * - > * < -行(vc (n) va) + f * h *ρ/弗吉尼亚州(2 * d) * * abs (va);
最美好的祝福
托尔斯滕。


哈姆扎赛义德汗
哈姆扎赛义德汗 2018年12月21日
我想可能会有帮助。我自己将(t)从c(t)和m(t)中移除,如下所示:
clc
关闭全部的
清晰的全部的
%让我们赋值如下
A1 = 4
A2=2
f1=5
f2=6
t = 0.1:0.001:1
c=20*A1*cos(2*pi)*f1
m = 12 * A2 * cos(2 *π)* f2
y=c*m
图(y,t,“r”
xlabel(‘c(t)’
伊拉贝尔(‘m(t)’
网格在…上
祝福哈姆扎巴基斯坦人,哈哈

米格尔·安吉尔·古兹曼·德拉克鲁兹
?如何在以负数开始的for循环中设置范围?
诸如此类
因为我= 10000:100:10000
delta_g(我,1)= ((4 * R1 ^ 3 * sp * G) / 3) * (z1 / (z1 ^ ^ 2 + 2) ^ (3/2));
结束
萨鲁2


索非亚桑托斯
索非亚桑托斯 2020年5月8日
你好,我尝试使用round()并将double转换为逻辑,但是当我输入“whoos maximum”或“whoos minimum”时,什么都没有显示。我现在想要计算上升时间的最小时间和最大时间。
你能不能看看我的代码,看看能不能帮上忙?非常感谢!!
数据组织=导入数据(sinais,' \ t '7);%7列文本文件
EDA = data_org.data;
EDA=EDA(:,6);我只想要第6列的值
T = N / f;
t = (1: N) / fs;
最小= min (EDAuS_filter);
最大= max (EDAuS_filter);
amp=最大最小值;%信号幅度
tmin=t(最小值);
tmax=t(最大值);
上升时间=tmax tmin;
4评论
索非亚桑托斯
索非亚桑托斯 2020年5月8日
我不是在函数的上下文中执行此操作。我的想法是创建一个脚本,读取每个文本文件的六列,然后过滤该信号,获得振幅和时间上升。但是我很难找到相应的t。

登录评论。


Seahawkgo
Seahawkgo 2020年5月27日
编辑:沃尔特·罗伯森 2020年5月27日
请帮助我解决我有错误的函数的平均值:
下标下标必须是实正整数或逻辑数
Chanprojectpart32错误(第36行)
E (Zr) =意味着(Zr);
=====================
j = 1: n - 1
s1=0;
s2 = 0;
k = 1:没有+ 1
φ=(π-(-π))* rand-pi;%Phi-k
颗= Fd。* (cos((2 *π* k) / M));%颗
Bk=pi/(No+1)*k;% k(π/不+ 1)
..........
.........
y6=cos(2*pi*Fd*t+Phi);
s1=s1+y1*y2;
s2=s2+y5*y2;
结束
Zr = NN*s1 + MM*(y3*y6);
Zi = NN*s2 + MM*(y4*y6);
结束
E (Zr) =意味着(Zr);
E(子)=意味着(子);

Viktoriia Buliuk
Viktoriia Buliuk 2020年8月3日
您好!我正在尝试转换从.csv文件获取的数据。请您帮助我。我有以下错误:
下标下标必须是实正整数或逻辑数。
walvet>@(tau)hh(tau)*(2/(3^(1/2)*pi^(1/4))*exp(-(tau-ttt(j))/a(i))^2/2)*(1-((tau-ttt(j))/a(i))^2)中的错误
integralCalc/ iteratearrayvalue错误(第156行)
fxj =乐趣(t(1))。* w (1);
integralCalc/vadapt错误(第130行)
[q, errbnd] = iterateArrayValued (u tinterval pathlen);
integralCalc错误(第103行)
[q, errbnd] = vadapt (@minusInfToInfInvTransform间隔);
积分误差(第88行)
Q = integralCalc(有趣,a, b, opstruct);
walvet中的错误(第26行)
Q=整数(F,-Inf,Inf,'ArrayValue',true);
代码如下:
类型wet.csv
测试= importdata (“wet.csv”);
t=试验(:,1);
h=试验(:,2);
tt = max (t);
tr = min (t);
到达目标时间= tr: 4.0003 * 10 ^ -11: tt;
hh=interp1(t,h,ttt);
图(2);
图(t,h,“罗”);
持有在…上
图(ttt,hh,“g”);
a=0.3*10^-10:10^-11:10^-9;
i = 1:长度(a)
j = 1:长度(ttt)
F = @(τ)hh(τ)*(2 /(3 ^ ^(1/2)*π(1/4))* exp (- ((tau-ttt (j)) / (i)) ^ 2/2) * (1 - ((tau-ttt (j)) / (i)) ^ 2));
Q =积分(F负无穷到正无穷,“ArrayValue”,对);
K=(1/(a(i)^(1/2))*Q;
S=实(K);
结束
结束
等高线(ttt、hh、a、S、500)
非常感谢!!
2的评论

登录评论。


Destaw Masresha
Destaw Masresha 2020年12月13日
编辑:沃尔特·罗伯森 2020年12月13日
一种= (fc);
B=A((c*d-n+1):c*d);%选择方差的前n个
下标下标必须是实正整数或逻辑数
谁能帮帮我??
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年12月13日
什么是c和d?什么是n?
推测 你构造了c和d,这样你 预料 C *d总是一个整数,但它不总是 确切地 整数。例如,如果c为0.1:0.1:1,d为10,则可能 预料 c*d总是一个整数,但这将是假的:
格式长g
C = 0.1: 0.1: 1;
mat2str (c)
ans='[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]'
d=10;
mat2str(c*d)
ans='[1 2 3 4 5 6 7 8 9 10]'
Mat2str (c * d - (1:10))
ans='[0 0 4.4408920985006e -16 00 00 00]'
c(3)-0.3
ans=
5.55111512312578 e-17
经验教训:
  • 0.1不能精确表示为双精度
  • 将“数学上”是分数的双精度数字乘以“数学上”返回整数的某个数字…并不总是返回整数。0.3*10不返回3
  • 通过冒号运算符上的分数增量计算的数字,例如第三个值0.1:0.1:1,并不总是与预期的相应文字值完全相同。0.1+0.1+0.1不会为您提供与编写0.3时相同的值

登录评论。


普通费尔南多
普通费尔南多 2021年4月5日
编辑:沃尔特·罗伯森 2021年4月5日
大家好,也许你们中有人能帮助我……我tried to fix my problem with the solution above but it wasn`t possible.
为什么我会收到以下错误消息:
下标下标必须是实正整数或逻辑数。
三次DFT错误(第33行)
x = v ((j - 1: j + N0-2) * dt);
代码:
fs = 50 * 512;
dt=1/fs;
N0=fs/50
达峰时间= 1;
j_max=tmax*fs;
j = 1: j_max + 1
x = v ((j - 1: j + N0-2) * dt);
9评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年4月7日
你之前发布的代码是三个月前;我认为从那时起你已经进一步开发了代码。

登录评论。


neelu pareek
neelu pareek 2021年7月11日
请有人帮助我,因为我第一次得到这个错误,虽然在我的工作中多次计算和使用伽马函数。
t = [0: .5:1];
eta=0.8;伽马=0.03;p=0.9;pi=0.4;μ=0.75,西格玛=0.7
S=mu+(((1-p)*(pi)^(mu))-(.5*(mu)^2*(eta)^(mu))-(mu*(sigma)^(mu))*(t.^(mu)/gamma(mu+1)))
亩=
0.7500
西格玛=
0.7000
下标下标必须是实正整数或逻辑数。
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年7月11日
γ= 0。
gamma不再是函数,而是开始成为标量。gamma(mu+1)将尝试索引标量。

登录评论。


亚历山德拉·罗克萨娜
大家好,我想用有限差分法求解二维热方程。我也把k=0变成了k=1把u(k+1)变成了u(k)但还是没有结果。初始化是否正确?
clc
清晰的全部的
α=2;
L=50;
dx = 1;
dt = (dx ^ 2) /(4 *α);
γ=(α^ dt) / (dx ^ 2);
itert = 1000;
u = 0 (itert, L, L);
uinit = 0;
utop=100;
uleft=0;
ubottom=0;
uright = 0;
%边界条件
u (l - 1:,:) = utop;
u (:: 1) = uleft;
u(:,1,1)=ubottom;
u(:,:,L-1)=右;
k=0:itert-1
i=1:L-1
j = 1: l - 1
U (k+1,i,j) = gamma*(U (k,i+1,j) + U (k,i-1,j) +...
u(k,i,j+1)+u(k,i,j-1)-4*u(k,i,j))+u(k,i,j);
结束
结束
结束
显示器(u)
7评论

登录评论。

标签

还没有进入标签。

下载188bet金宝搏

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!