2013-05-15 48 views
5

第2種のFredholm integral equationと同様の式があります。我々は、特定の式のために収束することが保証されて反復解法を与えられている。この方程式を解くためにMatlabの積分方程式の反復解法を実装する

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の関数であり、反復の初期値を表します。 msは、xxiの関数です。

deltは、x(積分の前)とxi(積分の内側)の両方に依存するようにしてください。残念なことに、コードを書く(関数ハンドルを使用する)この方法では、われわれが望むように数値は得られません。 deltをとxiのいずれかの2つの異なる関数として書き込むことはできません。xiが定義されていないため(integralが定義されているため)。だから、どうすればdeltxiに依存しているかどうかを確認することができますが、それでも繰り返しから数値が得られますか?

私たちがこの問題を解決する方法についてご意見をお聞かせください。数値積分

を入力パラメータの説明を使用して、

:Xは数値のベクトルであり、すべての残りの部分は定数です。私のコードの問題は、入力パラメータxが使用されていないことです(これは、xがシンボルとして扱われていることを意味します)。あなたはMATLABで無名関数のネストを行うことができますように

+1

シンボリックまたは数値積分を使用していますか? – Jan

+0

@Jan数値積分。 (私の質問を編集しました) – Linda

+0

おそらく 'x'は関数が近似されるべき格子点のベクトルです....? – Jan

答えて

0

に見えます:

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 

...あなたがあなたの問題の離散化バージョンを解決するために検討する必要があります

+0

ありがとうございました!私のコードとあなたの問題は、関数入力パラメータxが使用されていないということです。 xはベクトルであり、反復で使用する必要があります。 – Linda

0

のようなあなたの反復を設定することができます。

Kをフレドホルムカーネルを離散化する行列とします。k(t,s)l_j(s)は、例えば、j番目lagrange interpolant補間ノード(x_i) = x_1,x_2,...,x_nに関連付けられる

K(i,j) = int_a^b K(x_i, s) l_j(s) ds 

次に、あなたのピカードの繰り返しを解消することと同じくらい簡単です

phi_n+1 = f + K*phi_n 

すなわちphi_nf(x_i)phifの節点値です

for i = 1:N 
     phi = f + K*phi 
    end 

+0

あなたの答えをありがとう!私はあなたが何を得ているのか理解していると思いますが、あなたはl_j(s)の説明を拡張することができますか?特に、例えば「j番目のラグランジュ補間」は、 – Linda

関連する問題