防止Matlab对输出结果进行四舍五入?

3

我正在运行一个简单的脚本来估计函数的根。一切都很顺利,算法的每次迭代都会打印出当前的x和f(x)。但是当脚本完成并将最终的x估计值作为函数的输出时,该值会被返回并四舍五入到小数点后三位。

while k < maxit
    k = k + 1;
    dx = b - a;
    xm = a + 0.5*dx;       %  Minimize roundoff in computing the midpoint

    fm = feval(fun, xm, diameter, roughness, reynolds);

    fprintf('%4d  %12.20e  %12.4e\n',k,xm,fm); 

    if (abs(fm)/fref < feps) | (abs(dx)/xref < xeps) % True when root is found
        r = xm;  
    return;
end

这里是输出的尾部:
k       xm            fm
45  6.77444446476613980000e-003   1.3891e-012
46  6.77444446478035060000e-003  -1.3380e-011
47  6.77444446477324520000e-003  -5.9952e-012
48  6.77444446476969250000e-003  -2.3022e-012
49  6.77444446476791610000e-003  -4.5830e-013

    ans =

        0.0068

我不知道为什么它会四舍五入输出......我该如何避免这种情况?

只需像在函数内部一样打印返回值:x = myRootsFunction(...); fprintf('%12.20e\n',x) - Amro
2个回答

7

在运行脚本之前,在命令行中尝试输入“format longE”。


这只是更改命令窗口中的值的显示方式 - 我相信,如果您在后续计算中使用“ans”,它会使用其完整精度。 - Andrew_L

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接