{"title":"MATLAB 错误:Array indices must either be real positive integers, logicals, character arrays, or strings. 解决方法","description":"本文介绍了MATLAB错误“Array indices must either be real positive integers, logicals, character arrays, or strings.”的原因以及如何解决。解释了代码中错误的索引操作,并提供了修正后的代码。","keywords":"MATLAB, 错误, Array indices, 索引, 整数, 解决方法, 代码","content":"错误的原因是在索引操作中使用了非整数的索引。在MATLAB中,数组的索引必须是实数正整数、逻辑值、字符数组或字符串。\n\n要解决这个错误,需要检查索引操作并确保索引是整数。在代码中,有两个地方出现了错误:\n\n1. 在索引y(1:10).*c(3, 1:10)中,c是一个2x10的矩阵,所以应该使用整数索引值来获取其中的元素,例如c(3, 1:10)改为c(3, 1:10)。\n\n2. 在索引y(11:20).*c(3, 11:20)y(41:50).*c(3, 41:50)中,c是一个2x10的矩阵,所以应该使用整数索引值来获取其中的元素,例如c(3, 11:20)改为c(3, 11:20)。\n\n以下是修改后的代码:\n\nmatlab\na = [5.26 5.19 4.21 4.00 2.95 2.74 2.46 1.90 0.64 1.27;\n 1.90 0.99 1.90 1.13 1.27 2.25 1.48 2.04 3.09 3.51;\n 5.89 5.61 5.61 4.56 3.51 3.65 2.46 2.46 1.06 0.57;\n 0.64 1.76 1.27 1.83 2.74 2.60 4.21 3.72 5.05 6.10;\n 4.42 3.86 3.72 3.16 2.25 2.81 0.78 1.62 1.27 0.50];\nc = [0.95 1.05 1.00 1.05 1.10 1.25 1.05 1.30 1.35 1.25;\n 1.25 1.10 1.35 1.05 1.15 1.35 1.05 1.15 1.35 1.25;\n 0.3 0.28 0.29 0.32 0.31 0.33 0.32 0.31 0.33 0.31];\n\nprob = optimproblem;\ny = optimvar('y', 50, 'Type', 'integer', 'LowerBound', 0);\nsum = 0;\nfor i = 1:5\n for j = 1:10\n b = (i-1)*10+j;\n sum = sum + y(b)*y(b)*a(i,j);\n end\nend\nprob.Objective = 154*sum;\n\ncon = optimconstr(32);\ncum = sum(y(1:10));\ncon(1) = 154*cum >= 12000;\n\ntum = sum(y(10:20));\ncon(2) = 154*tum >= 13000;\n\nbum = sum(y(20:30));\ncon(3) = 154*bum >= 13000;\n\ndum = sum(y(30:40));\ncon(4) = 154*dum >= 19000;\n\nlum = sum(y(40:50));\ncon(5) = 154*lum >= 13000;\n\ncum1 = sum(y([1 11 41]));\ncon(6) = cum1*154 <= 9500;\n\ncum2 = sum(y([2 12 42]));\ncon(7) = cum2*154 <= 10500;\n\ncum3 = sum(y([3 13 43]));\ncon(8) = cum3*154 <= 10000;\n\ncum4 = sum(y([4 14 44]));\ncon(9) = cum4*154 <= 10500;\n\ncum5 = sum(y([5 15 45]));\ncon(10) = cum5*154 <= 11000;\n\ncum6 = sum(y([6 16 46]));\ncon(11) = cum6*154 <= 12500;\n\ncum7 = sum(y([7 17 47]));\ncon(12) = cum7*154 <= 10500;\n\ncum8 = sum(y([8 18 48]));\ncon(13) = cum8*154 <= 13000;\n\ncum9 = sum(y([9 19 49]));\ncon(14) = cum9*154 <= 13500;\n\ncum10 = sum(y([10 20 50]));\ncon(15) = cum10*154 <= 12500;\n\ncum11 = sum(y([30 21]));\ncon(16) = cum11*154 <= 12500;\n\ncum12 = sum(y([31 22]));\ncon(17) = cum12*154 <= 11000;\n\ncum13 = sum(y([33 23]));\ncon(18) = cum13*154 <= 13500;\n\ncum14 = sum(y([34 24]));\ncon(19) = cum14*154 <= 10500;\n\ncum15 = sum(y([35 25]));\ncon(20) = cum15*154 <= 11500;\n\ncum16 = sum(y([36 26]));\ncon(21) = cum16*154 <= 13500;\n\ncum17 = sum(y([37 27]));\ncon(22) = cum17*154 <= 10500;\n\ncum18 = sum(y([38 28]));\ncon(23) = cum18*154 <= 11500;\n\ncum19 = sum(y([39 29]));\ncon(24) = cum19*154 <= 13500;\n\ncum20 = sum(y([40 30]));\ncon(25) = cum20*154 <= 12500;\n\nfee = sum(y(1:10).*c(3, 1:10));\ntee = sum(y(1:10));\nft = fee/tee;\ncon(26) = ft <= 0.305;\ncon(27) = ft >= 0.285;\n\nhee = sum(y(11:20).*c(3, 11:20));\npee = sum(y(11:20));\ngt = hee/pee;\ncon(28) = gt <= 0.305;\ncon(29) = gt >= 0.285;\n\nqee = sum(y(41:50).*c(3, 41:50));\naee = sum(y(41:50));\nmt = qee/aee;\ncon(30) = mt <= 0.305;\ncon(31) = mt >= 0.285;\n\ncube = 0;\nfor i = 1:5\n for j = 1:10\n l = (i-1)*10+j;\n cube = cube + y(l)*a(i,j);\n end\nend\n\nleyan = sum(y);\n\ncon(32) = cube/14 + leyan*8/60 <= 8;\n\nprob.Constraints = con;\n[sol, fval, flag] = solve(prob);\nsol.y\n\n

MATLAB 错误:Array indices must either be real positive integers, logicals, character arrays, or strings. 解决方法

原文地址: https://www.cveoy.top/t/topic/qtGa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录