用C/C++语言实现如下函数:
1. bool lu(double* a, int* pivot, int n);矩阵的LU分解。
假设数组anxn在内存中按行优先次序存放。此函数使用高斯列选主元消去法将其就地进行LU分解。pivot为输出参数,pivot[0,n) 中存放主元的位置排列。
函数成功时返回false,否则返回true。
2. bool guass(double const* lu, int const* p, double* b, int n);求线代数方程组的解
设矩阵Lunxn为某个矩阵anxn的LU分解,在内存中按行优先次序存放。p[0,n)为LU分解的主元排列。b为方程组Ax=b的右端向量。此函数计算方程组Ax=b的解,并将结果存放在数组b[0,n)中。
函数成功时返回false,否则返回true。
3. void qr(double* a, double* d, int n);矩阵的QR分解
假设数组anxn在内存中按行优先次序存放。此函数使用HouseHolder变换将其就地进行QR分解。
d为输出参数,d [0,n) 中存放QR分解的上三角对角线元素。
4. bool householder(double const*qr, double const*d, double*b, int n); 求线代数方程组的解
设矩阵qrnxn为某个矩阵anxn的QR分解,在内存中按行优先次序存放。d [0,n) 为QR分解的上三角对角线元素。b为方程组Ax=b的右端向量。
函数计算方程组Ax=b的解,并将结果存放在数组b[0,n)中。
函数成功时返回false,否则返回true。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 75776 2013-04-18 17:37 TaskDebugTask.exe
文件 424560 2013-04-18 17:37 TaskDebugTask.ilk
文件 1256448 2013-04-18 17:37 TaskDebugTask.pdb
文件 36372480 2013-04-13 18:57 Taskipch ask-2269b20e ask-efa8f59f.ipch
文件 36438016 2013-04-18 17:35 Taskipch ask-6e8e7c8e ask-efa8f59f.ipch
文件 4006 2013-04-18 17:37 TaskTaskDebugcl.command.1.tlog
文件 19726 2013-04-18 17:37 TaskTaskDebugCL.read.1.tlog
文件 1318 2013-04-18 17:37 TaskTaskDebugCL.write.1.tlog
文件 113893 2013-04-18 17:37 TaskTaskDebugfunctions.obj
文件 2 2013-04-18 17:37 TaskTaskDebuglink-cvtres.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink-cvtres.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink-rc.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink-rc.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.13556-cvtres.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.13556-cvtres.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.13556-rc.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.13556-rc.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.13556.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.13556.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.14760-cvtres.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.14760-cvtres.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.14760-rc.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.14760-rc.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.14760.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.14760.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.1596-cvtres.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.1596-cvtres.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.1596-rc.read.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.1596-rc.write.1.tlog
文件 2 2013-04-18 17:37 TaskTaskDebuglink.1596.read.1.tlog
............此处省略81个文件信息
#include “stdafx.h“
bool lu(double* a int* pivot int n)
{
for(int i=0;i int pivotIndex=(n+1)*i;//当前主元位置
int maxCol=i;//当前主元所在行
for(int j=0;j int indexAdd=(j+1)*n;
if(fabs(*(a+maxCol*n+i)) maxCol=i+j+1;
}//选取列主元
}
if(*(a+pivotIndex)==0){
break;
return true;
}//主元为0,行列式为0,不可分解
if(maxCol!=i){
for(int k=0;k double doubleTemp;
doubleTemp=*(a+i*n+k);
*(a+i*n+k)=*(a+maxCol*n+k);
*(a+maxCol*n+k)=doubleTemp;
}//两行互换
//更新主元向量
int intTemp=*(pivot+i);
*(pivot+i)=*(pivot+maxCol);
*(pivot+maxCol)=intTemp;
}
//消去
for(int j=0;j double multiple=*(a+pivotIndex+n*j+n)/(*(a+pivotIndex));
*(a+pivotIndex+n*j+n)=multiple;
for(int k=1;k *(a+pivotIndex+n*j+n+k)-=(*(a+pivotIndex+k))*multiple;
}
}
}
return false;
}
void convert_b_lu(double const* ludouble* bint const* pivotint n){
//变换右端向量,根据消元过程刷新右端向量
for(int i=0;i for(int j=0;j *(b+(*(pivot+i+j+1)))-=(*(b+(*(pivot+i))))*(*(lu+(n+1)*i+n*(j+1)));
}
}
//根据主元选择过程变换右端向量元素位置
double* temp=new double[n];
for(int i=0;i *(temp+i)=*(b+i);
}
for(int i=0;i *(b+i)=*(temp+(*(pivot+i)));
}
delete[] temp;
}
bool guass(double const* lu int const* p double* b int n)
{
convert_b_lu(lubpn);
*(b+n-1)=(*(b+n-1))/(*(lu+n*n-1));
//迭代
for(int i=5;i>0;i--){
for(int j=0;j *(b+i-1)=(*(b+i-1))-(*(b+n-j-1))*(*(lu+(n+1)*(i-1)+j+1));
}
*(b+i-1)=(*(b+i-1))/(*(lu+(n+1)*(i-1)));
}
return false;
}
void qr(double* a double* d int n)
{
double temp1temp2;
double* temp=new double[n];
for(int i=0;i {
temp1=0;
for(int j=i;j temp1+=(*(a+j*n+i))*(*(a+j*n+i));
if(*(a+n*i+i)>0)
temp1=-sqrt(temp1);
else
temp1=sqrt(temp1);
*(d+i)=temp1;//存储主元
*(a+i*n+i)-=temp1;
temp2=0;
for(int j=i; j<=n-1; j++)
temp2+=(*(a+n*j+i))*(*(a+n*j+i));
temp2= sqrt(temp2);
for(int j=i; j<=n-1; j++)
*(a+n*j+i)=(*(a+n*j+i))/temp2 ;
for(int j=i+1;j {
for(int k=i; k {
temp2=0 ;
for(int l=i; l temp2+=(*(a+n*k+i))*(*(a+n*l+i))*(*(a+n*l+j));
*(temp+k)=(*(a+k*n+j))-2*temp2;
}
for(int k=i; k *(a+k*n+j)=*(temp+k);
}
}
*(d+n-1)=*(a+n*n-1);
delete[] temp;
}
bool householder(double const*qr double const*d double*b int n)
{
double doubleTemp;
double* temp=new double[n];
for(int i=0; i {
for(int j=i; j {
doubleTemp=0;
for(int k=i;k doubleTemp+=(*(qr+n*k+i))*(*(qr+n*j+i))*(*(b+k));
*(temp+j)=*(b+j)-2*doubleTemp;
}
for(int j=i; j *(b+j)=*(temp+
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 75776 2013-04-18 17:37 TaskDebugTask.exe
文件 424560 2013-04-18 17:37 TaskDebugTask.ilk
文件 1256448 2013-04-18 17:37 TaskDebugTask.pdb
文件 36372480 2013-04-13 18:57 Taskipch ask-2269b20e ask-efa8f59f.ipch
文件 36438016 2013-04-18 17:35 Taskipch ask-6e8e7c8e ask-efa8f59f.ipch
文件 4006 2013-04-18 17:37 TaskTaskDebugcl.command.1.tlog
文件 19726 2013-04-18 17:37 TaskTaskDebugCL.read.1.tlog
文件 1318 2013-04-18 17:37 TaskTaskDebugCL.write.1.tlog
文件 113893 2013-04-18 17:37 TaskTaskDebugfunctions.obj
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
文件 2 2013-04-18 17:37 TaskTaskDebugli
............此处省略81个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)