clc;
clear all;
close all;
N=4:1:16;
time=zeros(1,length(N));
error=zeros(1,length(N));
cheng=zeros(1,length(N));
jia=zeros(1,length(N));
chu=zeros(1,length(N));
for a=1:length(N)
A = randn(N(a), N(a))+1i*randn(N(a), N(a)); % 生成一个随机矩阵
for b=1:20
tic
[Q, R] = fx_QR_decom(A);
R_inv = fx_inverse_upper_triangular_matrix(R); %求三角矩阵的逆
A_inv = R_inv*Q';
time(a)=time(a)+toc;
error(a)=error(a)+sum(sum(abs(A_inv-inv(A))));
end
cheng(a)=(10*N(a).^3+9*N(a).^2-N(a))/6;
jia(a)=(13*N(a).^3-12*N(a).^2-N(a))/6;
chu(a)=(3*N(a).^2+N(a))/2;
time(a)=time(a)/20;
error(a)=error(a)/20;
end
figure(1);
plot(N,error,LineWidth=1.5,Marker="*");
title("schmidt QR分解求逆仿真");
xlabel("矩阵阶数");
ylabel("计算误差");
figure(2);
plot(N,time,LineWidth=1.5,Marker="*");
title("schmidt QR分解求逆仿真");
xlabel("矩阵阶数");
ylabel("计算时间");
figure(3);
plot(N,cheng,N,jia,N,chu,LineWidth=1.5,Marker="*");
legend("乘法","加法","除法");
title("schmidt QR分解求逆仿真");
xlabel("矩阵阶数");
ylabel("运算次数");