Arrays 当应用于值数组时,索引超过了矩阵维度
我在Matlab中编写了以下问题,以获得数字的前3位 设x为实数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
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
中的相应位置。您可以使用Matlabsrand
函数
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-我的荣幸。祝你好运