我们有一个类似于 Fredholm integral equation 的等式第二种。
为了求解这个方程,我们得到了一个保证收敛于我们的特定方程的迭代解。现在我们唯一的问题在于在 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
也可以将指针重新绑定(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/