子程序r1mpyq(m,n,a,lda,v,w)整数m,n,lda双精度a(lda,n),v(n),w(n)c(c)**********c(c)c子程序r1mpyqc(c)c给定m乘n矩阵a,此子程序计算a*q,其中cq是2*(n-1)变换的乘积c(c)c gv(n-1)**gv(1)*gw(1)**克(n-1)c(c)c和gv(i),gw(i)是(i,n)平面上的旋转,其中c分别消除第i个和第n个平面中的元素。没有给出cq本身,而是提供了恢复c提供gv、gw旋转。c(c)c子程序语句是c(c)c子程序r1mpyq(m,n,a,lda,v,w)c(c)c其中c(c)c m是设置为数字的正整数输入变量a行的c。c(c)c n是设置为数字的正整数输入变量a列的c。c(c)ca是一个m乘n的数组。输入a必须包含矩阵c被正交矩阵q后乘如上所述。在输出端,a*q取代了a。c(c)c lda是一个不小于m的正整数输入变量c指定数组a的前导维数。c(c)cv是长度为n的输入数组。v(i)必须包含c恢复给定旋转gv(i)所需的信息如上所述。c(c)cw是长度为n的输入数组。w(i)必须包含c恢复给定旋转gw(i)所需的信息如上所述。c(c)调用了c个子程序c(c)c fortran供应。。。dabs、dsqrtc(c)c阿贡国家实验室。minpack项目。1980年3月。c伯顿·s·加博、肯尼思·希尔斯特罗姆、乔治·j·摩尔c(c)c**********整数i,j,nmj,nm1双精度cos,one,sin,temp数据一/1.0d0/c(c)c将第一组givens旋转应用于a。c(c)nm1=n-1如果(nm1.lt.1)转到50做20 nmj=1,nm1j=n-nmj如果(dabs(v(j))>一)cos=一/v(j)如果(dabs(v(j)).gt.one)sin=dsqrt(一个cos**2)if(dabs(v(j)).le。一)sin=v(j)if(dabs(v(j)).le。一)cos=dsqrt(一个sin**2)做10 i=1,m温度=cos*a(i,j)-sin*a(i,n)a(i,n)=sin*a(i、j)+cos*a(i,n)a(i,j)=温度10继续20继续c(c)c将第二组givens旋转应用于a。c(c)做40 j=1,nm1if(dabs(w(j)).gt.one)cos=one/w(j)if(dabs(w(j)).gt.one)sin=dsqrt(one-cos**2)if(dabs(w(j)).le。一)sin=w(j)if(dabs(w(j)).le。一)cos=dsqrt(一个sin**2)做30 i=1,m温度=cos*a(i,j)+sin*a(i,n)a(i,n)=-sin*a(i、j)+cos*a(i,n)a(i,j)=温度30继续40继续50继续返回c(c)c子程序r1mpyq的最后一张卡。c(c)结束