| 最近帮助朋友解决一个问题,遇到了求解积分方程。在很多论坛上翻了翻帖子发现对这个问题的解决大多停留在符号求解或者转化为微分方程再求解上。由于很多积分没有解析解,因此符号求解不仅费时而且往往要碰壁。(我曾经符号求解过80多个积分方程,可能是比较复杂,结果程序一晚上才解了8个左右,速度令人无法忍受) 而转化为微分方程需要根据方程的形式(有的还不好化),且需要一定的数学基础,通用性较差。 为此,给出一种可行的数值解法,希望抛砖引玉,大家一起完善总结积分方程的解决办法。 这种方法主要利用MATLAB中的fzero函数以及匿名函数。fzero函数所用的算法是zeroin算法,该算法非常简单而且安全,其核心思想是将二分法的可靠性与逆二次插值法、割线法结合起来。这个算法是比较简单而且安全的,非常适合求在零点变号的函数的零点。另外利用匿名函数(7.0以上版本支持)可以方便的建立被积函数以及积分方程。 譬如针对如图所示的积分方程: 代码如下: tt=@(s) ['(x-' num2str(s) ').*exp(-x.^2/2)']; ff=@(s) quadl(tt(s),s,10)-1/2; sol=fzero(ff,3) 求得的结果为sol = 0.49458500000000
|
| |