MatLab-指数函数未解

xwmevbvl  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(358)

在尝试求解下面的方程(方程n)中的p时,MatLab花费了很长时间来求解它,所以我不确定如何优化,或者是否存在更好的求解函数。它可以很容易地画出它,仅仅求解p的任何值似乎都是不可能的。

A_1 = 0.1044;
R_1 = 84.0038;
A_2 = 0.02667;
R_2 = 118.4852;
h_max_2 = 1.889;
q_s = 0.08;
a = 1/(A_2*R_2);
b = 1/(A_1*R_1);
c = 1/(A_1*A_2*R_1);

syms p
eqn = h_max_2 == q_s*c*1/(a*b)*(1+1/(a-b)*(b*exp(-a*p)-a*exp(-b*p)));
time_until = solve(eqn_2,p)
nwsw7zdq

nwsw7zdq1#

h_max_2移到另一边,找出方程什么时候是零,怎么样?这可以通过简单地调用fzero来解决。

eqn = @(p) q_s*c*1/(a*b)*(1+1/(a-b)*(b*exp(-a*p)-a*exp(-b*p))) - h_max_2;
time_until = fzero(eqn, 0)
time_until = -2.7137

或者,如果您想要具有正p的解决方案,请尝试使用初始猜测,例如p0 = 10

time_until = fzero(eqn, 10)
time_until = 4.4923

eqn(time_until)
ans = 0
idv4meu8

idv4meu82#

看一下代码的最后一行,没有eqn_2变量,所以我假设它应该是eqn。否则,如果您的工作区中确实有一个eqn_2,您可能正在尝试求解一个非常不同的函数。
您使用的是什么版本的MatLab?在R2021a上,您的代码在不到0.1秒内为我执行。它确实给出了消息Warning: Unable to solve symbolically. Returning a numeric solution using vpasolve.,因此您的最后一行可能应该修改为:time_until = vpasolve(eqn,p);。如果您的matlab版本没有自动跳到vpasolve,这可能解释了您所看到的情况。
对于更复杂的函数,在求解之前使用simplify可能会得到更快的结果,但在这种情况下,对我来说没有时间差,因为它已经很快了。
通常情况下,@Stewie-Griffin提出的解决方案(当函数为零时重新安排求解)可能是一种更好、更快的方法,但我想尝试用您尝试过的方法来解决这些问题。

相关问题