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

标签 matlab iteration equation integral

我们有一个类似于 Fredholm integral equation 的等式第二种。

enter image description here

为了求解这个方程,我们得到了一个保证收敛于我们的特定方程的迭代解。现在我们唯一的问题在于在 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_ax 的函数,表示迭代的初始值。 msxxi 的函数。

正如您可能看到的,我们希望 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

也可以将指针重新绑定(bind)到函数。

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

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

加上您的参数...

关于matlab - 在Matlab中实现积分方程的迭代求解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16568241/

相关文章:

matlab - 用于删除 1 个像素连接的结构元素

matlab - MATLAB中的&和&&有什么区别?

matlab - 在matlab中可视化地将数据分成两类

javascript - 我不明白我的 for 循环?

python - 如何将不相等的列表压缩为第一个列表与其他列表的乘积?

c# - |x-y|之间差值最小的改进方程算法ax+by=c

python - 相同的方程式,Pylab 和 Octave 的不同答案

matlab - 在matlab中安装matConvNet的请求?

python - For 循环语句评估

java - 如何从字符串分词器函数中设计和分割标记?