> 関数と積分範囲が異なるだけで,同様にプログラムを書いているはずなのですが,どこが原因なのでしょうか?
関数と積分範囲を変えたこと自体が原因です。
エラーと警告は別物ですので、注意する必要があります。
警告はプログラムの実行時に検知された予期せぬ状態、エラーはプログラム内の致命的な問題を表します。
ほとんどの場合、警告は無視することができますが、今回の場合は誤差のテストに失敗していますので、無視することはできません。
> 関数評価 (2000) の最大数に達しました
とありますので、MaxFunEvalsを増やすことで大域的な誤差のテストをパスする可能性があります。
また、FailurePlotをtrueにすることで、どの領域で失敗しているのかが分かります。
合によっては、AbsTolやRelTolの条件を緩和することで解にたどり着きやすくなります。
quad2d の制限 https://jp.mathworks.com/help/matlab/ref/quad2d.html#bu94bxr
>> fun2 = @(x,y) (1-2./(y.*x));
>> xk = @(y) 2.*y;
>> s = quad2d(fun2,0,5,0,xk, 'AbsTol',1e-4, 'RelTol', 1e-4, 'MaxFunEvals', 10000, 'FailurePlot', true)