📄 doolittle.cpp
字号:
#include <iostream.h>
#include <math.h>
int *doolittle1(double **p1,int n)
{
double sum;
double **A=p1,max,temp;
int *M=new int [n+1];
int i,j,k,t,line;
double *S=new double [n+1];
for(k=1;k<=n;k++)
{
for(i=k;i<=n;i++)
{
sum=0;
for(t=1;t<k;t++)
sum+=A[i][t]*A[t][k];
S[i]=A[i][k]-sum;
}
max=S[k];line=k;
for(i=k;i<=n;i++)
{
if(abs(max)<abs(S[i])) {max=S[i];line=i;}
}
M[k]=line;
if (line!=k)
{
for(t=1;t<=n;t++)
{
temp=A[k][t];A[k][t]=A[line][t];A[line][t]=temp;
}
temp=S[k];S[k]=S[line];S[line]=temp;
}
A[k][k]=S[k];
for (j=k+1;j<=n&&k<n;j++)
{
sum=0;
for(t=1;t<k;t++)
sum+=A[k][t]*A[t][j];
A[k][j]=A[k][j]-sum;
}
for(i=k+1;i<=n&&k<n;i++)
A[i][k]=S[i]/A[k][k];
}
delete []S;
return M;
}
double *doolittle2(double **p1,double *p2,int *p3,int n)
{
double sum;
double **A=p1,*B=p2,temp;
int k,i,t, *M=p3;
for(k=1;k<n;k++)
{
t=M[k];
temp=B[k];B[k]=B[t];B[t]=temp;
}
for(i=2;i<=n;i++)
{
sum=0;
for(t=1;t<i;t++)
sum+=A[i][t]*B[t];
B[i]=B[i]-sum;
}
B[n]=B[n]/A[n][n];
for (i=n-1;i>0;i--)
{
double sum=0;
for(t=i+1;t<n+1;t++)
sum+=A[i][t]*B[t];
B[i]=(B[i]-sum)/A[i][i];
}
delete []M;
return B;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -