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

📄 main.cpp

📁 数值计算的作业题
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include<iostream.h>

#define MAX_N 20

void main()
{
	cout<<"==========================================="<<endl;
	cout<<"     Courant求解线性方程组AX=b"<<endl;
	cout<<"==========================================="<<endl;
    cout<<endl;
	int n,i,j,k;
	double **a,*b,*x,*y,**l,**u;
	cout<<"输入阶数n  (0<n<=20):"<<endl;
	cin>>n;
	if(n > MAX_N || n <=0)
	{
		cout<<"n 不合法!"<<endl;
		return;
	}
	a = (double **)malloc(sizeof(double*)*n);
	for(i = 0;i<n;i++)
	{
		a[i] = (double *)malloc(sizeof(double)*n);
	}
	b= (double *)malloc(sizeof(double)*n);
	x = (double *)malloc(sizeof(double)*n);
	y = (double *)malloc(sizeof(double)*n);
	u = (double **)malloc(sizeof(double*)*n);
	for(i = 0;i<n;i++)
	{
		u[i] = (double *)malloc(sizeof(double)*n);
	}
	l = (double **)malloc(sizeof(double*)*n);
	for(i = 0;i<n;i++)
	{
		l[i] = (double *)malloc(sizeof(double)*n);
	}
	cout<<"输入系数矩阵a(i,j)(按行输入)(每输入一个即回车)"<<endl;
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			cin>>a[i][j];

	cout<<"输入 b(j)(每输入一个即回车)"<<endl;
	for(i = 0;i<n;i++)
		cin>>b[i];
	for(i = 0;i<n;i++) u[i][j]=1;
	for(k=0;k<n;k++)
	{
		for(i=k;i<n;i++)
		{
			l[i][k] = a[i][k];
			for(j=0; j< k; j++)
				l[i][k] -= (l[i][j] * u[j][k]);
		}

		for(j = k+1; j<n ; j++)
		{	
			u[k][j] = a[k][j];
			for(i = 0; i < k; i++)
				u[k][j] -= (l[k][i]*u[i][j]);
			u[k][j] /= l[k][k];
		}

	}
	for(i = 0; i<n ; i++)
	{
		y[i] = b[i];
		for(j = 0; j < i; j++)
			 y[i] -= (l[i][j] * y[j]);
		y[i] /= l[i][j];
	}

	for(i = n-1; i>=0 ; i--)
	{
		x[i] = y[i];
		for(j = i+1;j<n;j++)
			x[i] -= (u[i][j] * x[j]);
	}

	cout<<"方程组的解为:"<<endl;
	for(i = 0; i < n-1; i++)
	{
		cout<<x[i]<<" , ";
	}
    cout<<x[n-1]<<endl;

}
/*
  完成人:pb03011103  肖璟
*/

⌨️ 快捷键说明

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