这里,I_L(lambdap)是修改过的bessel函数。这个和具有指数函数的乘积可以用matlab编写为besseli(L,lambdap,1)。 “i”代表-1的平方根。我想解决:
1 + PT +它= 0
我必须改变'k'并找到'w'的值。我在mathematica stack exchange发布了类似的问题,但我无法完全解决问题,但我有一个clue (请在{{3}处查看评论})。我无法将公式转换为mathematica stack exchange site中发布的代码。在此方面的任何帮助将受到高度赞赏。
提前致谢...
答案 0 :(得分:0)
我之前从未尝试过这种方法,但是......这会返回一个合适的结果吗?
syms w k;
fun = 1 + pt(w,k) + it(w,k);
sol = vpasolve(fun == 0,w,k);
disp(sol.w);
disp(sol.k);
function res = pt(w,k)
eps_l0 = w / (1.22 * k);
lam_k = 0.25 * k^2;
res = sym('res',[5 1]);
res_off = 1;
for L = -2:2
gam = besseli(L,lam_k) * exp(-lam_k);
eps_z = (w - L) / (1.22 * k);
zeta = 1i * sqrt(pi()) * exp(-eps_z^2) * (1 + erfc(1i * eps_z));
res(res_off,:) = ((25000 * gam) / k^2) * (1 + (eps_l0 * zeta));
res_off = res_off + 1;
end
res = sum(res);
end
function res = it(w,k)
eps_l0 = (w - (0.86 * k)) / (3.46 * k);
lam_k = 0.03 * k^2;
res = sym('res',[5 1]);
res_off = 1;
for L = -2:2
gam = besseli(L,lam_k) * exp(-lam_k);
eps_z = (w - (8 * L) - (0.86 * k)) / (3.46 * k);
zeta = 1i * sqrt(pi()) * exp(-eps_z^2) * (1 + erfc(1i * eps_z));
res(res_off,:) = ((2000000 * gam) / k^2) * (1 + (eps_l0 * zeta));
res_off = res_off + 1;
end
res = sum(res);
end
修改强>
对于数字k和符号w:
syms w;
for k = -3:3
fun = 1 + pt(w,k) + it(w,k);
sol = vpasolve(fun == 0,w);
disp(sol.w);
end