• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Matlab数值求解超越方程的根

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

有时候我们要数值求解超越方程的多个根,但是数值方法都要给定一个初值。

matlab有内建函数fsolve求解非线性方程(组),但是只能求一组给定初值的解,如果要求多个根(如频率方程),可以先用mathematica画图,然后观察得到零点个数和大概位置,然后调用fsolve求解。

这里提供了一个程序,在区间(a,b)上面画图,然后可以用鼠标选取n个点,然后返回以这些点作为初值得到的根。

几点需要注意的地方:

1)待求根的方程要满足矢量,乘法要换成点乘

2)一次不要求太多根,因为区间大的时候前面的可能会贴近x轴看不出来

3)调用格式:MultiRoots(@equ,2,0,8);或 MultiRoots(@equ,1,8,12); 注意函数前要有@

function y = equ(x)
y = 2-2*cos(x).*cosh(x)+sin(x).*sinh(x);
end

  

function rx = MultiRoots(equ,n,a,b)
% equ -- equation which roots to be found
% n   -- number of roots to be found
% a   -- left end of the section
% b   -- right end of the section
opt = optimset(\'Display\',\'off\');
px = linspace(a,b,100);
plot(px,equ(px),px,zeros(1,100))
hold on
[x0,~] = ginput(n);
rx=fsolve(equ,x0,opt);
fprintf(\'          Root\n\')
for i=1:n
    fprintf(\' %d %12.5f\n\',i,rx(i)) 
end
end

  

 

用fsolve求解非线性方程(组)的用法:https://cn.mathworks.com/help/optim/ug/fsolve.html

先写要求解的方程(组)(kx=0的形式)保存为root2d.m

1 function F = root2d(x)
2 F(1) = exp(-exp(-(x(1)+x(2))))-x(2)*(1+x(1)^2);
3 F(2) = x(1)*cos(x(2))+x(2)*sin(x(1))-0.5;
4 end

直接用fsolve会显示一些信息,可以关掉。

options = optimoptions(\'fsolve\',\'Display\',\'none\');
x = fsolve(@root2d,[0,0],options)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi xe 10.2.3 与delphi xe 8发布文件的写法不一样发布时间:2022-07-18
下一篇:
DelphiActionList详解发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap