关于用MATLAB求解定积分方程的问题

关于用MATLAB求解定积分方程的问题

Matlab论坛的总结帖: MATLAB中文论坛常见问题归纳-技术专栏-MATLAB中文论坛

帖子里面也有包含对于matlab中常用积分求解的介绍。

关于用matlab求解积分方程的问题,现在比较流行的是符号求解的方法。

对于积分方程的问题,可以分为以下三类:

  1. 积分上限(下限)值为要求得方程解,且积分表达式中不含有自变量

看一个符号求解的例子

这种问题用求解解析解的方法比较困难,可以采用求解数值解的方法。

求解代码如下:

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函数用于求解在给定初始值周围利用最小二乘法找零点的函数。

  1. 积分上限(下限)值为要求得方程解,且积分表达式中含有自变量

这是比较复杂的情况,对于这种情况,求解代码如下:

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)

  1. 需要求解的参数在积分式中,但是积分上下限都是已知的

要求解的是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

  • 22
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值