境界条件はu=g on Γとします。まず
一般論ですが次をご覧ください。
ある連立一次方程式
においてxが既知だったとします。すると
既知項を移行して
このうち線形独立な式は2本しかないので、一本目を削除します。これを反映させて次のように書くことができます
一見煩雑に見えますが、行列構造を変更しなくてよいのでおすすめです。同様にしてAとbを修正していきます
int i,j;//index
double tmp;//一時的な変数です
for(i=0;i<non;i++)
if(bn[i]==1)
b[i]=g(nbc[i][0],nbc[i][1]);
for(i=0;i<non;i++)
if(bn[i]==0){
tmp=0;
for(j=row_ptr[i];j<row_ptr[i+1];j++)
if(bn[col_ind[j]]==1)
tmp+=val[j]*b[col_ind[j]];
b[i]-=tmp;
}
for(i=0;i<non;i++)
if(bn[i]==1)
for(j=row_ptr[i];j<row_ptr[i+1];j++)
if(col_ind[j]==i)
val[j]=1;
else
val[j]=0;
else
for(j=row_ptr[i];j<row_ptr[i+1];j++)
if(bn[col_ind[j]]==1)
val[j]=0;
最終更新:2010年10月18日 10:31