# Solving non-linear equation with besselj

조회 수: 1 (최근 30일)
Ozan Erturk 2022년 1월 3일
편집: Walter Roberson 2022년 1월 5일
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?
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

댓글을 달려면 로그인하십시오.

### 채택된 답변

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이전 댓글 3개 표시이전 댓글 3개 숨기기
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.
Ozan Erturk 2022년 1월 5일
Although I am not sure, I think I understand the problem, and your suggestion. I implemented it and called a variable "zeta" which has both f and r. This was the original function without any f and r substitutions in fact. However, I don't think solve can still handle this. Do I need to modify "solve" ? or any other symbolic solver in matlab that I don't know about maybe?
syms zeta positive
n=2;
sigma=0.22; %Poisson's ratio
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 ;
zeta=solve(eqn,zeta)
Warning: Unable to find explicit solution. For options, see help.
zeta = Empty sym: 0-by-1
function f = Psi_2(theta)
f=theta.*besselj(1,theta)./besselj(2,theta);
end

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Calculus에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by