在論壇裡找到了一個求解第一類貝塞爾函數零點的代碼程式,但是有些語句看不懂,用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