📄 cg.txt
字号:
//CG算法
function CG(X0:Array,myMat:Array,myResult:Array,n:Number,myErr:Number):Number
{
//x0为初始迭代向量,myMat为增广阵,myResult记录中间迭代结果,myErr为最小误差
var counter:Number =1;//存储迭代次数
var RF1:Number;
var RF2:Number;
var err:Number=0.0;
var AP:Array=new Array(7);
for(var i=1;i<=n;i++)
{
myResult[1][i]=X0[i];
}
for(var i=1;i<=n;i++)
{
myResult[2][i]=0.00;
myResult[3][i]=0.00;
for(var j=1;j<=n;j++)
myResult[2][i]=myResult[2][i]+myMat[i][j]*X0[j];
myResult[2][i]=myMat[i][n+1]-myResult[2][i];
myResult[3][i]=myResult[2][i];
err=err+myResult[2][i]*myResult[2][i];
}
while(1)
{
if(counter>20||Math.sqrt(Math.abs(err))<myErr)
break;
RF1=0.0;
for(var i=1;i<=n;i++)
RF1=RF1+myResult[(counter-1)*3+2][i] * myResult[(counter-1)*3+2][i];
for(var i=1;i<=n;i++)
{
AP[i]=0.00;
for(var j=1;j<=n;j++)
AP[i]=AP[i]+myMat[i][j]*myResult[(counter-1)*3+3][j];
}
RF2=0.00;
for(var i=1;i<=n;i++)
RF2=RF2+AP[i]*myResult[(counter-1)*3+3][i];
myResult[(counter-1)*3+1][n+1]=RF1/RF2;
//计算xk+1=xk+ap;
for(var i=1;i<=n;i++)
myResult[counter*3+1][i]=myResult[(counter-1)*3+1][i]+ myResult[(counter-1)*3+1][n+1] * myResult[(counter-1)*3+3][i];
//计算rk+1=rk-ak*Apk;
for(var i=1;i<=n;i++)
myResult[counter*3+2][i]=myResult[(counter-1)*3+2][i] - myResult[(counter-1)*3+1][n+1] * AP[i];
myResult[(counter-1)*3+2][n+1]=0.0;
for(var i=1;i<=n;i++)
myResult[(counter-1)*3+2][n+1]=myResult[(counter-1)*3+2][n+1] + myResult[counter*3+2][i] * myResult[counter*3+2][i];
err= myResult[(counter-1)*3+2][n+1];
myResult[(counter-1)*3+3][n+1]=err/RF1;
for(var i=1;i<=n;i++)
myResult[counter*3+3][i]=myResult[counter*3+2][i] + myResult[(counter-1)*3+3][i] * myResult[(counter-1)*3+3][n+1];
counter++;
}
return counter;
}
//CG算法
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -