24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 1642  |  回复: 11

watertxf

铁虫 (初入文坛)

[求助] 求帮忙,关于含有bessel函数的方程的编程求解问题

我现在有个含有贝塞尔函数的方程,方程只有一个未知数k,我需要求方程等于0时k随l的变化。我编的程序如下,请各位高手帮忙看下哪里出了问题,非常感谢!
ps:附件是要求的方程及所用到的关系式
a=0.01159;
b=0.02317;
e=10;
l=7;
syms k
jleka=((pi/(2*e^0.5*k*a))^0.5)*besselj(l+0.5,e^0.5*k*a);
jlka=((pi/(2*k*a))^0.5)*besselj(l+0.5,k*a);
jlkb=((pi/(2*k*b))^0.5)*besselj(l+0.5,k*b);
jldka=0.5*jlka+(k*a*pi/8)^0.5*(besselj(l-0.5,k*a)-besselj(l+1.5,k*a));
jldeka=0.5*jleka+(e^0.5*k*a*pi/8)^0.5*(besselj(l-0.5,e^0.5*k*a)-besselj(l+1.5,e^0.5*k*a));
ylka=((pi/(2*k*a))^0.5)*bessely(l+0.5,k*a);
ylkb=((pi/(2*k*b))^0.5)*bessely(l+0.5,k*b);
yldka=0.5*ylka+(k*a*pi/8)^0.5*(bessely(l-0.5,k*a)-bessely(l+1.5,k*a));
h11=jleka;
h12=jlka/jlkb-ylka/ylkb;
h21=jldeka;
h22=jldka/jlkb-yldka/ylkb;
y=h11*h22-h12*h21;
k=solve(y)
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengsj9898

捐助贵宾 (正式写手)

【答案】应助回帖

★ ★
xzhdty(金币+2): 欢迎常来程序语言看看 2011-07-14 15:41:58
watertxf(金币+5): 您好!能不能麻烦您在跟我详细说一下? 2011-07-15 14:07:49
ki=0:0.1:1;
nki=length(k);
yi=zeros(nki,1);
for i=1:nk
k=ki(i);
jleka=((pi/(2*e^0.5*k*a))^0.5)*besselj(l+0.5,e^0.5*k*a);
jlka=((pi/(2*k*a))^0.5)*besselj(l+0.5,k*a);
jlkb=((pi/(2*k*b))^0.5)*besselj(l+0.5,k*b);
jldka=0.5*jlka+(k*a*pi/8)^0.5*(besselj(l-0.5,k*a)-besselj(l+1.5,k*a));
jldeka=0.5*jleka+(e^0.5*k*a*pi/8)^0.5*(besselj(l-0.5,e^0.5*k*a)-besselj(l+1.5,e^0.5*k*a));
ylka=((pi/(2*k*a))^0.5)*bessely(l+0.5,k*a);
ylkb=((pi/(2*k*b))^0.5)*bessely(l+0.5,k*b);
yldka=0.5*ylka+(k*a*pi/8)^0.5*(bessely(l-0.5,k*a)-bessely(l+1.5,k*a));
h11=jleka;
h12=jlka/jlkb-ylka/ylkb;
h21=jldeka;
h22=jldka/jlkb-yldka/ylkb;
y=h11*h22-h12*h21;
yi(i)=y;
end
2楼2011-07-14 11:57:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiao5725

金虫 (小有名气)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-18 22:55:51
牛人
3楼2011-07-14 12:24:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

watertxf

铁虫 (初入文坛)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-18 22:56:55
引用回帖:
Originally posted by fengsj9898 at 2011-07-14 11:57:37:
ki=0:0.1:1;
nki=length(k);
yi=zeros(nki,1);
for i=1:nk
k=ki(i);
jleka=((pi/(2*e^0.5*k*a))^0.5)*besselj(l+0.5,e^0.5*k*a);
jlka=((pi/(2*k*a))^0.5)*besselj(l+0.5,k*a);
jlkb=((pi/(2*k*b))^0.5)*b ...

这位老师,非常感谢您的回帖。但是我还是看不太明白,能麻烦您给详细说一下吗?我需要求方程等于零时整数L对应的k,太谢谢您了!
4楼2011-07-14 14:20:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

watertxf

铁虫 (初入文坛)

