24小时热门版块排行榜    

查看: 397  |  回复: 2
【奖励】 本帖被评价1次,作者fspdlh增加金币 0.5
当前主题已经存档。

fspdlh

金虫 (正式写手)


[资源] 【原创】二分法求解多解方程

看到小木虫里有些人问过求方程某个区间内解的问题,在此,发一个自编的原代码供大家用
参数中fun为方程的字符串,a,b和d分别为搜索解的初值终值和最小区间,tol为精度,如果大家发现程序有什么问题,回帖讨论交流,谢谢。

function x=solvefun(fun,a,b,d,tol)

%--------------------------------------------------------------------------
fun=inline(fun);
%--------------------------------------------------------------------------
range=a:d:b;
if range(end)     range=[range,b];
end
n=length(range);
temp=zeros(1,n);
for i=1:n
    temp(i)=fun(range(i));
end
x0=temp(find(temp==0))';
tag=[abs(diff(sign(temp))) 0];
range=range(find(tag==2))';
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
%--------------------------------------------------------------------------
x=sort([x;x0]);

[ Last edited by fspdlh on 2009-5-7 at 08:33 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)


应用实例

求解正弦函数

>> solvefun('sin(x)',-30,30,1,1e-5)

ans =

  -28.2743
  -25.1327
  -21.9911
  -18.8496
  -15.7080
  -12.5664
   -9.4248
   -6.2832
   -3.1416
         0
    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496
   21.9911
   25.1327
   28.2743

问题来源:http://muchong.com/bbs/viewthread.php?tid=1251344

>> solvefun('x.*bessel(1,x)-bessel(0,x)',0,100,1,1e-5)

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


问题来源:http://muchong.com/bbs/viewthread.php?tid=1313419
>> solvefun('cos(x)*cosh(x)-1',0,100,1,1e-5)

ans =

         0
    4.7300
    7.8532
   10.9956
   14.1372
   17.2788
   20.4204
   23.5619
   26.7035
   29.8451
   32.9867
   36.1283
   39.2699
   42.4115
   45.5531
   48.6947
   51.8363
   54.9779
   58.1195
   61.2611
   64.4026
   67.5442
   70.6858
   73.8274
   76.9690
   80.1106
   83.2522
   86.3938
   89.5354
   92.6770
   95.8186
   98.9602

[ Last edited by fspdlh on 2009-5-7 at 08:38 ]
2楼2009-05-07 08:34:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shinevip

木虫 (正式写手)


★★★ 三星级,支持鼓励

лл
3楼2009-05-08 22:43:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fspdlh 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见