plot 数据必须为可转换为双精度值的数值、日期时间、持续时间或数组



以下是求解 y 关于 g 的函数的 MATLAB 代码:

syms a b c d g
assume(0 < g & g < 2 | g >= 2); % 声明符号变量的定义域

b = piecewise(0 < g & g < 2, d/g, g >= 2, d*g); % 定义 b

y = a * b * c; % 定义 y

dy = diff(y, g); % 求导

f = simplify(dy, 100); % 简化结果

disp(['y(g) = ' char(f)]); % 显示结果
 
plot(g,y)%绘图

为什么会出现“错误使用 plot
数据必须为可转换为双精度值的数值、日期时间、持续时间或数组。”的问题?如何解决?

这个错误是因为你试图使用 plot 函数来绘制符号表达式 y,而 plot 函数需要的是可以转换为双精度值的数值、日期时间、持续时间或数组。符号表达式 y 并不满足这个条件。

解决这个问题的一种方法是将 g 的值设定为一个具体的数值范围,然后使用 subs 函数来计算 y 在这个范围内的值,然后再进行绘图。以下是一个示例:

syms a b c d g
assume(0 < g & g < 2 | g >= 2); % 声明符号变量的定义域

b = piecewise(0 < g & g < 2, d/g, g >= 2, d*g); % 定义 b

y = a * b * c; % 定义 y

dy = diff(y, g); % 求导

f = simplify(dy, 100); % 简化结果

disp(['y(g) = ' char(f)]); % 显示结果

% 定义 g 的值范围
g_values = linspace(0, 3, 100);

% 计算 y 在 g 的值范围内的值
y_values = subs(y, g, g_values);

% 绘图
plot(g_values, y_values)

请注意,你需要为 acd 设定具体的值,否则 subs 函数将无法计算 y 的值。

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:plot函数设置颜色、字体
  • 除此之外, 这篇博客: 数据分析学习笔记---碎片知识总结中的 分两次plot,即可实现一张表出现两条线关于一个变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • plt.xlabel("epoch")
    plt.ylabel("MAE")
    plt.plot(train_mae_loss,label="train")
    plt.plot(test_mae_loss,label="test")
    plt.legend()