2017-10-18 139 views
1

为什么此代码的错误消息返回:“下标索引必须是真正的正整数或逻辑”,当我为每个下标使用细胞时?积分积分

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; 
[email protected](t)integral(@(ti)G(ceil(ti)).*H(ceil(t-ti)),0.1,t-1); 
[email protected](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; 
[email protected](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); 
+2

此代码最初不会产生该错误,因为在使用它之前您甚至没有定义过'K'。请说明哪一行会给你一个错误。你也不应该通过你的代码喷这么多'ceil'调用,有些环境会帮助我们给出更好的答案。 – Wolfie

+0

您好,首先感谢您的回复, 您是对的,有很多的细胞,但我用它们 –

+0

当你编辑你的问题(点击标签下面的“编辑”),你可以点击选项来插入一个图片。 – Wolfie

回答

0

fplot see documentation古称fplot(f,xinterval)评估你的函数处理f在区间xinterval。 IT将在该给定时间间隔自动确定的步骤中评估f

从文档:

xinterval - 间隔为X [-5 5](默认)|的 形式[XMIN XMAX]

两个元素的矢量你似乎在试图指定正是您想要的功能评估

t=1:1:5; 
... 
fplot(fun_1,t); 

但它不工作的方式。正在发生的是fplot正在评估函数从1到2(t的前2个元素)。例如,它可能会将t = 1,1.05,1.1,...,2的值提供给fun_#函数。

可以这么说,是因为你在哪1的X-范围不工作实际上阴谋2.

的原因,你得到一个标指数误差第一个功能是因为在fun_2你有这样...(C.*D(t).^E)./F(t).*...由于fplot正在输入1和2之间的t值(如1.1),这不是一个有效的指数。

如果你真的只想在t = 1:1:5你的函数的值你可能不想使用fplot,只想在那些时候评估函数,并绘制它。

y = feval(fun_1,t); 
plot(t,y) 

编辑:上面的代码不工作

你需要做类似下面的代码。这是因为第二个& 3rd trems到the intergral function需要是标量(1x1)。如果你为它们提供一个数组,那么它们就会崩溃。因此,每个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); 

注:第三个函数仍然错误......我不是100%确定为什么。我没有真正看它。

+0

谢谢,是的,我当时太专注于其他错误,并没有检查这一个,这似乎事后显而易见......但仍存在积分问题...的确,现在的消息是“使用积分(第85行)的错误A和B必须是浮点标量。 »我会进一步查看并告诉您是否找到 –

+0

现在代码如下所示: '... fun_1 = @(t)integral(@(ti)G(ceil(ti))* H(小区(叔TI)),0,T-1); (t)积分(@(ti)G(ceil(ti))。* B(ceil(ti))。*(C. * D(t)。^ E)./ F(t)。 *(t-1)*(t-1)*(t-1)*(t-1) TI)),0,T-1); (t(t))* 0.1(t-1)(t-1) 1); t = 2:1:5;图(1)y = feval(fun_1,t); plot(t,y)figure(2)y = feval(fun_2,t); plot(t,y)figure(3)y = feval(fun_3,t); plot(t,y)' –

+0

我要编辑我的答案的结尾,让你更接近。我现在仍然在第三个功能崩溃... –