为什么这段代码的错误信息会返回:"Subscript索引必须是真实的正整数或逻辑。“,当我对每个下标使用ceil时?
A=1:1:100;
B=1:1:100;
C=1;
D=1:1:100;
E=2;
F=1:1:100;
G=1:1:100;
H=0.1:0.1:10;
fun_1=@(t)integral(@(ti)G(ceil(ti)).*H(ceil(t-ti)),0.1,t-1);
fun_2=@(t)integral(@(ti)G(ceil(ti)).*B(ceil(ti)).*(C.*D(t).^E)./F(t).*...
exp(-integral(@(x)(C.*D(ceil(x)).^E)./F(ceil(x)),ti,5)-K.*(t-ti)),0.1,t-
1,'ArrayValued',true);
I=500;
J=1000;
K=2;
fun_3=@(t)I*integral(@(ti)min(fun_2(ceil(ti)),J).*exp(-(K+I).*(t-ti)),0.1,t-
1);
t=1:1:5;
figure(1)
fplot(fun_1,t);
figure(2)
fplot(fun_2,t);
figure(3)
fplot(fun_3,t);发布于 2017-10-18 17:08:21
被调用为见文件的fplot fplot(f,xinterval)计算函数句柄f的间隔xinterval。它将沿着给定的间隔在自动确定的步骤上评估f。
从医生那里:
xmax形式的x -5 5 x-二元向量的区间
您似乎在试图指定要计算函数的确切位置。
t=1:1:5;
...
fplot(fun_1,t);但不是这样的。正在发生的事情是,fplot从1到2(t的前2个元素)计算函数。例如,它可能将t= 1、1.05、1.1、.2的值输入到fun_#函数中。
你可以告诉这一点,因为你的第一个函数实际上是在1到2的x范围内绘制的。
您获得下标索引错误的原因是,在fun_2中,您有这个...(C.*D(t).^E)./F(t).*...,因为for是在t的值中输入的,t的间距介于1和2之间(ex )。1.1)这不是一个有效的索引。
如果您真的只想要函数在t = 1:1:5上的值,那么您可能不想使用want,而只想在那些时候评估函数并绘制它。
y = feval(fun_1,t);
plot(t,y)编辑:上面的代码不工作
您将需要执行类似下面代码的操作。这是因为积分函数的第二和第三层树需要标量(1x1)。如果你给他们一个t数组,他们就会崩溃。因此,在每个t上进行评估并不是一次全部。
figure(1)
y_1 = arrayfun(fun_1,t);
plot(t,y_1);
figure(2)
y_2 = arrayfun(fun_2,t);
plot(t,y_2);
figure(3)
y_3 = arrayfun(fun_3,t);
plot(t,y_3);注:第三个函数仍然错误..。我也不能百分之百确定原因。我没认真看过。
https://stackoverflow.com/questions/46811239
复制相似问题