フィルターのクリア

solve Bassel function matlab

5 ビュー (過去 30 日間)
Carlos_conde
Carlos_conde 2017 年 5 月 17 日
回答済み: Star Strider 2017 年 5 月 17 日
I am trying to solve a Bessel function depending of a variable "x", for that reason I am using the fsolve command:
%%myfun
function F = myfun(x)
F = [1.5*(1-x)*besselj(0,x)-x*bessely(0,x)*(x.^2-1)];
%%main file
x0 = [0; 0];
[x,fval] = fsolve(@myfun,x0)
I do not understand what I am doing wrong.
Regards

回答 (2 件)

John D'Errico
John D'Errico 2017 年 5 月 17 日
myfun is a function of ONE variable, x. There is only ONE unknown, so x should be a scalar.
But if that is true, then why have you provided a VECTOR starting value in x0?

Star Strider
Star Strider 2017 年 5 月 17 日
You need to (1.) vectorize every multiplication and division in your function, as well as the exponentiation, and (2.) start a a point close to (not at) 0 in order to avoid fsolve throwing a ‘Objective function is returning undefined values at initial point. FSOLVE cannot continue.’ error.
This works:
myfun = @(x) 1.5*(1-x).*besselj(0,x)-x.*bessely(0,x).*(x.^2-1);
x0 = [1; 1]*eps;
[x,fval] = fsolve(myfun,x0);

カテゴリ

Help Center および File ExchangeBessel functions についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by