我正在尝试创建一个图形,显示我通过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个红色圆圈,下部窗口中未绘制任何内容。我仍然不擅长绘制循环迭代。有人可以帮助我绘制我计算出的解决方案和错误吗?
答案 0 :(得分:2)
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);