关于用MATLAB求解定积分方程的问题
Matlab论坛的总结帖: MATLAB中文论坛常见问题归纳-技术专栏-MATLAB中文论坛
帖子里面也有包含对于matlab中常用积分求解的介绍。
关于用matlab求解积分方程的问题,现在比较流行的是符号求解的方法。
对于积分方程的问题,可以分为以下三类:
- 积分上限(下限)值为要求得方程解,且积分表达式中不含有自变量
看一个符号求解的例子
这种问题用求解解析解的方法比较困难,可以采用求解数值解的方法。
求解代码如下:
function phi2 = antenna(phi1,L)
len = length(phi1);
for i = 1:len
myfun = @(phi2)['sqrt(75*75*2*(sin(phi)).^2+50*50*6*(cos(phi)).^2)'];
F = @(phi2)quadl(myfun(phi2),phi1(i),phi2)-L;
phi2(i) = fzero(F,phi1);
end
end
其中单引号引起来的部分,是一种字符串表示积分式的方法。
其中fzero函数用于求解在给定初始值周围利用最小二乘法找零点的函数。
- 积分上限(下限)值为要求得方程解,且积分表达式中含有自变量
这是比较复杂的情况,对于这种情况,求解代码如下:
C = 10;
myfun = @(yita) ['10./(',num2str(yita),'.*exp(x.^2)+10) '];
integal = @(yita) quadl(myfun(yita),0,yita)-yita*log(1+10./(yita*exp(yita.^2)));
sol=fzero(integal,3)
- 需要求解的参数在积分式中,但是积分上下限都是已知的。
要求解的是a,b的值。
代码:(取自网络),符号求解的方法
close all; clear; clc;
fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0);
function F = root2d(x)
syms t
a = x(1);
b = x(2);
F(1) = a*9.4^b-0.1;
F(2) = int(a*t^b,t,9.4,35)-0.625;
对于复杂的复合函数的定积分方程的求解,给出一个示例
问题简化描述如下:
matlab的代码如下:
function rout = route(rin,d)
t=2;
a=1.5;
F=0.5;
FF=F^2;
nmgo=sqrt(9.63);
c=0.3;
nmax=nmgo*((sqrt(FF+a^2)-F)/t+sqrt(1-c*a^2/(FF+a^2)));
myfun=@(x)sqrt((nmax+(F-sqrt(FF+x.^2))*nmgo/d).^2+c*x.^2*nmgo^2./(FF+x.^2));
myfun1 = @(rout,x)myfun(rout)./sqrt(myfun(x).^2+myfun(rout).^2);
F=@(rout)integral(@(x)myfun1(rout,x),rin,rout,'ArrayValued',true)-d;
rout = fzero(F,rin);
end