引用回帖:
Originally posted by fengsj9898 at 2011-07-14 11:57:37:
ki=0:0.1:1;
nki=length(k);
yi=zeros(nki,1);
for i=1:nk
k=ki(i);
jleka=((pi/(2*e^0.5*k*a))^0.5)*besselj(l+0.5,e^0.5*k*a);
jlka=((pi/(2*k*a))^0.5)*besselj(l+0.5,k*a);
jlkb=((pi/(2*k*b))^0.5)*b ...

就是说最后算出来的结果不能确定哪个是零点
5楼2011-07-14 14:38:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

watertxf

铁虫 (初入文坛)

jjdg: 直接pm会更快获得答复 2011-07-14 20:14:15
引用回帖:
Originally posted by watertxf at 2011-07-14 14:20:49:
这位老师,非常感谢您的回帖。但是我还是看不太明白,能麻烦您给详细说一下吗?我需要求方程等于零时整数L对应的k,太谢谢您了!

还有我是用的matlab编的程序
6楼2011-07-14 14:40:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengsj9898

捐助贵宾 (正式写手)

★ ★
余泽成(金币+2): 谢谢参与应助,欢迎常来程序语言版! 2011-08-18 17:04:12
实际上,你一个l对应着无数个k使得y等于0,而且中间有很多奇异点(不连续)
我帮你解了一组最小的k
见图

7楼2011-07-19 13:08:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengsj9898

捐助贵宾 (正式写手)

★ ★
余泽成(金币+2): 辛苦了,暑假愉快! 2011-08-18 17:04:33
a=0.01159;
b=0.02317;
e=10;
for l=1:10
    % l=7;
    % syms k
    dk=0.1; % 这个来控制精度
    k=1:dk:1e3;
    jleka=((pi./(2.*e.^0.5.*k.*a)).^0.5).*besselj(l+0.5,e.^0.5.*k.*a);
    jlka=((pi./(2.*k.*a)).^0.5).*besselj(l+0.5,k.*a);
    jlkb=((pi./(2.*k.*b)).^0.5).*besselj(l+0.5,k.*b);
    jldka=0.5.*jlka+(k.*a.*pi./8).^0.5.*(besselj(l-0.5,k.*a)-besselj(l+1.5,k.*a));
    jldeka=0.5.*jleka+(e.^0.5.*k.*a.*pi./8).^0.5.*(besselj(l-0.5,e.^0.5.*k.*a)-besselj(l+1.5,e.^0.5.*k.*a));
    ylka=((pi./(2.*k.*a)).^0.5).*bessely(l+0.5,k.*a);
    ylkb=((pi./(2.*k.*b)).^0.5).*bessely(l+0.5,k.*b);
    yldka=0.5.*ylka+(k.*a.*pi./8).^0.5.*(bessely(l-0.5,k.*a)-bessely(l+1.5,k.*a));
    h11=jleka;
    h12=jlka./jlkb-ylka./ylkb;
    h21=jldeka;
    h22=jldka./jlkb-yldka./ylkb;
    y=h11.*h22-h12.*h21;
    y1=y(1:end-1);
    y2=y(2:end);
    idx=find(y1.*y2<0);
    sol=k(idx);
    k0=min(sol);
    kmin(l)=k0;
end
用很土的办法解的,不知道你要求精度多少,自己可以改dk
8楼2011-07-19 13:09:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

watertxf

铁虫 (初入文坛)


jjdg(金币+1): 感谢参与 2011-08-19 02:32:47
引用回帖:
8楼: Originally posted by fengsj9898 at 2011-07-19 13:09:39:
a=0.01159;
b=0.02317;
e=10;
for l=1:10
    % l=7;
    % syms k
    dk=0.1; % 这个来控制精度
    k=1:dk:1e3;
    jleka=((pi./(2.*e.^0.5.*k.*a)).^0.5).*besselj(l+0.5,e.^0.5.*k.*a);
    jlka= ...

非常感谢您的帮忙。但是这个要求绝对精确,一个l只对应一个k,还有我没明白上面的图是什么意思,希望您能赐教,太谢谢啦
9楼2011-08-18 11:08:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

watertxf

铁虫 (初入文坛)


jjdg(金币+1): 感谢参与 2011-08-19 02:32:37
引用回帖:
7楼: Originally posted by fengsj9898 at 2011-07-19 13:08:29:
实际上,你一个l对应着无数个k使得y等于0,而且中间有很多奇异点(不连续)
我帮你解了一组最小的k
见图

看明白了,非常感谢!
10楼2011-08-18 11:24:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 watertxf 的主题更新
信息提示
请填处理意见