Solving non-linear equation with besselj
1 次查看(过去 30 天)
显示 更早的评论
Hello,
I am trying to solve this equation below and hope to get a closed form so I can plot it. I understand that due to the periodic nature of Bessel functions, "solve" does not work and I can actually get results using vpasolve with good guesses; or simply use a graphic method manually to make sure the solution coincides with the first root of the Bessel. However, I suspect there is a way to get symbolic solution using solve so it spits out a closed form rather than a number if I only restrict solutions to the first zero of the besselj I use. Is this possible?
Thank you for your input!
syms f
assume (f > 1e6)
r=20e-6;
n=2;
E=28e9;
rho=8095;
sigma=0.22;
w=2*pi*f;
zeta=r*sqrt(2*rho*w.^2.*(1+sigma)/E);
q=zeta.^2./(2*n^2-2);
xi=sqrt(2/(1-sigma));
eqn=(Psi_2(zeta/xi)-2-q )*(2*Psi_2(zeta)-2-q) == (n*q-n)^2 ; %Equation I want to solve with only 1st root of Bessel function
f=1e-6*solve(eqn,f);
% Definition of Psi_2 function
function f = Psi_2(theta)
f=theta.*besselj(1,theta)./besselj(2,theta);
end
0 个评论
采纳的回答
Walter Roberson
2022-1-3
I would very much doubt you can find a symbolic solution. You are trying to solve
49379500000000 * besselj(2, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselJ(1,1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi) * ...
39^(1/2)*98759^(1/2)*14^(1/2)*pi^2*Z^2 + ...
987590000000000 * besselj(1, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselj(2, 1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi) * ...
98759^(1/2)*14^(1/2)*pi^2*Z^2 + ...
9753340081 * besselj(2, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselj(2,1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi) * pi^3*Z^3 - ...
20739390000000000000000000 * besselj(1, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselj(1, 1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi) * 39^(1/2)*pi*Z + ...
525000000000000000000000000000 * besselj(2, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselj(1, 1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi) * 39^(1/2)*98759^(1/2)*14^(1/2) + ...
10500000000000000000000000000000 * besselj(1, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselj(2, 1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi) * 98759^(1/2)*14^(1/2) - ...
207393900000000000000000000 * besselj(2, 1/35000000000*98759^(1/2)*14^(1/2)*Z*pi) * ...
besselj(2, 1/350000000000*39^(1/2)*98759^(1/2)*14^(1/2)*Z*pi)*pi*Z
for the set of values of Z such that the expression becomes 0.
That is not just a single zero of a bessel function: there are 12 BesselJ functions there. And there is no symbolic solution to zeros of even a single BesselJ .
5 个评论
Walter Roberson
2022-1-4
编辑:Walter Roberson
2022-1-5
The below has to do with the solution. If you take lhs(eqn)-rhs(eqn) and solve() that for f, using a better symbolic package, then you get a RootOf() for quite similar to what I posted first -- a function of _Z such that the function must equal 0 at _Z, and _Z is then the frequency, f, at which the equation holds true.
If you remove the RootOf() level and plot just the internal part, the part that needs to become 0, then the places where it does become 0 are the solutions. 0 is the flat horizontal plane in the image, so there are solutions everwhere the curve intersects the flat plane.
So the smaller the r, the higher the lowest frequency of solution. With high enough r, the solutions start coming in pretty close (e.g., as r approaches 1, solutions down to f = 600-ish appear.)
This is to be expected: the besselJ calls end up having f*r in them, so if you were to create a new variable FR = f*r then you get to a 1D equation. If you know a solution for one f*r value then you can predict the solution for a different r by inverse proportions.![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/853065/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/853065/image.jpeg)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Calculus 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!