Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 当应用于值数组时,索引超过了矩阵维度_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 当应用于值数组时,索引超过了矩阵维度

Arrays 当应用于值数组时,索引超过了矩阵维度,arrays,matlab,matrix,Arrays,Matlab,Matrix,我在Matlab中编写了以下问题,以获得数字的前3位 设x为实数 function [y]=mifl(x) % mifl=my float s=num2str(x); y=sscanf(s(1:4),'%f'); end 因此函数mifl返回数字的前3位。 比如说, mifl(pi)=3.14 但当我尝试将这个函数应用于向量v的所有值时,我得到了“索引超过了矩阵维数”。我不明白为什么 我曾经 v=linspace(0.1, 99.9, 1000); w=[] for i=1:5

我在Matlab中编写了以下问题,以获得数字的前3位

设x为实数

function [y]=mifl(x) % mifl=my float
  s=num2str(x);
  y=sscanf(s(1:4),'%f');
end 
因此函数mifl返回数字的前3位。 比如说,

mifl(pi)=3.14
但当我尝试将这个函数应用于向量v的所有值时,我得到了“索引超过了矩阵维数”。我不明白为什么

我曾经

v=linspace(0.1, 99.9, 1000);
w=[]
  for i=1:5
    w(i)=mifl(v(i))
  end
这时我得到了“索引超过了矩阵维数”

最后,我想要的是,给定一个向量

v=linspace(0.1, 99.9, 1000); 
w=[mifl(0.1),...mifl(99.9)]
得到一个向量

v=linspace(0.1, 99.9, 1000); 
w=[mifl(0.1),...mifl(99.9)]

原因是您在函数中指定的数字没有三位有效数字。具体来说,从向量中尝试
0.1
。它没有3个数字,所以你会得到一个越界错误,因为你假设它有

同样,在函数中,检查字符串的长度并确保有4个字符要提取。如果没有,则获取任何可用信息:

function [y]=mifl(x) % mifl=my float
  s=num2str(x);
  m = min(numel(s), 4); %// Change
  y=sscanf(s(1:m),'%f');
end 
如果您尝试上述方法,您的代码现在应该可以工作了


我还建议您在填充数组之前预先分配,以提高速度

具体而言:

v=linspace(0.1, 99.9, 1000);
w=zeros(numel(v),1);
for i=1:numel(v)
   w(i)=mifl(v(i));
end

w
被初始化为一个0数组,长度与
v
一样长,然后我们将遍历
v
中的每个值并调用
mifl
,然后将该结果存储在
w
中的相应位置。您可以使用Matlabs
rand
函数

y = round(x,3,'significant');

这将返回向量
x
中每个数字的前3位有效数字。这段代码对其他人来说也很容易理解,因为round是一个内置的Matlab函数,用于取整。参数
“重要”
应该足够清楚。这也适用于大于100的数字,这使得它更通用。当然,如果您要查找的是3位有效数字,而不是数字中的前三位数字,则会出现这种情况。在这种情况下,这将不起作用。然后,数字1001将是1000,而不是您的解决方案所给出的100。

只是一个问题,您的意思是希望返回前3位数字,还是希望返回3位有效数字?这样输入1234567将返回1230000。我只是考虑0.1到99.9之间的数字(这些都是这个问题的可能值),所以我认为函数定义得很好。对不起,我不是有意批评。如果听起来是那样,我很抱歉。我的观点是,在需要3个有效数字的情况下,有一个Matlab解决方案。看我的答案。哦,根本不需要道歉。谢谢你的回答。程序将数字x(例如pi)返回到浮点数字系统中的一个数字中,基数为10,精度为3,指数介于-1和1之间(在示例3.14中)。函数中有一个错误信息,超出了该范围。我还需要考虑CHOP舍入,因此,例如,2.347和2.341变成2.34。@ FaCETT512-我的荣幸。祝你好运