2016-12-19 20 views
2

私は助けを求めています。私はMatlabでKaczmarzメソッドをアニメーション化したいと思います。それは、システムの等式によって与えられる超平面上の連続投影解ベクトルによる方程式の解を見つけることを可能にする。 そして、私はこのベクトルのアニメーションを動かしたいと思っています(ポイントが投影されたベクトル上にあるように)。Kaczmarz animation

%% System of equations 
% 2x + 3y = 4; 
% x - y = 2; 
% 6x + y = 15; 
%% 

A = [2 3;1 -1; 6 1]; 
f = [4; 2; 15]; 
resh = pinv(A)*f 
x = -10:0.1:10; 
e1 = (1 - 2*x)/3; 
e2 = (x - 2); 
e3 = 15 - 6*x; 

plot(x,e1) 
grid on 
% 
axis([0 4 -2 2]) 
hold on 
plot(x,e2) 
hold on 
plot(x,e3) 
hold on 

precision = 0.001; % точность 
iteration = 100; % количество итераций 
lambda = 0.75; % лямбда 

[m,n] = size(A); 
x = zeros(n,1); 
%count of norms 
for i = 1:m 
    nrm(i) = norm(A(i,:)); 
end 

for i = 1:1:iteration 
    j = mod(i-1,m) + 1; 
    if (nrm(j) <= 0), continue, end; 
    predx = x; 
    x = x + ((f(j) - A(j,:)*x)*A(j,:)')/(nrm(j))^2; 
    p = plot(x); 
    set(p) 
    %pause 0.04; 
    hold on; 
    if(norm(predx - x) <= precision), break, end 
end 

私はset機能を使用することができますどのようにアニメーション、作るか想像していないことで、このメソッドのコードを書きました。

+0

をART(代数的再構成技術) –

答えて

3

コードには、冗長でランダムな部分がたくさんあります。 hold onに複数回電話をかけないでください。何もしません。またset(p)は何もしません。何かにpのプロパティを設定したい場合は、setを使用します。

また、結果をプロットしていますが、「変更」はプロットしていません。変更は、前と現行の間の線です。これは、プロットするために、predxなどの変数を使用する唯一の理由です。それを使用!

とにかく、次のコードはアルゴリズムをプロットしています。緑にプロットするための繰り返し線を追加してから削除して、最後の手順が何であるかを確認できます。私はまた、乞食のプロットを赤でプロットするように変更したので、それぞれのものが何であるかが明確になりました。

のためにあなたのループを変更

:これが表示されます

for i = 1:1:iteration 
    j = mod(i-1,m) + 1; 
    if (nrm(j) <= 0), continue, end; 
    predx = x; 
    x = x + ((f(j) - A(j,:)*x)*A(j,:)')/(nrm(j))^2; 




    plot([predx(1) x(1)],[predx(2) x(2)],'b'); %plot line 
    c=plot([predx(1) x(1)],[predx(2) x(2)],'g'); %plot it in green 
    pause(0.1) 
    children = get(gca, 'children'); %delete the green line 
    delete(children(1)); 

    drawnow 
%  hold on; 
    if(norm(predx - x) <= precision), break, end 
end 

:断層撮影では、Kaczman方法が最も使用され、彼らはそれを呼び出す場所:余分なランダムなコメントとして

enter image description here