• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: L  U分解  追赶法  

资源简介

C语言实现L U分解 追赶法 平方根法对线性方程组的求解 计算方法中算法的实现

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#define  recept 100
double LU1(double **xdouble *y);
double catch1(double **xdouble *y);
double Cholesky(double **xdouble *y);
int n;
int main()
{
clock_t startend;
printf(“请输入方程组的阶数:“);
scanf(“%d“&n);
double **x;
x = (double**)malloc(sizeof(double*)*n);
int ij;
for(i = 0;i x[i] = (double*)malloc(sizeof(double)*n);
for(i = 0;i for(j = 0;j {
printf(“请输入X%d%d:“ij);
scanf(“%lf“&x[i][j]);
}
double *y;
y = (double*)malloc(sizeof(double)*n);
for(i = 0;i {
printf(“请输Y%d:“i);
scanf(“%lf“&y[i]);
}
printf(“\n“);

start=clock();
for(i = 0;i<100;i++)
{
LU1(xy);
//catch1(xy);
//Cholesky(xy);
}
end = clock();
printf(“程序用时为%lf\n“(double)(end -start) / CLOCKS_PER_SEC/recept );
return 0;
}
double LU1(double **xdouble *y)
{

double **l**u;
int ijk;
l = (double**)malloc(sizeof(double*)*n);
for(i = 0;i l[i] = (double*)malloc(sizeof(double)*n);

u = (double**)malloc(sizeof(double*)*n);
for(i = 0;i u[i] = (double*)malloc(sizeof(double)*n);
for(i = 0;i for(j = 0;j {
l[i][j] = 0;
u[i][j] = 0;
}
double sum = 0;
for(i = 0;i
{
//此循环求u每行l每列
for(j = i;j {
for(k = 0;k sum = sum+l[i][k]*u[k][j];
u[i][j] = x[i][j] - sum;
sum = 0;
for(k = 0;k sum = sum + l[j][k]*u[k][i];
l[j][i] = (x[j][i] - sum)/u[i][i];
sum = 0;
}
}
/* for(i = 0;i {
for(j = 0;j printf(“%lf “l[i][j]);
printf(“\n\n“);
}
for(i = 0;i {
for(j = 0;j printf(“%lf “u[i][j]);
printf(“\n\n“);
}*/
sum = 0;
double *b*solve;
b = (double*)malloc(sizeof(double)*n);
solve = (double*)malloc(sizeof(double)*n);
for(i = 0;i {
for(k=0;k sum = sum+l[i][k]*b[k];
b[i] = y[i] - sum;
sum = 0;
}
for(i = 0;i printf(“b===%lf   y====%lf\n“b[i]y[i]);

for(i = n-1;i>=0;i--)
{
for(k = i+1;k sum = sum+u[i][k]*solve[k];
solve[i] = (b[i] - sum)/u[i][i];
sum = 0;
}
printf(“UL分解法:“);
for(i = 0;i printf(“x%d = %.12lf \n“i+1solve[i]);

return 0;
}

评论

共有 条评论