how to solve this error: objective function is returning undefined values at initial point. fsolve cannot continue.

29 次查看(过去 30 天)
clc;
clear all;
close all;
q=1.6*10^(-19); % charge; unit Coulomb
m0=9.11*10^(-31); % rest mass of electron; unit Kg
m=0.64*m0; % effective mass; unit Kg
h=6.634*10^(-34); % Planks Constant; unit Js
hcross=h/(2*pi); % reduced Planks Constant; unit Js
D0=m/(pi*hcross^(2)); % 2D density of states; unit cm^-2ev^-1
K=1.38*10^(-23); % Boltzmann Constant; unit J/K
T=300; % Temperature; unit K
E0 = 0.84*q; % Half of energy gap in eV
Vo = E0/q; % Half of energy gap in V
Vt = K*T/q; % Threshold Voltage in V
L=4*10^(-4); % Length of the channel (cm)
W=9.9*10^(-4); % Width of the channel (cm)
e=8.854*10^(-14); % Permittivity of free space (F/cm)
e_tox =4; % Relative permittivity of SiO2
t_tox=300*10^(-7); % Thickness of oxide (cm)
mobility=150; % Drift mobility (cm^2/Vs)
Cox=(e*e_tox)/t_tox; % Gate oxide capacitance per unit area (F/cm^2)
Vds = 0.01; % Drain source voltage (V)
Cdq = 37.957; % Degenerate limit of quantum capacitance (muF/cm^2)
A1 = 1 /(D0*K*T);
Vgs = (-50:0.1:50)';
x0 = ones(size(Vgs,1),1);
opts = optimoptions(@fsolve,'MaxFunctionEvaluations',500*numel(x0));
options = optimoptions('fsolve','Display','iter');
Nch = fsolve(@(x)solve_nch(x,Vo,Vt,q,Cox,Vgs,A1),x0,options);
plot(Vgs,Nch);
function F = solve_nch(x,Vo,Vt,q,Cox,Vgs,A1)
nch = x;
F = Vo + Vt.*log(exp(A1.*nch)-1) + q.*nch/Cox - Vgs;
end

回答(1 个)

Alan Weiss
Alan Weiss 2021-4-5
编辑:Alan Weiss 2021-4-5
I suggest that you learn to use the debugger. I put a break point in the solve_nch function, and found that at the first function call the value of A1 was about 1e-17 and nch was a vector of 1. Therefore exp(A1*nch) = 1 and so the logarithm evaluated to -Inf.
Alan Weiss
MATLAB mathematical toolbox documentation
P.S. Perhaps I should point out that for small a, , so

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by