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

MATLAB绘图异常求助:双函数同图及误差图无法正常显示

问题排查与修正方案

咱们来一步步拆解你代码里的问题,顺便整理出能正常运行的完整方案:

你的代码核心错误点:

  • 代码未完成:最后一行的loglog(...没有写完,直接导致y2的绘制语句缺失,这是第一张图只显示y1的最直接原因。
  • y2的计算逻辑错误:你用了n*(log(n)'),这是矩阵乘法——行向量n(1×100)乘列向量log(n)'(100×1)会得到一个单一标量,而不是和n同长度的向量,就算写完绘图语句,也没法画出对应每个n的y2曲线。
  • 缺少第二个绘图窗口:你需要绘制相对误差的第二张图,但代码里只调用了一次figure,没有为新图创建独立画布。
  • (可选优化)阶乘数值溢出风险:虽然n=100时factorial(n)还没超出双精度范围,但n≥171时就会溢出为inf,用累加对数的方式计算ln(n!)会更稳定。

修正后的完整代码

n = 1:100;
format long;

% 计算y1:ln(n!),用累加对数的方式更稳定,避免大阶乘溢出
y1 = cumsum(log(n));
% 若坚持原方法,也可写 y1 = log(factorial(n)); (n=100时无问题)

% 计算y2:n*ln(n),必须用元素级乘法.*,确保每个n对应计算
y2 = n .* log(n);

% 第一张图:同时绘制y1和y2
figure;
loglog(n, y1, 'b', 'DisplayName', 'ln(n!)');
hold on;
loglog(n, y2, 'r', 'DisplayName', 'n*ln(n)');
grid on;
legend('Location', 'best');
title('Comparison of ln(n!) and n*ln(n)');
xlabel('n');
ylabel('Value');
hold off;

% 第二张图:绘制相对误差((y2-y1)/y1)
figure;
rel_error = (y2 - y1) ./ y1; % 同样用元素级除法./
plot(n, rel_error, 'k');
grid on;
title('Relative Error: ((n*ln(n) - ln(n!))/ln(n!))');
xlabel('n');
ylabel('Relative Error');

修正点说明

  1. 补全绘图语句:完成了y2的loglog调用,还添加了图例、网格、标题等元素,让图表更易读。
  2. 修正向量运算:把矩阵乘法*换成元素级运算.*,除法也用./,确保每个n都能得到对应的计算结果。
  3. 新增第二个绘图窗口:调用figure创建新画布,专门绘制相对误差曲线。
  4. 优化y1的计算:用cumsum(log(n))代替log(factorial(n)),本质上ln(n!) = ln(1)+ln(2)+...+ln(n),这种方式避免了直接计算超大阶乘,适用性更广。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:27