第1个回答 2015-12-21
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define N 20
/*以下程序为不选主元的三角分解法(Doolittle)*/
main()
{
int i,j,k,s;
float a[N][N]={0},L[N][N]={0},U[N][N]={0},sigma1,sigma2,b[N],y[N],x[N];
/*为L主对角线元素赋1*/
for(i=0;i<N;i++)
{
L[i][i]=1;
}
/*输入矩阵a*/
for(i=0;i<N;i++)
{
printf("请输入矩阵第%d行元素:\n",i+1);
for(j=0;j<N;j++)
scanf("%f",&a[i][j]);
}
/*计算U第一行的元素和L第一列的元素*/
for(i=0;i<N;i++)
{
U[0][i]=a[0][i];
L[i][0]=a[i][0]/U[0][0];
}
for(k=1;k<N;k++)
{
/*计算矩阵U*/
for(j=k;j<N;j++)
{
sigma1=0;
for(s=0;s<=k-1;s++)
sigma1+=L[k][s]*U[s][j];
U[k][j]=a[k][j]-sigma1;
}
/*计算矩阵L*/
for(i=k;i<N;i++)
{
sigma2=0;
for(s=0;s<=k-1;s++)
sigma2+=L[i][s]*U[s][k];
L[i][k]=(a[i][k]-sigma2)/U[k][k];
}
}
/*输出矩阵L、U*/
printf("a矩阵为:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5.1f ",a[i][j]);
printf("\n");
}
printf("L矩阵为:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5.1f ",L[i][j]);
printf("\n");
}
printf("U矩阵为:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5.1f ",U[i][j]);
printf("\n");
}
printf("请输入b矩阵\n",i+1);
for(i=0;i<N;i++)
scanf("%f",&b[i]);
/*回代法求解方程组Ly=b*/
for(i=0;i<N;i++)
{
sigma1=0;
for(k=0;k<=i-1;k++)
sigma1+=L[i][k]*y[k];
y[i]=b[i]-sigma1;
}
for(i=N-1;i>=0;i--)
{
sigma2=0;
for(k=i+1;k<N;k++)
sigma2+=U[i][k]*x[k];
x[i]=(y[i]-sigma2)/U[i][i];
}
printf("x为:\n");
for(i=0;i<N;i++)
printf("%5.1f ",x[i]);
printf("\n");
}
第2个回答 2009-04-05
对,把你运行有问题的代码粘上来
第3个回答 2009-04-05
/*
Input a liner system with exactly one solution.
Work out the roots using elimination
Example Input:
2
1 1 2
1 -1 0
(x1 + x2 == 2, x1 - x2 == 0)
Output:
x1 = 1.000000
x2 = 1.000000
which are the solution
*/
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int maxn = 100;
const double eps = 1e-8;
double a[maxn][maxn],b[maxn];
int n;
void getinfo()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
}
void process()
{
for(int i=0;i<n;i++)
{
int p = -1;
for(int j=i;j<n && p==-1;j++)
if(fabs(a[j][i])>eps)
p = j;
if(p==-1)
{
printf("Cannot determine the roots.\n");
return;
}
for(int j=i;j<n;j++) swap(a[i][j],a[p][j]);
swap(b[i],b[p]);
for(int j=0;j<n;j++)
if(j!=i && fabs(a[j][i])>eps)
{
double u = -a[j][i] / a[i][i];
for(int k=0;k<n;k++)
a[j][k] += a[i][k] * u;
b[j] += b[i] * u;
}
}
for(int i=0;i<n;i++) printf("x%d = %lf\n",i,b[i]/a[i][i]);
}
int main()
{
getinfo();
process();
return 0;
}
第4个回答 2019-03-23
#include
#include
#include
#include
#define n 20
/*以下程序为不选主元的三角分解法(doolittle)*/
main()
{
int i,j,k,s;
float a[n][n]={0},l[n][n]={0},u[n][n]={0},sigma1,sigma2,b[n],y[n],x[n];
/*为l主对角线元素赋1*/
for(i=0;i
=0;i--)
{
sigma2=0;
for(k=i+1;k
评论
0
0
加载更多