- 198
- 0
- 约3.77千字
- 约 8页
- 2016-05-01 发布于江西
- 举报
数值与符号计算 LU和QR分解实验报告.doc
数值与符号计算 实验(丑)
线性代数方程组求解
姓名: 学号: 学院:
实验题目
用C/C++语言实现如下函数:
bool lu(double* a, int* pivot, int n);矩阵的LU分解
bool guass(double const* lu, int const* p, double* b, int n);求线性代数方程组的解
void qr(double* a, double* d, int n);矩阵的QR分解
bool hshld(double const*qr, double const*d, double*b, int n); 求线性代数方程组的解
实验要求
撰写详细的实验报告
不必修改函数界面
用高斯列选主元消去法和矩阵QR分解两种方法求解下面3个方程组,比较这两种方法的误差。
实验算法结果
矩阵的Lu分解算法代码如下:
bool lu(double* a, int* pivot, int n)//矩阵LU分解
{
int i,j,k;
double max,temp;
max = 0;
temp = 0;
for (i=0; in-1; i++)//依次对第i列进行处理
{
// 选出i列的主元,记录主元位置
max = fabs(a[n*i + i]);
pivot[i]=i;
for(j=i+1; jn; j++)//j表示第j行
{
if( fabs(a[n*j + i])max)
{
max= fabs(a[n*j + i]) ;
pivot[i]=j;
}
}
// 对第i列进行行变换,使得主元在对角线上
if(pivot[i]!=i)
{
for(j=i; jn; j++)//ij与pivot[i]j换 只用对上三角进行处理
{
temp=a[n*i + j];
a[n*i + j]=a[n*pivot[i]+ j];
a[n*pivot[i]+ j]=temp;
}
}
for(j=i+1; jn; j++)//Pi 部分下三角L
a[n*j + i]=a[n*j+i]/a[n*i+i];
for(j=i+1; jn; j++)//计算上三角U
for(k=i+1; kn; k++)
a[n*j + k]=a[n*j+k]- a[n*j+i]*a[n*i+k];
}
//计算下三角 L
for(i=0; in-2; i++)//i行k列
for(k=i+1; kn-1;k++)
{
temp=a[n*pivot[k] + i];
a[n*pivot[k] + i]=a[k*n + i];
a[k*n + i]=temp;
}
return false ;
}
高斯求解线性方程组代码如下:
bool guass(double const* lu, int const* p, double* b, int n)//求线性代数方程组的解
{
int i,j;
double temp;
//按qivot对b行变换,与LU匹配
for(i=0; in-1; i++) //貌似错误在这里哦
{
temp = b[p[i]];
b[p[i]] = b[i];
b[i]=temp;
}
//Ly=b,将y的内容放入b
for(i=0; in; i++)
for(j=0; ji; j++)
b[i]=b[i]-lu[n*i+j]*b[j];
//Uy=x,将x的内容放入b
for(i=n-1; i=0; i--)
{
for(j=n-1; ji; j--)
b[i]=b[i]-lu[n*i+j]*b[j];
b[i]=b[i]/lu[n*i+i];
}
return false;
}
矩阵的QR分解算法代码如下:
void qr(double*
您可能关注的文档
最近下载
- 重庆天齐锂电新材料有限公司新建1000吨_年高能锂电材料电池级金属锂项目环评报告.pdf VIP
- DB65T 3694-2015 现行哈萨克文与西里尔哈萨克文编码字符转换规则.docx VIP
- TGXAS 1044-2025《中医护理三级查房规范》(发布稿).pdf VIP
- 华为云服务登录.doc VIP
- 采砂场工业用水水资源论证论证表详解.doc VIP
- Onkyo安桥TX-NR828中文说明书.pdf
- 采砂场工业用水水资源论证论证表分析报告.doc
- 【中考】2025年广东佛山数学试卷(原卷+答案).docx VIP
- 2021年广东省佛山市中考数学真题及答案.pdf VIP
- SpaceX火星探索任务成本预算与风险管理分析报告.docx
原创力文档

文档评论(0)