You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用欧拉法绘图时T值显示异常问题求助

MATLAB欧拉法绘图异常问题排查与修复

核心问题定位

你的代码存在两个关键错误,导致T数组仅显示初始值:

  1. 迭代循环索引错误
    内层欧拉迭代从i=2开始,跳过了i=1的计算,导致T(2)始终为初始0值,后续仅更新T(3)到T(end)。若t数组长度较小,会出现大部分T值未被迭代的情况,绘图自然只显示初始值。

  2. 数组未每次循环重置
    C、T、Gbar、G、N在外部初始化,每次遍历C0_values时仅修改第1个元素,后续元素残留上一次循环的计算值,导致数据混乱。

修复方案

1. 修正循环索引

将内层循环的起始索引改为i=1,确保从初始值开始依次计算所有后续时刻的数值:

for i = 1:length(t)-1

2. 移数组初始化到循环内部

每次处理新的C0时,重新初始化所有数组,避免残留值干扰:

for j = 1:length(C0_values)
    % 每次循环重新初始化数组
    C = zeros(length(t), 1);
    T = zeros(length(t), 1);
    Gbar = zeros(length(t), 1);
    G = zeros(length(t), 1);
    N = zeros(length(t), 1);

    C(1) = C0_values(j);
    T(1) = 0.025 * K;
    Gbar(1) = 0.1 * T(1);
    G(1) = K - Gbar(1);
    N(1) = K - T(1);

    % 迭代计算
    for i = 1:length(t)-1
        % Heaviside函数计算
        if Gbar(i) + G(i) >= 1
            H = 1;
        else
            H = 0;
        end

        % 欧拉法迭代
        C(i+1) = C(i) + dt * ((Pc * C(i) * (T(i) + Gbar(i))) / (gT + (T(i) + Gbar(i))) - (a * C(i) * T(i)) - ((1/tc) * C(i)));
        T(i+1) = T(i) + dt * (mT * T(i) * (1 - (T(i) / K)) - (wT * (G(i) + Gbar(i)) * T(i)) - (jT * T(i) * C(i)));
        Gbar(i+1) = Gbar(i) + dt * (mg * Gbar(i) * (1 - (Gbar(i) / Klim)) - (wg * Gbar(i) * T(i)) - (jg * Gbar(i) * C(i)));
        G(i+1) = G(i) + dt * (mg * G(i) * (1 - (G(i) / (K - Klim))) - (wg * G(i) * T(i)));
        N(i+1) = N(i) + dt * (w * (G(i+1) + Gbar(i+1)) * H * (-1 * (G(i+1) + Gbar(i+1))) * N(i));
    end

    plot(t, T, 'LineWidth', 0.1, 'DisplayName', sprintf('C0 = %.e', C0_values(j)));
    hold on;
end

3. 可选优化:Heaviside函数简化

可使用MATLAB内置的heaviside函数替代手动判断,简化代码:

H = heaviside(Gbar(i) + G(i) - 1);

验证建议

修复后可通过在迭代循环内添加disp(T(i+1)),实时查看T值的迭代更新情况,确认数值是否符合预期。

内容的提问来源于stack exchange,提问作者reen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:24:49