【问题标题】:Using fminsearch to solve an equation使用 fminsearch 求解方程
【发布时间】:2012-04-29 13:32:09
【问题描述】:
(vgb-phy_s)^2=G^2*phy_t*((exp(-x)+x-1)+exp(-(2*phi_b/phi_t))*(exp(x)-x-1))

在哪里

x=phy_s/phy_t
phy_t=0.0288; % phy_t=k*T/q; (k=1.3806503*10^-23, T=300 K, q=1.6*10^-19)
phy_b=0.5267; % phy_b=phy_t*ln(Na/ni)
G=(sqrt(2*q*es*Na)/cox);

这里我需要为vgb 的不同值绘制phy_s

我尝试了很多方法,但由于我是 matlab 新手,我正在学习过程中,我无法找到合适的解决方案。

很少有人建议我使用fminsearch,但它很混乱,而且我遇到了很多错误。

【问题讨论】:

  • 您正在尝试绘制(x-y)^2 = k 形式的图形;你可以用一些简单的代数得到y 的表达式x...
  • 好吧,谢谢。但是 fminsearch 命令可以用于上述方程吗?
  • 你的等式不正确:你有[,但没有]。此外,MATLAB 将[] 用于连接和矩阵,而不是用于操作顺序。在 MATLAB 中,2phi_b 不是有效的表达式。您必须使用2*phi_b。请编辑您的问题并修正这些不正确的表达式,以便清楚您要解决的方程或方程组是什么。
  • @nrz:我认为这不是 Matlab 语法...

标签: matlab equation-solving fminsearch


【解决方案1】:

fminsearch 是一个函数,用于求函数的最小值,而不是求方程的解。此外,这里没有一个方程,而是一个至少包含 5 个方程的方程组。您可以使用solve 来求解方程和方程组。但是,下列方程 1-5 的方程组没有显式解。另一个问题是您提出的常数值似乎是不精确的值,如果您有多个四舍五入或其他不精确的值,即使方程组是可解的,您也无法找到解(但是,this equation group没有[明确的]解决方案))。

所以,我将展示解决这个问题的步骤,但这个方程组似乎有问题,即使 [可能不精确] 常量定义 (phy_t=0.0288; phy_t=k*T/q; (k=1.3806503*10^-23; T=300; q=1.6*10^-19; phy_b=0.5267;`) 被遗漏了。

方程(没有常量定义):

1. (vgb-phy_s)^2 = G^2*phy_t*((exp(-x)+x-1)+exp(-(2*phi_b/phi_t))*(exp(x)-x-1))
2. x = phy_s/phy_t
3. phy_t = k*T/q
4. phy_b=phy_t*ln(Na/ni)
5. G=(sqrt(2*q*es*Na)/cox)

解决例如。方程组 1、2 和 3:

Solution = solve('(vgb-phy_s)^2 = G^2*phy_t*((exp(-x)+x-1)+exp(-(2*phi_b/phi_t))*(exp(x)-x-1))', 'x = phy_s/phy_t', 'phy_t = k*T/q');

Solution.q
ans =
(T*k)/phy_t
(T*k)/phy_t

Solution.vgb
ans =
phy_s + (G*phy_t^(1/2)*(exp((2*phi_b)/phi_t) - exp(phy_s/phy_t) + exp((2*phy_s)/phy_t) - exp((2*phi_b)/phi_t)*exp(phy_s/phy_t) - (phy_s*exp(phy_s/phy_t))/phy_t + (phy_s*exp((2*phi_b)/phi_t)*exp(phy_s/phy_t))/phy_t)^(1/2))/(exp((2*phi_b)/phi_t)^(1/2)*exp(phy_s/phy_t)^(1/2))
phy_s - (G*phy_t^(1/2)*(exp((2*phi_b)/phi_t) - exp(phy_s/phy_t) + exp((2*phy_s)/phy_t) - exp((2*phi_b)/phi_t)*exp(phy_s/phy_t) - (phy_s*exp(phy_s/phy_t))/phy_t + (phy_s*exp((2*phi_b)/phi_t)*exp(phy_s/phy_t))/phy_t)^(1/2))/(exp((2*phi_b)/phi_t)^(1/2)*exp(phy_s/phy_t)^(1/2))

Solution.x
ans =
phy_s/phy_t
phy_s/phy_t

请注意,此解仅对方程组 1-3 有效。例如方程组 1、2、4 或 1、2、5 给出不同的解。

要求解所有 5 个方程的方程组,您可以使用以下方法:

Solution = solve('(vgb-phy_s)^2 = G^2*phy_t*((exp(-x)+x-1)+exp(-(2*phi_b/phi_t))*(exp(x)-x-1))', 'x = phy_s/phy_t', 'phy_t = k*T/q', 'phy_b = phy_t*ln(Na/ni)', 'G = sqrt(2*q*es*Na)/cox');

但是,没有解决办法:

Warning: Explicit solution could not be found. 
In solve at 160 

Solution =
[ empty sym ]

所以,我建议你尝试找出你的方程式有什么问题,然后用更正的方程式再次尝试solve

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多