matlab求含贝塞尔函数的超越方程,求助:如何求含贝塞尔函数的超越方程的复数解...

如题,小弟最近碰到一含贝塞尔函数的超越方程。程序如下:

i=1;

for x=0:0.001:5  % x=kc/Wp

for  y=0:0.001:5  % y=w/Wp

if (y-x)<=4.2&&0

t=0.6*1000*sqrt(y.*y-x.*x);

ta=0.6*sqrt(y.*y-x.*x);

tc=0.6*2* sqrt(y.*y-x.*x);

t1=(y.*y-1);

t2=x.*x*(3.4596-y.*y);

t3=y.*y*(y*y-4.4596);

T=0.6*1000*sqrt((t1.*(t2+t3))/t3); Ta=0.6*sqrt((t1.*(t2+t3))/t3); pTa=(Ta/4).*(Ta/4);

pta=(ta/4).*(ta/4);

ptc=(tc/4).*(tc/4);

% ta有关的贝塞尔函数(4个);

cta0=besselj(0,ta(:));

cta1=besselj(1,ta(:));

dta0=bessely(0,ta(:));

dta1=bessely(1,ta(:));

% tc 有关的贝塞尔函数(2个)

ctc0=besselj(0,tc(:));

dtc0=bessely(0,tc(:));

A=ctc0.*dta0-cta0.*dtc0;  B=-ctc0.*dta1+cta1.*dtc0;

cTa0=besselj(0,Ta(:));

cTa1=besselj(1,Ta(:));

f=((y.*y-1)/T).*cTa1.*A+(y.*y/t)*cTa0 *B;

if abs(f)<=0.00000001

a0(i)=x;b0(i)=y;

i=i+1;

disp([num2str(x) ' ' num2str(y)]);

end

end

end

end

我通过限制f绝对值的精度,去求出了满足f=0的实数解,但是我若想求出满足f=0,x和对应的y的复数解。这个程序应该怎么改啊,谢谢大家了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解含贝塞尔函数超越方程一般需要用到数值方法。以下是一种法: 假设我们要方程为: f(x) = Jν(x) 其中 Jν(x) 表示贝塞尔函数。我们可以将其转化为一个非常标准的形式: f(x) - Jν(x) = 0 然后我们使用二分法或牛顿迭代等数值方法来求。具体的方法如下: 1.使用二分法 首先,我们需要确定一个区间 [a, b],使得 f(a) 和 f(b) 异号。然后,我们可以使用二分法来逐步缩小区间,直到满足精度要求。具体的算法如下: 1.1.初始化区间 [a, b] 1.2.计算中点 c = (a + b) / 2 1.3.计算 f(c) 的值 1.4.如果 f(c) 的值与 0 的差小于精度要求,则停止计算,返回 c 1.5.如果 f(c) 的值与 f(a) 或 f(b) 的值异号,则更新区间 [a, b] 为 [a, c] 或 [c, b] 1.6.重复步骤 1.2 到 1.5,直到满足精度要求。 2.使用牛顿迭代法 另一种常用的方法是使用牛顿迭代法。具体的算法如下: 2.1.选择一个初始值 x0 2.2.计算 f(x0) 和 f'(x0) 的值,其中 f'(x) 表示 f(x) 的导数 2.3.计算下一个近似值 x1 = x0 - f(x0) / f'(x0) 2.4.如果 x1 与 x0 的差小于精度要求,则停止计算,返回 x1 2.5.否则,将 x1 作为新的初始值,回到步骤 2.2 需要注意的是,贝塞尔函数的导数也可以表示为贝塞尔函数的形式,因此在计算 f'(x) 的时候需要使用贝塞尔函数的导数公式。 总之,解含贝塞尔函数超越方程是一项非常复杂的任务,需要根据具体的情况选择合适的数值方法来求

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值