在matlab中绘制给出负面到正面的域

时间:2015-09-08 17:22:43

标签: matlab plot

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

在域-10≤x≤10上绘制函数f1(x)= A x3 + B x2 + C x + D, 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')

我知道我的大多数代码都能正常工作,只有让负面域名起作用,任何人都可以提供任何帮助吗?

2 个答案:

答案 0 :(得分:4)

我发现你的脚本有几个问题。

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

    x=[-10:.1:10];
    f1=(x.^3*.3)+(x.^2*1.5)+(x*-2)-4
    figure(1)
    plot(x,f1)
    xlabel('x')
    ylabel('y')
    

    上面的这个脚本生成的x矩阵的增量为.1,dx=.1。接下来,我使用basic matrix manipulation生成f1矩阵,因此不需要循环。

    或者,如果您的教授需要循环,您必须首先通过将x domain的幅度除以delta来计算循环所需的步数。

    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
    

    `

答案 1 :(得分:1)

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

f1(-10)在数学符号中是有意义的,但它并不适用于任何编程语言,因为括号内的内容是内存中的索引!

您只需f(i)即可解决该错误,因此对于任何给定的正整数 i,您将拥有与{x}}对应的f(i) { {1}}。