MATLAB - 需要帮助绘制高度非线性函数

标签 matlab plot nonlinear-functions

这是我想在 MATLAB 中绘制的方程 -

enter image description here

我想将变量 Vbi-5 扫描到 +5,然后绘制变量 T > 对于 Nd = Na =10< 的 Vbi 的每个单独值(本质上是 TVbi) support>15、1016 和 1017

我知道 Vbi 可以通过创建向量来扫掠:

Vbi = -5 : 0.001 : 5;

但是我不知道如何解决这个问题,因为我从未遇到过类似的问题 这个之前。有人可以建议如何编码吗?

最佳答案

最简单的是使用循环遍历所需的所有值,并使用 fzero 查找非线性隐式函数的所有值:

% Values for Na/Nd you want
Na = [1e15 1e16 1e17];
Nd = Na;

% Vbi values you want to sweep
VbiValues = -5 : 0.001 : 5;

% Initialize outputs
Tout = zeros(numel(VbiValues), numel(Na));

% Solve equation for each value of Vbi
for ii = 1:numel(VbiValues)
    for jj = 1:numel(Na)

        % Re-define equation for new value of Vbi, Na, Nd
        eq = @(T) -T + 11603.24*VbiValues(ii) ./ log(Na(jj)*Nd(jj)/2.798e39 * 300./T .* exp(13452./T));

        % Solve it
        Tout(ii,jj) = fzero(eq, 10);

    end
end

% plot results
plot(...
    VbiValues, Tout(:,1), 'r', ...
    VbiValues, Tout(:,2), 'g', ...
    VbiValues, Tout(:,3), 'b')
L = legend(...
    '$N_A = N_D = 10^{15}$',... 
    '$N_A = N_D = 10^{16}$',... 
    '$N_A = N_D = 10^{17}$');
set(L, 'Interpreter', 'LaTeX');

或者,如果您有优化工具箱,则可以使用fsolve:

function topLevelFunction

    % Values for Na/Nd you want
    Na = [1e15 1e16 1e17];
    Nd = Na;

    % Vbi values you want to sweep
    VbiValues = -5 : 0.01 : 5;

    % Use fsolve() to solve the system in one go
    Tout = fsolve(@(T)F(T, VbiValues, Nd), ones(numel(Nd),numel(VbiValues)));

    % plot results
    plot(...
        VbiValues, Tout(1,:), 'r', ...
        VbiValues, Tout(2,:), 'g', ...
        VbiValues, Tout(3,:), 'b')
    L = legend(...
        '$N_A = N_D = 10^{15}$',...
        '$N_A = N_D = 10^{16}$',...
        '$N_A = N_D = 10^{17}$');
    set(L, 'Interpreter', 'LaTeX');

end

function Fvals = F(Ttrials, Vbis, Nad)

    % Output function values for 
    % - all Vbi   (each column is a different Vbi)
    % - all Na/Nd (each row is a different Na/Nd) 
    Fvals = -Ttrials + bsxfun(@rdivide, ...
        11603.24*Vbis(:).', ...
        log( bsxfun(@times, Nad(:).^2/2.798e39, 300./Ttrials .* exp(13452./Ttrials)) ));

end

请注意,两个解决方案之一(或两个:)仍然包含错误,因为两个图不相同,但我确信这将帮助您入门。

关于MATLAB - 需要帮助绘制高度非线性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570368/

相关文章:

python - 非线性方程求解 Sympy Python for hydraulics - Need resolve TypeError ("can' t convert expression to float"

c - 使用 A Vedaldi 的 sift 实现

matlab - 在 MATLAB 中查找二维脉冲峰值

user-interface - 将 matlab 图存储在变量中并重复使用

r - 在 R 曲线中绘制 Logscale()

python - Pandas Plot,如何控制条形宽度和间隙

matlab - 显示集群 kmeans 数据上的行

python - 使用python求解非线性方程

java - Java 中非线性多变量函数的约束优化

R相当于MATLAB结构?