ChaChing 发表于 2009-12-28 22:34

不是说过我试过v5.3及2009a, 是一样的答案!
不清楚"关键是怎样同时算出多于一个的根"的意义?:@L
太数学的东西, 对于老小工的我, 有点难过!
我想真正需要无水来救我了!:loveliness:

VibrationMaster 发表于 2009-12-29 10:03

1.这个方程有无穷多个解
2.数值方法,只能一个一个找
3.如果想找到多个解,那么用地毯式搜索,然后将明显不同的解挑出来

compaq0000 发表于 2009-12-29 12:09

回复 15楼 VibrationMaster 的帖子

不知道您看我的附件没有,对应每一个参数(比如上面的0.25),我只需要前面的三个解。不知道您说的“地毯式搜索”具体怎么操作?:@)

VibrationMaster 发表于 2009-12-30 07:17

将fsolve的初值从可能区间以很小间隔走一遍得到很多个解。然后将靠近的解合并

compaq0000 发表于 2009-12-30 10:38

如果区间是一维的话,根据你的提示,我应该能做。但是区间现在是二维的,我就不知道怎么做了。:@)

compaq0000 发表于 2009-12-30 10:43

回复 17楼 VibrationMaster 的帖子

刚才我点的“发表新回复”,回复在18楼,其实就是回复你的。见谅见谅:@)

VibrationMaster 发表于 2009-12-30 12:21

两个方向都搜,如同排雷。初值 c= a+b*j,用两重循环。运算量大一些,但是应该还是能够忍受的。 如果实在忍受不了,那就只能分析方程的特性,界定可能解的范围。
对于没有解析解的非线性问题,指望计算机一劳永逸地用迭代法解出,而不做人为干预是不可能的。 高手和初学者的差别仅在于前者的干预度小一些。

ChaChing 发表于 2009-12-31 14:36

这帖建议关闭并与此帖合并!
http://forum.vibunion.com/forum/viewthread.php?tid=89196&highlight=

friendchj 发表于 2010-1-30 09:13

综合了各位大侠的意见,对这个方程进行了分析,方程的解实部和虚部有一定的关系,所以选初值只选一个,这样就变成一重循环,运算起来速度会好一些。
clc
clear
% a从3.3开始; % 保证 (exp(a)+exp(-a))^2-64*a^2>0
% b=(exp(a)-exp(-a))^2*((exp(a)+exp(-a))^2-64*a^2)/64/(exp(a)+exp(-a))^2;
% x0=;
s=[];
for a=3.3:.1:10
    b=(exp(a)-exp(-a))^2*((exp(a)+exp(-a))^2-64*a^2)/64/(exp(a)+exp(-a))^2;
    b=sqrt(b);
    x0=;
    y=fsolve(@myfun,x0);
    x=y(1)+y(2)*i;
    xx=x*i/sinh(x)-.25;
    if (abs(real(xx))<1e-5) && (abs(imag(xx))<1e-5)
      s=;
    end
end
% 剔除重复的解
ind=diff(s);
ss=s(1);
for m=1:length(ind)
    if abs(ind(m))>1e-3
       ss=;
    end
end
子函数
function f=myfun(x)
f=[cos(x(2))*(exp(x(1))-exp(-x(1)))+8*x(2);
   sin(x(2))*(exp(x(1))+exp(-x(1)))-8*x(1)];
运算结果(注意:b=-sqrt()暂时未考虑,lz可以算一下):
>> length(ss)

ans =

    48

>> max(abs(ss*i/sinh(ss)-.25))

ans =

1.9185e-015

compaq0000 发表于 2010-1-30 09:32

回复 22楼 friendchj 的帖子

非常感谢您的回复。
这段时间实验室事情比较多,虽然天天都来看看帖子,但是都没有仔细再分析过那个方程。
放假回家我会认真看看您的程序的。
祝您新年快乐。也祝论坛的各位朋友新年快乐。非常感谢大家。:@)
页: 1 [2]
查看完整版本: (求助)如何解如下形式的超越方程