循环时的Matlab;函数中的函数

时间:2013-03-08 23:38:47

标签: matlab

如何将一个函数循环到另一个函数中,直到两边相等?

例如

我找到这个“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的值

2 个答案:

答案 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”的特定方程应用相同的逻辑,但要注意并非所有方程都适用于定点迭代。