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

28 次查看(过去 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 中查找有关 Calculus 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by