Как я могу построить решения и ошибки, полученные с помощью Jacobi Iteration? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь создать рисунок, показывающий решение, которое я получил путем итерации Якоби, вместе с истинным решением, а также ошибку решения Якоби.

Фигура, которую я пытаюсь создать, должна состоять из двух графиков.

Я использовал команду subplot, чтобы разбить фигуру на верхнюю и нижнюю оси, и я написал цикл for, который вычисляетитерации Якоби и ошибка.Цикл будет повторяться 400 раз, используя x0 в качестве начального предположения.Перед этим я вычислил истинное решение для системы Ax = b.

N = 30;
iter = 400;
A = toeplitz([-2 1 zeros(1, N-2)], [-2 1 zeros(1, N-2)]);
bk = ones(N,1);
for jj = 1:N
    bk(jj) = cos(5*jj) + (1/2)*sin(7*jj);
end
x = A\bk;
D = diag(diag(A));
T = A - D;
x0 = zeros(N,1);
error = zeros(iter,1);
M = -D\T;
g = D\bk;
for nn = 1:iter
    x0 = M*x0 + g;
    error(nn) = norm(x - x0,2);
end
subplot(2,1,1)
plot(x0(1:N,1),'ro');
ylabel('Solution','FontSize',22);
title('Solution by Jacobi Iteration','FontSize',22);
xlim([0 pi]);
ylim([-5 5]);
xticks(0:0.5:3);
yticks(-5:5:5);
subplot(2,1,2)
plot(error(1:N),'ro')
ylabel('Error','FontSize',22);
xlabel('t','FontSize',22);
xlim([0 pi]);
ylim([0 0.1]);
xticks(0:0.5:3);
yticks(0:0.05:0.1);

. В верхнем окне должно отображаться истинное решение в красных кружках, соединенных сплошными линиями.Нижнее окно показывает ошибку в виде красных кружков, соединенных пунктирными линиями.Когда я запустил свой код, в верхнем окне появилось только 3 красных кружка, а в нижнем окне ничего не отображалось.Я все еще плохо строю итерации цикла.Может ли кто-нибудь помочь мне с построением вычисленных мной решений и ошибок?

1 Ответ

0 голосов
/ 30 января 2019

Операторы xlim и ylim не являются репрезентативными для данных.

  • x0 и x имеют N элементов (30 здесь), а такжеэлементы x и x0 охватывают от -2 до 2 в этой настройке.

  • error имеет iter элементов (400 здесь) и элементы errorперейти от 4 до 0,01.

Для этих графиков индекс элемента отображается на горизонтальную ось X, а их значения - на ось Y.Я думаю, что эта настройка графика должна дать вам желаемый результат (я, вероятно, изменился больше, чем нужно):

subplot(2,1,1);
plot(1:N, x0(1:N,1), 'ro', 1:N, x,'k+');
title('Solution by Jacobi Iteration','FontSize',22);

ylabel('Solution','FontSize',22);
xlim([1, N]);
ylim([-3, 3]);
xticks(1:N);
yticks(-3:0.5:3);

subplot(2,1,2)
semilogy(1:iter, error(1:iter),'ro')
ylabel('Error','FontSize',22);
xlabel('t','FontSize',22);
xlim([1 iter]);
ylim([0 4]);
xticks(0:25:400);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...