Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中实现积分方程的迭代求解_Matlab_Iteration_Equation_Integral - Fatal编程技术网

在Matlab中实现积分方程的迭代求解

在Matlab中实现积分方程的迭代求解,matlab,iteration,equation,integral,Matlab,Iteration,Equation,Integral,我们有一个类似于第二类方程的方程 为了解这个方程,我们得到了一个迭代解,它保证收敛于我们的特定方程。现在我们唯一的问题是在MATLAB中实现这个迭代过程 目前,代码中有问题的部分如下所示: function delta = delta(x,a,P,H,E,c,c0,w) delt = @(x)delta_a(x,a,P,H,E,c0,w); for i=1:500 delt = @(x)delt(x) - 1/E.*integral(@(xi)((c(1)-c(2)*delt(xi

我们有一个类似于第二类方程的方程

为了解这个方程,我们得到了一个迭代解,它保证收敛于我们的特定方程。现在我们唯一的问题是在MATLAB中实现这个迭代过程

目前,代码中有问题的部分如下所示:

function delta = delta(x,a,P,H,E,c,c0,w)

delt = @(x)delta_a(x,a,P,H,E,c0,w);

for i=1:500
    delt = @(x)delt(x) - 1/E.*integral(@(xi)((c(1)-c(2)*delt(xi))*ms(xi,x,a,P,H,w)),0,a-0.001);  
end
delta=delt;

end
delta_a
x
的函数,表示迭代的初始值
ms
x
xi
的函数

正如您可能看到的,我们希望
delt
在迭代中同时依赖
x
(积分之前)和
xi
(积分内部)。不幸的是,这种编写代码的方式(使用函数句柄)并没有像我们希望的那样给我们一个数值。我们不能将
delt
写为两个不同的函数,一个是
x
,另一个是
xi
,因为
xi
没有定义(直到
integral
定义它)。那么,我们如何确保
delt
依赖于积分内部的
xi
,并且仍然从迭代中获得数值呢

你们中有人对我们如何解决这个问题有什么建议吗

利用数值积分


输入参数说明:x是数值向量,其余均为常数。我的代码的一个问题是没有使用输入参数x(我猜这意味着x被视为一个符号)。

看起来您可以在MATLAB中嵌套匿名函数:

f = 

    @(x)2*x

>> ff = @(x) f(f(x))

ff = 

    @(x)f(f(x))

>> ff(2)

ans =

     8

>> f = ff;


>> f(2)

ans =

     8
还可以重新绑定指向函数的指针

因此,您可以像这样设置迭代

delta_old = @(x) delta_a(x)
for i=1:500
    delta_new = @(x) delta_old(x) - integral(@(xi),delta_old(xi))
    delta_old = delta_new
end

加上你的参数…

你可能想考虑解决你的问题的一个离散版本。

K
作为离散Fredholm内核的矩阵
K(t,s)
,例如

   K(i,j) = int_a^b K(x_i, s) l_j(s) ds
其中,
l_j(s)
例如是与插值节点相关联的第j个
(x_i)=x_1,x_2,…,x_n

然后,解决Picard迭代就像执行

  phi_n+1 = f + K*phi_n
i、 e


其中,
phi_n
f
phi
f
(x_i)

上的节点值,您使用符号积分还是数值积分?@Jan数值积分。(编辑了我的问题)也许
x
是网格点的向量,在这里你的函数将被近似…谢谢你的回答!我想我理解你的意思,但你能进一步解释一下l_j(s)吗?特别是“例如,第j次拉格朗日插值……”谢谢你的回答!我的代码和你的代码的问题在于没有使用函数输入参数x。x是一个向量,必须在迭代中使用。
  for i = 1:N   
       phi = f + K*phi
  end