0
我正在嘗試使用MATLAB integral()
函數來集成代表時變值的分段線性函數的單個參數。使用MATLAB積分和匿名函數
我想定義在原有基礎上功能的匿名函數:
t1 = 1;
t2 = 2;
t3 = 4;
t4 = 5;
a0 = 1;
a1 = 2;
f = @(x) accel_profile(t1,t2,t3,t4,a0,a1,x);
這裏是accel_profile.m:
function value = accel_profile(t1,t2,t3,t4,a0,a1, t)
if t <= t1
value = a0;
return
elseif (t <= t2)
value = ((t-t1)/(t2-t1)) * (a1-a0) + a0;
return
elseif (t <= t3)
value = a1;
return
elseif (t <= t4)
value = ((t-t3)/(t4-t3)) * (a0-a1) + a1;
return
else
value = a0;
return
end
的問題是,當我行使下列腳本:
t_list = 0:0.1:6;
q = zeros(1,length(t_list))
for i = 1:length(t_list)
q(i) = integral(f,0,t_list(i));
end
plot(t_list, q)
我得到以下堆棧跟蹤:
Error using integralCalc/finalInputChecks (line 515)
Output of the function must be the same size as the input. If FUN is an array-valued integrand, set
the 'ArrayValued' option to true.
Error in integralCalc/iterateScalarValued (line 315)
finalInputChecks(x,fx);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
515 error(message('MATLAB:integral:FxNotSameSizeAsX'));
我在Windows 7
噢,打我吧:(這應該也可以將'ArrayValued'設置爲true:那麼函數只能用標量參數調用,那麼你不需要矢量化(但你應該;這會更快) –
@AndrasDeak:我認爲這個選項是用於返回向量的函數,我沒有在這裏使用conciser。我的matlab版本是老的有這個選擇,如果它真的解決了它,請寫一個答案。 – Daniel
將'ArrayValued'設置爲'true'訣竅,謝謝!我讀過,並認爲這只是函數返回數組值,所以我的壞! – gariepy