資源簡介
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;
}
- 上一篇:攝像機標定TSAI兩步法
- 下一篇:動態規劃算法求解字符串比較問題c++源代碼
評論
共有 條評論