-1

我第一次在 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);

主程序是

x(1) = 0.3;
y(1) = -0.4;
a = 36;
for n = 2:16 
   temp = a*(y(n-1)-x(n-1));
   x(n) = adjust(temp);
end

我想生成一些精确的值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);"

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

4

1 回答 1

6

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

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

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

format short
value = 3.000000000012
format long
value
于 2013-09-02T10:22:56.557 回答