Matlab 积分的积分

Matlab 积分的积分,matlab,Matlab,当我对每个下标使用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(

当我对每个下标使用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);
被称为
fplot(f,xinterval)
的fplot在间隔
xinterval
期间评估函数句柄
f
。它将沿着给定的间隔以自动确定的步骤计算
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进入你的娱乐功能

你可以这样说,因为你的第一个函数实际上是在1到2的x范围内绘制的

出现下标索引错误的原因是,在fun_2中,由于fplot输入的t值间隔在1和2之间(例如1.1),因此存在以下问题:
…(C.*D(t)。^E)。/F(t)。*…

如果您真的只希望函数的值在
t=1:1:5
处,那么您可能不希望使用fplot,只希望在这些时间对函数求值并绘制它

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);
注意:第三个函数仍然存在错误。。。我不知道为什么。我没有真正看它。

fplot称为
fplot(f,xinterval)
在间隔
xinterval
期间评估函数句柄
f
。它将沿着给定的间隔以自动确定的步骤计算
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进入你的娱乐功能

你可以这样说,因为你的第一个函数实际上是在1到2的x范围内绘制的

出现下标索引错误的原因是,在fun_2中,由于fplot输入的t值间隔在1和2之间(例如1.1),因此存在以下问题:
…(C.*D(t)。^E)。/F(t)。*…

如果您真的只希望函数的值在
t=1:1:5
处,那么您可能不希望使用fplot,只希望在这些时间对函数求值并绘制它

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);


注意:第三个函数仍然存在错误。。。我不知道为什么。我并没有真正看它。

这段代码最初并没有产生那个错误,因为在使用它之前,您甚至还没有定义
K
。请说明哪一行给了您一个错误。此外,您不必在代码中喷洒如此多的
ceil
调用,一些上下文将帮助我们提供更好的答案。您好,首先感谢您的回复,您是对的,ceil有很多,但我在编辑问题时使用它们(单击标记下方的“编辑”)您可以单击该选项插入图像。但是我没有10个声誉您可以用1个代表编辑您的问题…此代码最初不会产生该错误,因为在使用之前您甚至没有定义
K
。请说明哪一行给了您一个错误。此外,您不必在代码中喷洒如此多的
ceil
调用,一些上下文将帮助我们提供更好的答案。您好,首先感谢您的回复,您是对的,ceil有很多,但我在编辑问题时使用它们(单击标记下方的“编辑”)您可以单击该选项插入图像。但是我没有10个声誉您可以用1个代表编辑您的问题…谢谢,是的,我太专注于其他错误,没有检查此错误,这在之后似乎很明显。。。但是积分仍然存在问题。。。事实上,消息现在是«错误使用整数(第85行)A和B必须是浮点标量。»我将进一步查看并告诉您我是否找到了现在的代码如下:
。。。fun_1=@(t)积分(@(ti)G(ceil(ti)).*H(ceil(t-ti)),0,t-1);fun_2=@(t)积分(@(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,t-1);fun_3=@(t)I*积分(@(ti)min(fun_2(ceil(ti)),J)。*exp(-(K+I)。*(t-ti)),0.1,t-1;t=2:1:5;图(1)y=feval(fun_1,t);图(t,y)图(2)y=feval(fun_2,t);图(t,y)图(3)y=feval(fun_3,t);绘图(t,y)
我将编辑答案的结尾,这会让你更接近答案。我现在仍然在第三个函数上遇到崩溃…编辑添加到我的答案中。还请注意,我无法检查您的方程式内容或是否正确。Instagram在我的办公室被封锁了,所以我看不出方程式是什么样子。。。或者告诉你是否正确地将其转换为代码。谢谢你的帮助!哦,他们阻止instagram。。。也许是个不错的主意^^祝你好运,阿尔弗雷多B。谢谢你,是的,我太专注于其他错误,没有检查这一个,这在后来似乎很明显。。。B