solving dispersion equation numerically using fsolve
Show older comments
I am trying to solve the dispersion equation numerically using fsolve.
M=0.4;
a=0.25;
D=2.34e6;
mu=396;
fun = @(kz) sqrt(kz.^2 - (omega / c0).^2) .* ((D * kz.^4 - mu * omega^2) .*...
sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) .* ...
sin(sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) * a) + ...
rho * omega^2 .* (1 - kz./(omega / c) * M).^2 .* cos(sqrt((omega / c).^2 - ...
(1 - M^2) * kz.^2 - 2 * omega * kz / c * M) * a))- rho0 * omega^2 .* ...
sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) .* ...
sin(sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) * a);
Here,M=0.4, a=0.25, D=2.34e6,mu=396. kz is the root of equation and it can be complex. I want to find the roots for general initial guesses as I dont know the asymptotic solution.for each value of omega there will be infinite values of kz as it is a transcendental equation. c-c0 and rho-rho0 are speed of sound in inner-outer medium and density of inner-outer mediums. The inner-outer mediums can be air-water, water-air,air-air,water-water. I want to plot kz vs omega for all these four combinations. The range of omega is 0 to 1e4. c_water=1500, c_air=340, rho_water=1000, rho_air=1.21.
3 Comments
MANISH DWIVEDI
on 13 Mar 2024
Edited: MANISH DWIVEDI
on 13 Mar 2024
Here is an example:
M=0.4;
a=0.25;
D=2.34e6;
mu=396;
c=340;
c0=1500;
rho=1.21;
rho0=1000;
omega =2;
fun = @(kz) sqrt(kz.^2 - (omega / c0).^2) .* ((D * kz.^4 - mu * omega^2) .*...
sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) .* ...
sin(sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) * a) + ...
rho * omega^2 .* (1 - kz./(omega / c) * M).^2 .* cos(sqrt((omega / c).^2 - ...
(1 - M^2) * kz.^2 - 2 * omega * kz / c * M) * a))- rho0 * omega^2 .* ...
sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) .* ...
sin(sqrt((omega / c).^2 - (1 - M^2) * kz.^2 - 2 * omega * kz / c * M) * a);
kz=-1:0.001:1;
[m,idx] = min(abs(fun(kz)))
plot(kz,abs(fun(kz)))
I tried various values for omega, but couldn't find a parameter constellation where your function has a zero.
Answers (0)
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
