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

如何根据x的不同取值代入对应方程绘制分段函数图像

分段函数绘制实现方案

常见出错原因

  • 表达式存在笔误:原表达式包含全角减号、漏写乘号、重复幂次项问题,先做修正:第一个区间重复的-5.6*(x^3)与-16.2*(x^3)合并为-21.8*x^3,重复的3.6*x^2与6.2*x^2合并为9.8*x^2;第二个区间1.2(x^2)补全乘号为1.2*x^2,所有全角符号替换为半角符号。
  • 逻辑判断误用:直接对整个x向量做if判断时,MATLAB仅当向量内所有元素都满足判断条件才会进入分支,不会自动逐元素判断,导致结果不符合预期。

方案1:逻辑索引实现(推荐,无需循环)

该方法是MATLAB中处理分段函数的标准写法,代码简洁运行效率高:

dx = 0.1;
x = 0:dx:30;
f = zeros(size(x)); % 提前初始化函数值数组

% 匹配x<5的区间赋值
idx1 = x < 5;
f(idx1) = 0.1.*x(idx1).^4 -21.8.*x(idx1).^3 +9.8.*x(idx1).^2 +11.5.*x(idx1) -9.8;

% 匹配5<=x<20的区间赋值
idx2 = x >=5 & x <20;
f(idx2) = 0.4.*x(idx2).^3 +1.2.*x(idx2).^2 +9.7.*x(idx2) -89.6;

% 匹配x>=20的区间赋值
idx3 = x >=20;
f(idx3) = 0.8.*x(idx3).^2 +8.9.*x(idx3) -8.2;

% 绘制图像
plot(x,f,'LineWidth',1.5)
xlabel('x')
ylabel('f(x)')
title('分段函数图像')
grid on

方案2:for循环实现(对应你原有实现思路)

如果要使用if-elseif的循环写法,需要逐个取出x的元素做判断:

dx = 0.1;
x = 0:dx:30;
f = zeros(size(x)); % 提前初始化数组避免动态扩容,提升运行效率

for i = 1:length(x)
    xi = x(i);
    if xi < 5
        f(i) = 0.1*xi^4 -21.8*xi^3 +9.8*xi^2 +11.5*xi -9.8;
    elseif xi >=5 && xi <20
        f(i) = 0.4*xi^3 +1.2*xi^2 +9.7*xi -89.6;
    else
        f(i) = 0.8*xi^2 +8.9*xi -8.2;
    end
end

% 绘制图像
plot(x,f,'LineWidth',1.5)
xlabel('x')
ylabel('f(x)')
title('分段函数图像')
grid on

注意事项

  • 对数组做逐元素运算时要使用点运算符.^ .*,避免触发矩阵运算规则报错。
  • 所有运算符号都要使用半角输入,全角符号会被识别为非法字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:10