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

📄 ldlt.cpp

📁 结构矩阵分析
💻 CPP
字号:
//采用一维数组时p=i*(2*n-i+1)/2+j-i;
#include<iostream.h>
#include"error.h"
int LDLT(double *A,int n,double *B,int l);
//A传入左端矩阵,n为是方程维数,B是右端矩阵,l工况数
error LDLTsolve(double *A,int n,double *B,int l)
{
		int i,j;
		if(LDLT(A,n,B,l)){
			for(i=0;i<n;i++){
				cout<<"x("<<i+1<<")="<<B[i];
				for(j=1;j<l;j++){
					cout<<","<<B[i+j*n];
				}
				cout<<endl;
			}
			return yes;
		}
		else return zero;
}
int LDLT(double *A,int n,double *B,int l){
	double *a;int i,j,k,p,q,t,m;
	a=new double[n];
	for(k=0;k<n;k++){
		p=k*(2*n-k+1)/2;
		for(m=0;m<k;m++){
			q=m*(2*n-m+1)/2;
			a[m]=A[q+k-m]*A[q];
			A[p]=A[p]-a[m]*A[q+k-m];
			if(A[p]==0)return 0;
		}
		for(j=k+1;j<n;j++){
			t=p+j-k;
			for(m=0;m<k;m++){
				q=m*(2*n-m+1)/2;
				A[t]=A[t]-A[q+j-m]*a[m];
			}
			A[t]=A[t]/A[p];
		}
	}
	for(k=0;k<l;k++){
		p=k*n;
		for(i=1;i<n;i++){
			for(j=0;j<i;j++)
				B[i+p]=B[i+p]-A[j*(2*n-j+1)/2+i-j]*B[j+p];
		}
		for(i=0;i<n;i++)
			B[i+p]=B[i+p]/A[i*(2*n-i+1)/2];
		for(i=n-2;i>-1;i--){
			for(j=n-1;j>i;j--)
				B[i+p]=B[i+p]-A[i*(2*n-i+1)/2+j-i]*B[j+p];
		}
	}
	delete[] a;
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -