如何将一个函数循环到另一个函数中,直到两边相等?
例如
我找到这个“f”后
f = (1/(-1.8*log(((epsilon/D)/3.7)^2 + 6.9/Re)))^2;
我想使用f的值并在此处输入
f = (1/ -2.0*log((epsilon/D) + (2.51/Re*sqrt(***f***))))^2
该程序应循环,直到双方彼此相等或相对接近。可接受的准确度或误差为0.00001
。
如何显示给出mme的f的值
答案 0 :(得分:1)
在我看来,你正试图解决一个表达
f = somefun(f);
其中f的初始值由
给出f = (1/(-1.8*log(((epsilon/D)/3.7)^2 + 6.9/Re)))^2
您最好的选择(如果您可以使用)是使用Matlab的优化工具箱,您可以将功能设置为最小化
f - somefun(f)
您可以使用optimset('TolFun', 1e-5);
如果你没有工具箱,那么在使用牛顿方法的评论中,drN的建议可能与任何方法一样好 - 你会从自己做的事情中学到更多。
答案 1 :(得分:1)
我假设您尝试在那里使用的修复点迭代,第一个代码行是起始估计值,第二个代码行是实际的定点迭代。
在这种情况下,您需要在测试连续迭代之间的差异时重复第二个语句。例如,像这样的东西。
f = 1;
df = 1;
while abs(df) > 0.0001
fnew = log(20/f);
df = fnew - f;
f = fnew;
end;
顺便说一句。以上是解决f * exp(f)= 20,[或等效f = ln(20 / f)]的定点迭代的简单例子。对“f”的特定方程应用相同的逻辑,但要注意并非所有方程都适用于定点迭代。