summing two 3d matrices to check convergence

1 回表示 (過去 30 日間)
Thales
Thales 2017 年 9 月 5 日
編集済み: Matt J 2017 年 9 月 5 日
Given two 3d matrices, obtained in a iterative process as the solution to a PDE, I want to check convergence. To do so, I check:
abs( sum( A(:) - Aold(:) ) ) < eps
Is this the best way to do it? I mean, if I declare
A = rand(100,200,50);
B = rand(100,200,50);
And if I check
check1 = abs( sum( A(:)-B(:) ) );
check2 = abs( sum(sum(sum( A-B ) ) ) );
check3 = abs( sum(A(:)) - sum(B(:)) );
check4 = abs( sum(sum(sum(A))) - sum(sum(sum(B))) );
They should give the same answer. However,
>> check1-check2
ans =
2.3306e-12
>> check1-check3
ans =
3.8846e-09
>> check1-check4
ans =
-2.4812e-10
>> check2-check3
ans =
3.8823e-09
>> check2-check4
ans =
-2.5045e-10
>> check3-check4
ans =
-4.1327e-09
So it clearly is not exactly the same thing. What is the difference between the methods and what is the difference between sum(A(:)) and sum(sum(sum(A))) ? If I want to check convergence on a iterative process, what is the best way to do it?
  1 件のコメント
Matt J
Matt J 2017 年 9 月 5 日
編集済み: Matt J 2017 年 9 月 5 日
I think you really meant
sum(abs(A(:)-Aold(:)))<eps
This is the same as my Answer below, with p=1.

サインインしてコメントする。

採用された回答

Matt J
Matt J 2017 年 9 月 5 日
編集済み: Matt J 2017 年 9 月 5 日
norm(A(:)-Aold(:),p)<eps
where you choose p corresponding to your favorite p-norm

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeBoundary Conditions についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by