首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >积分的积分

积分的积分
EN

Stack Overflow用户
提问于 2017-10-18 13:22:37
回答 1查看 82关注 0票数 1

为什么这段代码的错误信息会返回:"Subscript索引必须是真实的正整数或逻辑。“,当我对每个下标使用ceil时?

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 17:08:21

被调用为见文件的fplot fplot(f,xinterval)计算函数句柄f的间隔xinterval。它将沿着给定的间隔在自动确定的步骤上评估f

从医生那里:

xmax形式的x -5 5 x-二元向量的区间

您似乎在试图指定要计算函数的确切位置。

代码语言:javascript
复制
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,而只想在那些时候评估函数并绘制它。

代码语言:javascript
复制
y = feval(fun_1,t);
plot(t,y)

编辑:上面的代码不工作

您将需要执行类似下面代码的操作。这是因为积分函数的第二和第三层树需要标量(1x1)。如果你给他们一个t数组,他们就会崩溃。因此,在每个t上进行评估并不是一次全部。

代码语言:javascript
复制
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);

注:第三个函数仍然错误..。我也不能百分之百确定原因。我没认真看过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46811239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档