如何绘制通过Jacobi迭代获得的解和误差?

时间:2019-01-30 00:02:08

标签: matlab

我正在尝试创建一个图形,显示我通过Jacobi迭代获得的解以及真实解以及Jacobi解的错误。

我要创建的图形应该包含两个图。

我使用了subplot命令,将图形分割成 上轴和下轴,我编写了for循环,用于计算Jacobi迭代和误差。使用x0作为初始猜测,循环将迭代400次。在此之前,我计算了系统Ax = b的真实解。

list1 = [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]
resultList = []
i = 0

while i < len(list1):
    if list1[i] == 1:
        if list1[i+1:i+5].count(1) == 4:
            resultList.append(1);
            i += 4
        else:
           resultList.append(list1[i])
    else:
        resultList.append(list1[i])

    i+=1
    print(i)

print(resultList)

上部窗口应以实线连接的红色圆圈显示真实的解决方案。下部窗口显示错误显示为红色 用虚线连接的圆圈。当我运行代码时,上部窗口中仅出现3个红色圆圈,下部窗口中未绘制任何内容。我仍然不擅长绘制循环迭代。有人可以帮助我绘制我计算出的解决方案和错误吗?

1 个答案:

答案 0 :(得分:2)

xlimylim语句不代表数据。

  • x0x具有N个元素(此处为30个),并且xx0的元素在-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);