我想實現一個分段周期函數,它在某些時間間隔內應該爲零,並且看起來像其他地方的測試函數(例如exp(a^2/(abs(x)^2-a^2))
爲abs(x)< a
,否則爲零)。
我試圖從matlab中的匿名函數接收NaN
nu = @(x) ((8*10^(-4)/exp(1)*exp(30^2./(abs(mod(x,365)-31).^2-30.^2))).* ...
and((1<mod(x,365)),(mod(x,365)<61)) + ...
(8*10^(-4)/exp(1)*exp(10^2./(abs(mod(x,365)-300).^2-10.^2))).* ...
and((290<mod(x,365)),(mod(x,365)<310)));
分別
nu = @(x) ((0*x).* and((0<=mod(x,365)),(mod(x,365)<=1)) + ...
(8*10^(-4)/exp(1)*exp(30^2./(abs(mod(x,365)-31).^2-30.^2))).* ...
and((1<mod(x,365)),(mod(x,365)<61)) + ...
(0*x).* and((61<=mod(x,365)),(mod(x,365)<=290)) + ...
(8*10^(-4)/exp(1)*exp(10^2./(abs(mod(x,365)-300).^2-10.^2))).* ...
and((290<mod(x,365)),(mod(x,365)<310)) + ...
(0*x).* and((310<=mod(x,365)),(mod(x,365)<365)));
應該具有相同的行爲。目標是有一段[0,365),因此模。
現在我的問題是,nu(1)=nu(61)=nu(290)=nu(310)=NaN
,也在他們的一個小鄰居,例如, nu(0.99)=NaN
。但是我從指數函數中排除了這些點,在這個問題上會導致問題。即使我使用指數函數的較小間隔(例如(2,60)和(291,309)),我也會在相同點上收到NaN
。
任何想法?感謝您的建議!
爲這些值逐個評估函數,你會看到NaN來自哪裏;)btw:'0 * NaN + 1 = NaN' – 2013-03-16 12:17:14