⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doolittle.cpp

📁 用选主元的doolittle分解法解用户输入的线性方程组。共4文件。
💻 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 + -