我正在编写一个家庭作业的代码,我们将在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')
我知道我的大多数代码都能正常工作,只有让负面域名起作用,任何人都可以提供任何帮助吗?
答案 0 :(得分:4)
我发现你的脚本有几个问题。
f1(-10)
,并且应该中断。delta=.1
域x
中的-10:10
。这意味着循环中总共应该有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')
上面的这个脚本生成的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}}。