解方程组的通用VC程序.docx
- 文档编号:2261008
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:15
- 大小:17.89KB
解方程组的通用VC程序.docx
《解方程组的通用VC程序.docx》由会员分享,可在线阅读,更多相关《解方程组的通用VC程序.docx(15页珍藏版)》请在冰豆网上搜索。
解方程组的通用VC程序
本文中通过,直接解方程和迭代解方程两种方法实现了对方程组的求解,实现了对唯一解合最小二乘解的求法,并通过了实例验证。
给出了程序源码。
最终实现函数:
VoidWeiYiJie()//唯一解的实例
{
//方程形式:
ax1+bx2+cx3=d,a、b、c、d为向量
inti=0;
doubleHEADL[3][4]={
{1.0000000,3.0000000,4.0000000,6.0000000},
{2.0000000,1.0000000,4.0000000,3.0000000},
{5.0000000,6.0000000,2.0000000,1.0000000}};
CMatrixMethodsloveR;
intm=3,n=3;
doublea[10]={0};
intnn=0;
doublee[20]={0};
for(i=0;i<10;i++)
{
a[i]=1;
}
//hhhe
SolveResultDieDai(&HEADL[0][0],a,m,n,nn,e);
TRACE(L"\n");
for(i=0;i { TRACE(L"%0.8f\n",a[i]); } TRACE(L"\n"); } 运行结果: 直接解: -1.29629630 0.85185185 1.18518519 迭代解: -1.29629630 0.85185185 1.18518519 VoidWeiYiJie()//超定方程的最小二乘解实例 {////方程形式: ax1+bx2=c,a、b、c为向量 inti=0; doubleHEADL1[12][3]={ {0.0000000,0.0000000,0.0000000}, {1.2505800,62.466469,49.950000}, {2.4917458,248.97524,99.920000}, {3.7416651,561.06268,149.95000}, {4.9912442,997.74971,199.90000}, {6.2235389,1555.0134,249.86000}, {11.159454,5016.8443,449.56000}, {12.390666,6190.3765,499.60000}, {13.622296,7486.1327,549.55000}, {14.847737,8901.9607,599.55000}, {16.074345,10440.126,649.49000}, {17.285916,12090.807,699.46000}}; CMatrixMethodsloveR; m=12,n=2; memset(a,0,sizeof(a)); for(i=0;i<10;i++) { a[i]=1; } //hhhe SolveResultDieDai(&HEADL1[0][0],a,m,n,nn,e); TRACE(L"\n"); for(i=0;i { TRACE(L"%0.10f\n",a[i]); } TRACE(L"\n"); } 直接解: 39.9585718081 0.0007080380 迭代解: 39.9585718081 0.0007080380 /////////////////////////////////////////////////////////////////////////////////////////////////// //函数SolveResult: 解方程 //pRelativeCMatrix: 方程系数增广矩阵例如: 对于方程组a1*x1+a2*x2+a3*x3=c则pRelative=[a1,a2,a3,c] //pResult: 为方程的解,若: pRelative=[a1,a2,a3,c]则pResult=[x1,x2,x3]; //m: 为方程个数 //n: 为未知数个数 //返回值: : 方程组有唯一解1: 无穷多解2: 方程组无解-1: 最小二乘解 /////////////////////////////////////////////////////////////////////////////////////////////// intCDataFit: : SolveResult(double*pRelativeCMatrix,double*pResult,intm,intn) { inti=0,j=0,t=0,k=0; intnnNum=m*(n+1); double*ju_zhen1=newdouble[nnNum];//求解会改变pRelative的值,因此新建一个 memcpy(ju_zhen1,pRelativeCMatrix,sizeof(double)*nnNum); //把矩阵阶梯化 inttt=0; for(intl=0;l { for(inth=tt;h { if(ju_zhen1[h*(n+1)+l]==0) { continue; } if(ju_zhen1[h*(n+1)+l]! =0&&h>tt) { doublea=0; for(inti=0;i { a=-1*ju_zhen1[h*(n+1)+i]; ju_zhen1[h*(n+1)+i]=ju_zhen1[tt*(n+1)+i]; ju_zhen1[tt*(n+1)+i]=a; } } for(inti=tt+1;i { if(ju_zhen1[i*(n+1)+l]! =0) { for(intt=n;t>l;t--) { ju_zhen1[i*(n+1)+t]=ju_zhen1[i*(n+1)+t]-ju_zhen1[i*(n+1)+l]*ju_zhen1[tt*(n+1)+t]/ju_zhen1[tt*(n+1)+l]; } ju_zhen1[i*(n+1)+l]=0; } } tt=tt+1; } } //以下是找出系数矩阵与增广矩阵的秩,比较大小判断解的情况 intxishu_zhi=0,zengguang_zhi=0; //求系数矩阵秩 intm1=0; if(m>n) { m1=n; } for(inti=0;i { for(intj=i;j { if(ju_zhen1[i*(n+1)+j]! =0) { xishu_zhi=xishu_zhi+1; break; } } } //求增广矩阵秩 if(m>n+1) { m1=n+1; } for(inti=0;i { for(intj=i;j { if(ju_zhen1[i*(n+1)+j]! =0) { zengguang_zhi=zengguang_zhi+1; break; } } } if(xishu_zhi { if(xishu_zhi==n)//超定方程求唯一最小二乘解 { for(i=0;i { for(j=0;j { ju_zhen1[i*(n+1)+j]=0.0; } } for(i=0;i { for(j=0;j { for(k=0;k { ju_zhen1[i*(n+1)+j]+=(pRelativeCMatrix[k*(n+1)+j]*pRelativeCMatrix[k*(n+1)+i]); } } } //把矩阵阶梯化 inttt=0; for(intl=0;l { for(inth=tt;h { if(ju_zhen1[h*(n+1)+l]==0) { continue; } if(ju_zhen1[h*(n+1)+l]! =0&&h>tt) { doublea=0; for(inti=0;i { a=-1*ju_zhen1[h*(n+1)+i]; ju_zhen1[h*(n+1)+i]=ju_zhen1[tt*(n+1)+i]; ju_zhen1[tt*(n+1)+i]=a; } } for(inti=tt+1;i { if(ju_zhen1[i*(n+1)+l]! =0) { for(intt=n;t>l;t--) { ju_zhen1[i*(n+1)+t]=ju_zhen1[i*(n+1)+t]-ju_zhen1[i*(n+1)+l]*ju_zhen1[tt*(n+1)+t]/ju_zhen1[tt*(n+1)+l]; } ju_zhen1[i*(n+1)+l]=0; } } tt=tt+1; } } //还原回阶梯化后的值,为解最小二乘的转换方程做准备 memcpy(pRelativeCMatrix,ju_zhen1,sizeof(double)*nnNum); for(t=0;t { //每次都先恢复系数矩阵 memcpy(ju_zhen1,pRelativeCMatrix,sizeof(double)*nnNum); for(k=0;k { ju_zhen1[k*(n+1)+t]=pRelativeCMatrix[k*(n+1)+n];//再把常数列赋值给某一列 } //求行列式的值 inttt=0; for(intl=0;l { for(inth=tt;h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方程组 通用 VC 程序