在MATLAB中使用函数时的错误

在MATLAB中使用函数时的错误,matlab,function,floating,Matlab,Function,Floating,我第一次在MATLAB中使用函数。函数体工作正常,但当从程序调用它时,它会给出一个错误 功能是: function f = adjust(value) if value < 0 s = -1; value = -value; else s = 1; end b = floor(value); value = value-b; value = s*value; f = sprintf('%.14f', value); 我想生成一系列精度为1e-14的值。 当我运行程序时,我

我第一次在MATLAB中使用函数。函数体工作正常,但当从程序调用它时,它会给出一个错误

功能是:

function f = adjust(value)
if value < 0
  s = -1;
  value = -value;
else
  s = 1;
end

b = floor(value);
value = value-b;
value = s*value;

f = sprintf('%.14f', value);
我想生成一系列精度为
1e-14的值。
当我运行程序时,我得到了错误

???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.

Error in ==> one at 6
    x(n) = adjust(temp);"

我不知道该怎么办。如果可以,请帮助我。

您的函数返回f作为sprintf的输出,sprintf是一个字符数组。不能将其放入x中,因为x已经被定义为包含双精度的
x(1)=0.3

您可能希望使用sprintf将值打印到屏幕上,以便进行检查,但您的函数应该返回一个数字,
value

ETA:正如Rody在评论中解释的那样,
格式可以用来改变Matlab显示数字的方式,但精度不会改变。类似地,
sprintf
可以控制格式,但不会更改值本身。在命令行中尝试以下行:

format short
value = 3.000000000012
format long
value

您的主程序中是否有一个名为
adjust
的变量?您可以使用
whos
命令来检查这一点。在循环中,在
x(n)=…
行之前显示
n
temp
y(n-1)
x(n-1)
a
adjust(temp)
的值。我想这会显示问题的所在。这就是确切的问题。但是如何通过保持精度10^-14来解决这个问题。有什么想法吗?@user2689061:MATLAB的精度总是最好的(~
1e-16
由IEEE754
double
确定)。因此,只需返回
即可满足您的
1e-14
需求。现在,MATLAB显示值的方式取决于
格式的设置。
format short
value = 3.000000000012
format long
value