| 查看: 1597 | 回复: 7 | |||
| 当前主题已经存档。 | |||
zhangyatao木虫 (正式写手)
|
[交流]
[color=Blue]【求助】Bessel函数的Matlab解法[/color]
|
||
|
对于下面的Bessel函数,如何用Matlab求解,麻烦给出源程序或类似程序,多谢了! D*x*J1(x)=J0(x),其中D是常数。 [ Last edited by zhangyatao on 2009-4-1 at 16:51 ] |
» 猜你喜欢
40+中年人失业后,还能找到好工作吗?
已经有13人回复
用NBS溴化时溶剂除了CCl4外还有什么
已经有6人回复
申请科研项目纯靠实力能成功吗?
已经有11人回复
极限拉扯,如何抉择
已经有15人回复
二审4个多月了还是Awaiting Reviewer Scores
已经有4人回复
OpenAI又攻克数学难题了,离AI做有机合成还有多远?
已经有13人回复
课题组会帮你通过考核么?
已经有7人回复
售一区SCI文章T0P,我:8O.551.O54,科目全,可十急
已经有9人回复
售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急
已经有8人回复
售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急
已经有10人回复

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
zhangyatao(金币+8,VIP+0):程序有点错误,不过还是挺感谢你的! 4-1 15:41
sunxiao(金币+2,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-1 22:38
zhangyatao(金币+8,VIP+0):程序有点错误,不过还是挺感谢你的! 4-1 15:41
sunxiao(金币+2,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-1 22:38
|
可以先画图像看看啊 fplot('x*Bessel(x,1)-Bessel(x,0)',[-10,100]) 可以看出,方程无解,但函数随x的增大是趋近于零的 >> x=20 x = 20 >> x*Bessel(x,1)-Bessel(x,0) ans = 7.7470e-024 >> x=10000 x = 10000 >> x*Bessel(x,1)-Bessel(x,0) ans = 0 [ Last edited by fspdlh on 2009-4-1 at 15:19 ] |
2楼2009-04-01 15:16:49
zhangyatao
木虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 3307.9
- 散金: 840
- 红花: 2
- 帖子: 646
- 在线: 677.5小时
- 虫号: 325718
- 注册: 2007-03-17
- 性别: GG
- 专业: 分离过程

3楼2009-04-01 15:24:49
4楼2009-04-01 15:34:29
5楼2009-04-01 15:34:46
zhangyatao
木虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 3307.9
- 散金: 840
- 红花: 2
- 帖子: 646
- 在线: 677.5小时
- 虫号: 325718
- 注册: 2007-03-17
- 性别: GG
- 专业: 分离过程

6楼2009-04-01 15:37:28
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
zhangyatao(金币+15,VIP+0):十分感谢!另外,如果方程里面有个常数D(见编辑后的帖子),还能否得到带有常数D的数值解,谢谢哈! 4-1 16:45
sunxiao(金币+4,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-1 22:37
zhangyatao(金币+15,VIP+0):十分感谢!另外,如果方程里面有个常数D(见编辑后的帖子),还能否得到带有常数D的数值解,谢谢哈! 4-1 16:45
sunxiao(金币+4,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-1 22:37
|
function x=solvefun(a,b,tol) %-------------------------------------------------------------------------- range=a:1:b; if range(end) range=[range,b]; end tag=[abs(diff(sign(fun(range)))) 0]; range=range(find(tag>0))'; range=[range range+1]; %-------------------------------------------------------------------------- n=size(range,1); tol=tol/10; x=zeros(n,1); for i=1:n xmin=range(i,1); xmax=range(i,2); xcur=(xmin+xmax)/2; while xmax-xmin>tol if sign(fun(xmin))*sign(fun(xcur))>0 xmin=xcur; else xmax=xcur; end xcur=(xmin+xmax)/2; end x(i)=xcur; end %-------------------------------------------------------------------------- function y=fun(x) y=x.*Bessel(1,x)-Bessel(0,x); >> solvefun(0,100,1e-4) ans = 1.2558 4.0795 7.1558 10.2710 13.3984 16.5312 19.6667 22.8040 25.9422 29.0812 32.2207 35.3606 38.5007 41.6411 44.7817 47.9223 51.0631 54.2040 57.3450 60.4860 63.6271 66.7682 69.9094 73.0506 76.1918 79.3331 82.4744 85.6157 88.7570 91.8984 95.0398 98.1811 >> |
7楼2009-04-01 16:20:38
★ ★ ★ ★
sunxiao(金币+4,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-1 22:37
sunxiao(金币+4,VIP+0):谢谢参与交流,欢迎常来仿真编程版 4-1 22:37
|
function x=solvefun(a,b,D,tol) %-------------------------------------------------------------------------- range=a:1:b; if range(end) range=[range,b]; end tag=[abs(diff(sign(fun(range,D)))) 0]; range=range(find(tag>0))'; range=[range range+1]; %-------------------------------------------------------------------------- n=size(range,1); tol=tol/10; x=zeros(n,1); for i=1:n xmin=range(i,1); xmax=range(i,2); xcur=(xmin+xmax)/2; while xmax-xmin>tol if sign(fun(xmin,D))*sign(fun(xcur,D))>0 xmin=xcur; else xmax=xcur; end xcur=(xmin+xmax)/2; end x(i)=xcur; end %-------------------------------------------------------------------------- function y=fun(x,D) y=D.*x.*Bessel(1,x)-Bessel(0,x); |
8楼2009-04-01 16:55:01










回复此楼
200