Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中迭代求(X)的值_Matlab_Iteration_Equations - Fatal编程技术网

在matlab中迭代求(X)的值

在matlab中迭代求(X)的值,matlab,iteration,equations,Matlab,Iteration,Equations,我有下面的等式 (250-25)/((0.0106+1.89799*10^-3)+(log(x/15)/2*3.14*45)+(1/10*2*3.14*x))... ==157.19; 我试图找到x的值,使右手边等于左手边 到目前为止,我已经尝试了以下方法,但没有任何运气 syms x eqn=(250-25)/((0.0106+1.89799*10^-3)+(log(x/15)/2*3.14*45)+(1/10*2*3.14*x))... ==157.19; solve(eq

我有下面的等式

(250-25)/((0.0106+1.89799*10^-3)+(log(x/15)/2*3.14*45)+(1/10*2*3.14*x))...
    ==157.19;
我试图找到x的值,使右手边等于左手边

到目前为止,我已经尝试了以下方法,但没有任何运气

syms x
eqn=(250-25)/((0.0106+1.89799*10^-3)+(log(x/15)/2*3.14*45)+(1/10*2*3.14*x))...
    ==157.19;
solve(eqn,x)
结果是

ans =

(225*lambertw(0, (2*exp(8035698630091128826615/400116850530983344078848))/15))/2

试着用数值方法代替。不管怎么说,你没有使用有理数,所以即使你的符号解决方案可行,答案也没有意义

然后这样做:

1将您的职能定义为

f = @(x)(250-25)./((0.0106+1.89799*10^-3)+(log(x./15)/2*3.14*45)+(1/10*2*3.14.*x))-157.19
其中-157.19为右侧,这通常在求解方程时进行,因为这样可以使用一种求根的方法,例如牛顿-拉斐逊法

这里有一个复杂的情况,对数负数变得复杂。这意味着fzero在这里不起作用。它不在您的域中并不重要。幸运的是,matlab中还有另一个数值方程求解器可以处理这个问题

要解这个方程,试试看

myRoot = fsolve(f,15) % Number is tested to work good in this case and not
                      % a general best guess for numerical solutions
如果你试着从另一个方向走,你会有一个复杂的数字舍入错误。试试看

myRoot = fsolve(f,4)
这意味着为了得到实解,你需要去掉答案的虚部,这在这里是安全的,因为你知道虚部来自舍入误差

myRoot = real(fsolve(f,4))

如果您将上面链接中的解决方案应用于您的ans,您将得到13.5658。这里没有问题。编辑添加一个特定的问题。好答案!你的评论当然是正确的,顺便说一下,像fzerof[13.33 20]这样的东西确实有效。需要找到下限,以便发生符号变化,因此确实需要知道根的近似值。在这种情况下,fsolve显然是一个更健壮的通用解算器。@horchler,我明白了,很抱歉语气如此刺耳。我也删除了我的评论。