在matlab中绘制一个从负到正的域

在matlab中绘制一个从负到正的域,matlab,plot,Matlab,Plot,我正在为一个家庭作业编写代码,我们将在Matlab中绘制一个特定的方程,给定一个域,这里是问题的阅读方式 在域上绘制函数f1(x)=ax3+b2+cx+D−10≤ x≤ 10,带 A=0.3,B=1.5,C=-2.0和D=-4.0。使用dx=0.1。使用plot命令: 绘图(x,f1) 我的问题是从-10值作为绘图中的第一个变量开始。它会显示一条错误消息“试图访问(-1);索引必须是正整数或逻辑。这是我的代码的读取方式 clc clear all close all dx = 0.1; xlo

我正在为一个家庭作业编写代码,我们将在Matlab中绘制一个特定的方程,给定一个域,这里是问题的阅读方式

在域上绘制函数f1(x)=ax3+b2+cx+D−10≤ x≤ 10,带 A=0.3,B=1.5,C=-2.0和D=-4.0。使用dx=0.1。使用plot命令: 绘图(x,f1)

我的问题是从-10值作为绘图中的第一个变量开始。它会显示一条错误消息“试图访问(-1);索引必须是正整数或逻辑。这是我的代码的读取方式

clc
clear all
close all

dx = 0.1;
xlow = -10;

for i = 1 : 21

x(i) = (xlow + (i-1)) * dx;
f1(x(i)) = 0.3 * x(i)^3 + 1.5 x(i)^2 -2.0 x(i) -4.0

end
figure(1)
plot(x,f1)
title('Homework plot 1')
xlabel('x')
ylabel('y')

我知道我的大多数代码都能正常工作,它只是让负域正常工作。有人能提供帮助吗?

您正在尝试访问循环中的
f1(x(I))
。如果
x(I)
为-10,则表示您正在尝试保存
f1(-10)

f1(-10)
在数学记数法中有意义,但在任何编程语言中都没有意义,因为括号中的内容是内存中的索引


您只需
f(i)
,就可以解决该错误,因此对于任何给定的正整数
i
,您将拥有
f(i)
,它对应于您试图在循环中访问
f1(x(i))
的x值
x(i)
。如果
x(i)
为-10,则表示您正在尝试保存
f1(-10)

f1(-10)
在数学记数法中有意义,但在任何编程语言中都没有意义,因为括号中的内容是内存中的索引


您可以通过
f(i)
来解决该错误,因此对于任何给定的正整数
i
,您将拥有与x值
x(i)
对应的
f(i)
,我发现您的脚本存在一些问题

  • 在循环中,您应该得到一个越界异常,因为您正在引用f1矩阵中的负边界。当您的循环首次运行时,它将尝试访问f1中的“-10”元素,
    f1(-10)
    ,并且应该中断
  • 您的循环不符合教授的指导原则。教授要求在
    -10:10
    x
    域中使用
    delta=.1
    。这意味着您的循环中总共有200个步骤,每个矩阵中有200个元素(x ant f1)
  • 除非你的教授特别指示你使用循环来填充矩阵,否则这个作业可以在没有任何循环的情况下完成

    x=[-10:.1:10];
    f1=(x.^3*.3)+(x.^2*1.5)+(x*-2)-4
    figure(1)
    plot(x,f1)
    xlabel('x')
    ylabel('y')
    
    上面的脚本生成增量为.1,
    dx=.1
    x
    矩阵。接下来我使用生成
    f1
    矩阵,因此不需要循环

    或者,如果教授要求循环,您必须首先计算循环所需的步数,方法是将
    x域的幅值除以增量

    magnitude = xhigh-xlow;
    steps = magnitude/dx;
    for i = 1:steps+1
        x(i) = xlow + (i*dx-dx);
        f1(i) = 0.3 * x(i)^3 + 1.5 x(i)^2 -2.0 x(i) -4.0
    end
    

    `我发现您的脚本有几个问题

  • 在循环中,您应该得到一个越界异常,因为您正在引用f1矩阵中的负边界。当您的循环首次运行时,它将尝试访问f1中的“-10”元素,
    f1(-10)
    ,并且应该中断
  • 您的循环不符合教授的指导原则。教授要求在
    -10:10
    x
    域中使用
    delta=.1
    。这意味着您的循环中总共有200个步骤,每个矩阵中有200个元素(x ant f1)
  • 除非你的教授特别指示你使用循环来填充矩阵,否则这个作业可以在没有任何循环的情况下完成

    x=[-10:.1:10];
    f1=(x.^3*.3)+(x.^2*1.5)+(x*-2)-4
    figure(1)
    plot(x,f1)
    xlabel('x')
    ylabel('y')
    
    上面的脚本生成增量为.1,
    dx=.1
    x
    矩阵。接下来我使用生成
    f1
    矩阵,因此不需要循环

    或者,如果教授要求循环,您必须首先计算循环所需的步数,方法是将
    x域的幅值除以增量

    magnitude = xhigh-xlow;
    steps = magnitude/dx;
    for i = 1:steps+1
        x(i) = xlow + (i*dx-dx);
        f1(i) = 0.3 * x(i)^3 + 1.5 x(i)^2 -2.0 x(i) -4.0
    end
    

    `
    f1
    未在代码中的任何位置定义。
    f1
    未在代码中的任何位置定义。