Matlab 用fminsearch解一个方程

Matlab 用fminsearch解一个方程,matlab,equation-solving,fminsearch,Matlab,Equation Solving,Fminsearch,在哪里 这里我需要为vgb的不同值绘制phy\u s 我尝试了很多方法,但由于我是matlab新手,我正在学习过程中,我无法找到合适的解决方案 很少有人建议我使用fminsearch,但它非常混乱,而且我得到了很多错误。fminsearch是一个用于寻找函数最小值的函数,而不是一个方程的解。此外,这里没有一个方程,而是至少由5个方程组成的方程组。您可以使用solve求解方程和方程组。但是,下列方程式1-5的方程式组没有显式解。另一个问题是,您建议的常量值似乎是不精确的值,如果您有多个舍入值或其他

在哪里

这里我需要为
vgb
的不同值绘制
phy\u s

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


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

fminsearch
是一个用于寻找函数最小值的函数,而不是一个方程的解。此外,这里没有一个方程,而是至少由5个方程组成的方程组。您可以使用
solve
求解方程和方程组。但是,下列方程式1-5的方程式组没有显式解。另一个问题是,您建议的常量值似乎是不精确的值,如果您有多个舍入值或其他不精确值,则即使方程组是可解的,您也无法找到解决方案(但是,此方程组没有[显式]解)

因此,我将展示解决这个问题的步骤,但这个方程组似乎有问题,即使[可能不精确的]常数定义(
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、2和3):

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-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');

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
但是,没有解决办法:

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');

因此,我建议你试着找出你的方程有什么问题,然后用修正后的方程再次尝试
求解

你正在尝试用
(x-y)的形式绘制一些图形^2=k
;你可以通过一些简单的代数,用
x
得到
y
的表达式……好吧,谢谢。但是fminsearch命令可以用于上述等式吗?你的等式不正确:你有
[
但没有
]
。此外,MATLAB使用
[
]
用于串联和矩阵,而不是用于运算顺序。在MATLAB中,
2phi_b
不是有效的表达式。必须使用
2*phi_b
。请编辑您的问题并修复这些不正确的表达式,以便弄清楚您试图求解的方程或方程组是什么。@nrz:我不认为这是我的问题它的意思是Matlab语法。。。
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
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 ]