compaq0000 发表于 2009-12-18 15:55

(求助)如何解如下形式的超越方程

最近几天碰到一个问题,一个复数形式的超越方程解不出来,希望论坛的各位朋友帮帮忙。

函数形式:0.25 = i * x / sinh ( x )

上式中,未知数是x,i代表复数。根据文献,应该是有不止一个解。

MATLAB求解亦可。

万分感激。

compaq0000 发表于 2009-12-21 20:46

(求助)如何求解如下超越方程,万分 感激。

最近几天碰到一个问题,一个复数形式的超越方程解不出来,希望论坛的各位朋友帮帮忙。

函数形式:0.25 = i * x / sinh ( x )

上式中,未知数是x,i代表复数。根据文献,应该是有不止一个解。

最好是MATLAB求数值解,因为我数学方面的软件就学过这个。

本人是学激光的,第一次碰到这样的超越方程,不知道怎么解。希望得到高人指点,万分感激。

前几天发在另外一个区,但是久久未见回复。所以在这个区又发了一遍,希望版主手下留情,饶过我重复发帖的罪过。


:@)

scott9 发表于 2009-12-22 14:15

嘿嘿,请高人来指点

无水1324 发表于 2009-12-24 09:20

回复 楼主 compaq0000 的帖子

期待高手路过!我只能帮忙顶一下,在复数 域的求解从来没有搞过

ChaChing 发表于 2009-12-24 14:44

syms a b real
x=a+i*b; ff=i*x/sinh(x)-0.25; ffr=real(ff); ffi=imag(ff);
sol=solve(ffr,ffi,'a','b');
zz=double(subs(x,{a,b},{sol.a,sol.b}))
i * zz / sinh(zz)

无水1324 发表于 2009-12-24 15:45

回复 板凳 ChaChing 的帖子

很好的 想法,但是不知道为什么,我这里运行的时候出错了。
主任指导一下。谢谢哈,错误信息如下:

Warning: 1 equations in 3 variables. New variables might be introduced.
> In solve>mupadSolve at 203
In solve at 93
Warning: Explicit solution could not be found.
> In solve at 98
??? Error using ==> subsref
No appropriate method, property, or field a for class sym.

Error in ==> sym.subsref at 17
y = builtin('subsref',x,a);

ChaChing 发表于 2009-12-24 21:03

回复 地板 无水1324 的帖子

3F是使用v5.3试的, 刚刚又试下2009a, 也没问题! 无水使用那版本?
还有个人虽年长, 水平与LS无得比, 说指导太过, 大家互相讨论吧!

>> syms a b real
x=a+i*b; ff=i*x/sinh(x)-0.25; ffr=real(ff); ffi=imag(ff);
sol=solve(ffr,ffi,'a','b');
zz=double(subs(x,{a,b},{sol.a,sol.b}))
i * zz / sinh(zz)

zz =
7.4143e+000 -2.0731e+002i
ans =
   0.2500 - 0.0000i

compaq0000 发表于 2009-12-24 22:41

首先感谢大家对我的帮助,但是我发现楼上得到的结果和文献的结果出入挺大,所以把文献中这一部分的相关信息做了一个摘要,放在附件里面,希望对各位有用。

而且文献中点出了用数值计算(numerical evaluation)来求解该复超越方程(complex transcendental equation)。

各位再接再励啊:@)

compaq0000 发表于 2009-12-24 22:47

刚才网速太慢,好像没发成功,补上附件如下

compaq0000 发表于 2009-12-24 22:51

刚才附件好像没上传成功,再补一个。

ChaChing 发表于 2009-12-25 00:30

汗, LZ的资料有看没看懂!:@L
不过早上也是怕算错, 有验证下i*zz/sinh(zz)是否为0.25!
我想需无水看看了:loveliness:

compaq0000 发表于 2009-12-25 10:12

感谢楼上的 教研室主任

我的附件里面就是把文献中的一些数学方面的细节摘了出来。针对楼上教研室主任给出的那个解,我的两个问题是:第一,解应该不止一个;第二,主任给出的解虚部太大了,远超出附件中坐标的范围。

我当时自己做的时候,是使用 fsolve 函数,以 3-2*i 作为 fsolve 的迭代初值 x0 ,可以得到一个解为 3.4845±2.1177*i
(分别对应±0.25=i*x/sinh(x) ) ,然后代入到 x*coth(x)中,得到 3.4780±2.1217*i 。附件的图中,其实解应该是关于纵坐标对称的,但是原作者只保留了纵坐标右侧的解。上面的 3.4780±2.1217*i ,可以在 0.25 对应的虚折线和黑色实线的交点中看到。

另外,将上述的解 3.4845±2.1177*i 代入到 i*x/sinh(x) 中,得到的答案为 ±0.2500-0.0000*i ;而楼上主任的解 7.4143e+000 -2.0731e+002i 代入到 i*x/sinh(x) 中,得到的是 0.2500+0.0002*i 。

当然,并不是说我的解比楼上的好,只是我的信息比较多一点,毕竟原始文献在我手上。:@)

然后,最主要的问题就是,fsolve 这个函数,每次求解都要求输入初值,但是需要求出这么多解,还要画曲线,怎么可能一个一个初值手动输入呢?

我和大家一起努力,争取解决这个问题。文献是1971年贝尔电话实验室的一个人写的。1971年就能解决的问题,我相信现在我们也能解决,大家一起努力吧,一起多交流一下,一起进步。

非常感激:@)

compaq0000 发表于 2009-12-28 15:04

回复 9楼 ChaChing 的帖子

ChaChing,您好,我送了朵花给您,收到没有。

不知道您那天怎么得到的那个答案,我用相同的代码,得到的答案是图中可以找到的。那就证明方法没有错了。下一步,如何解决一个常数对应多个解的问题。

谢谢啦:@)

ChaChing 发表于 2009-12-28 15:48

原帖由 compaq0000 于 2009-12-28 15:04 发表 http://www.chinavib.com/forum/images/common/back.gif
...不知道您那天怎么得到的那个答案...
5F

compaq0000 发表于 2009-12-28 16:59

回复 12楼 ChaChing 的帖子

5F和3F的代码是一样的啊,我用的就是5F的代码。不知道是不是版本的问题,我实验室电脑用的是7.1,没用最新的版本。现在已经证明你的方法是正确的了,关键是怎样同时算出多于一个的根。
页: [1] 2
查看完整版本: (求助)如何解如下形式的超越方程