Использование fminsearch для решения уравнения

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

Здесь мне нужно построить phy_s для разных значений vgb,

Я пробовал много способов, но так как я новичок в Matlab, я в процессе обучения, я не могу найти правильное решение.

Мало кто предложил мне использовать fminsearch но это довольно запутанно, и я получаю много ошибок.

1 ответ

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. (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 снова с исправленными уравнениями.

Другие вопросы по тегам