【问题标题】:Matlab Error: Subscripted assignment dimension mismatchMatlab 错误:下标赋值维度不匹配
【发布时间】:2019-01-16 15:48:46
【问题描述】:

我正在尝试将十进制数转换为二进制数。它适用于常规十进制数。但是,当我输入 (25.10) 时,我得到了下标错误。

下面是我的代码。

function [binary] = decimal2binary(decimal)
% floor : rounds towards minus infinity
% rem : remainder after division
% num2str : converts numbers to strings
% fliplr : flips string bits to get correct order
i = 1.0;
q = floor(decimal/2);
r = rem(decimal, 2);
% THIS IS WHERE THE ERROR OCCURS binary(i) = num2str(r(i));
while 2 <= q
    decimal = q;
    i = i+1;
    q = floor(decimal/2);
    r = rem(decimal, 2);
    binary(i) = num2str(r);
end
binary(i + 1) = num2str(q);
binary = fliplr(binary);
end

【问题讨论】:

  • 输入25.10的输出应该是什么?
  • @LuisMendo 将十进制数转换为二进制...我的函数有小数点问题...
  • 附带说明,Matlab 有函数 dec2bin,dec2bin(25.10) 产生 '11001'(即 25)。我认为您的代码无法生成小数部分的二进制形式(0.10 = 0*0.5+0*0.25+0*0.125+1*0.0625...),从而产生“0.0001...”。也许提供一些关于您为什么要转换十进制数的上下文。
  • @FrankBoccia 您的代码使用什么方法?您是否使用调试器跟踪执行以查看发生错误时变量的值?你希望binary(i) = num2str(r(i)); 做什么(或者是binary(i) = num2str(r);?)

标签: matlab function


【解决方案1】:

假设有错误的那一行确实是:

binary(i) = num2str(r(i));

然后,当使用参数 25.10 调用函数时,在到达这一行之前,我们有:

i=1
r=1.10000
num2str(r(i)) = '1.1'

这就是归因的原因

 binary(i) = num2str(r(i));

不起作用。在 Matlab 中,binary(1) 是一个 1x1 字符数组。您正在尝试将 1x3 字符数组 ('1.1') 放入其中。

【讨论】:

  • 如何解决这个错误?我是否必须将另一个变量设为双精度才能存储此信息?
  • 您应该将 r(i) 舍入以使其等于 1 并忽略小数部分。然后你需要一个不同的逻辑来处理小数。回顾我之前的评论作为提示: (0.10 = 0*0.5+0*0.25+0*0.125+1*0.0625...) 产生 '0.0001...'
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
相关资源
最近更新 更多