天天看點

matlab貝塞爾函數零點,第一類貝塞爾函數零點求解matlab程式

在論壇裡找到了一個求解第一類貝塞爾函數零點的代碼程式,但是有些語句看不懂,用fzero指令求解第一類貝塞爾函數高階零點時,給出初值h的計算式為:h = v+1.9*v^(1/3)+1其中v是階數,請教大神們,為什麼給出這樣的初值表達式?拜托了,由于我自己賬戶的金币不多,隻能聊表敬意,誠心求教。

現附上從别的文章找到的程式:

貝塞爾函數為 。n分别取1,2,3時,程式設計求出 , 前三個根。

n     x1      x2     x3

0    2.405   5.520   8.654

1    3.832   7.016   10.174

2    5.135   8.417   11.620

global rootBessel

maxv = 3;                % 最大貝塞爾函數階數-1,表示從0到9階

maxs = 3;                % 所需要計算貝塞爾函數的零點的數目

j = zeros(maxv, maxs);    % 貝塞爾函數的根

incr = 4.0;

for v=0:maxv-1

h = v+1.9*v^(1/3)+1;

if (v==0)             % 0階貝塞爾函數的第一個零點

j(v+1,1) = fzero(@(x)besselj(v,x),2);

else                  % 1階及以上階貝塞爾函數的第一個零點

j(v+1,1) = fzero(@(x)besselj(v,x),h);

end

for s=2:maxs          % 貝塞爾函數的第2個及後面的零點

j(v+1,s) = fzero(@(x)besselj(v,x),j(v+1,s-1)+incr);

end

end

rootBessel = j