2017-10-18 262 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

我要編輯我的答案的結尾,讓你更接近。我現在仍然在第三個功能崩潰... –