(原创)利用克拉默法则求解多元一次方程组.doc_第1页
(原创)利用克拉默法则求解多元一次方程组.doc_第2页
(原创)利用克拉默法则求解多元一次方程组.doc_第3页
(原创)利用克拉默法则求解多元一次方程组.doc_第4页
(原创)利用克拉默法则求解多元一次方程组.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(原创)利用克拉默法则求解多元一次方程组packagezouyf.matrix;/*/*authorzouyf2008-4-7本程序利用克拉默法则求解多元一次方程组*/publicclassGetMatrix.privatedoublesavequot;/保存变量系数privatedoubleconstquot;/保存常量系数privatedoublesaveResult;/保存解的集合publicGetMatrix(doublequot).intcount=quot.length;savequot=newdoublecountcount;constquot=newdoublecount;saveResult=newdoublecount;inti=0,j=0;for(i=0;icount;i+).for(j=0;jcount;j+).savequotij=quotij;constquoti=quoticount;saveResulti=0;privatedoublegetMatrixResult(doubleinput)/递归的方法求得某个行列式的值.if(input.length=2)/递归出口,为二阶行列式时,直接返回.returninput00*input11-input01*input10;else.doubletemp=newdoubleinput.length;/存放第一列的系数值doubletempinput=newdoubleinput.length-1input.length-1;doubleresult=0;for(inti=0;iinput.length;i+).tempi=inputi0;intm=0,n=0;for(intk=0;kinput.length;k+).if(k!=i).for(m=0;minput.length-1;m+).tempinputnm=inputkm+1;/删除当前变量系数所在的行和列,得到减少一阶的新的行列式n+;if(i%2=0)/递归调用,利用代数余子式与相应系数变量的乘积之和得到多阶行列式的值.result=result+tempi*getMatrixResult(tempinput);else.result=result-tempi*getMatrixResult(tempinput);returnresult;privatedoublegetReplaceMatrix(inti)/用常数系数替换相应的变量系数,得到新的行列式.doubletempresult=newdoublesavequot.lengthsavequot.length;for(intm=0;msavequot.length;m+).for(intn=0;nsavequot.length;n+).if(i!=m).tempresultnm=savequotnm;else.tempresultni=constquotn;/用常量系数替换当前变量系数returntempresult;publicdoublegetResult().doublebasic=0;basic=getMatrixResult(savequot);/得到变量系数行列式的值if(Math.abs(basic)0.00001)/得到行列式的值为零时,表示此方程组没有唯一解.System.out.println(itdosenothavethequeueresult!);returnsaveResult;doubletemp=newdoublesaveResult.lengthsaveResult.length;for(inti=0;isaveResult.length;i+).temp=getReplaceMatrix(i);saveResulti=getMatrixResult(temp)/basic;/依次计算得到每一个变量的解returnsaveResult;publicstaticvoidmain(Stringargs)./*/*测试方程组*2a+b-5c+d=8*a-3b-6d=9*2b-c+2d=-5*a+4b-7c+6d=0*/doubletest=.2,1,-5,1,8,.1,-3,0,-6,9,.0,2,-1,2,-5,.1,4,-7,6,0;GetMatrixgm=newGetMatrix(test);doubleuu=newdoubletest.length;/返回结果集uu=gm.getResult();for(inti=0;iuu.length;i+).System.out.println(uui+,);C+版#include stdafx.h#include #include #include /本程序利用克拉默法则求解多元一次方程组using namespace std;class GetMatrixpublic:GetMatrix(vector vector quot);double getMatrixResult(vector vector input);vector vector getReplaceMatrix(int i);vector getResult();private:vector vector savequot;vector constquot;vector saveResult;GetMatrix:GetMatrix(vector vector quot)int count = quot.size();savequot.resize(count);for (int i=0;icount;i+)savequoti.resize(count);constquot.resize(count);saveResult.resize(count);int i = 0, j = 0;for (i = 0; i count; i+)for (j = 0; j count; j+)savequotij = quotij;constquoti = quoticount;saveResulti = 0;double GetMatrix:getMatrixResult(vector vector input)/ 递归的方法求得某个行列式的值if (input.size() = 2)/递归出口,为二阶行列式时,直接返回return input00 * input11 - input01 * input10; elseint iLength=input.size();vector temp(iLength);vector vector tempinput(iLength-1,vector(iLength-1);double result = 0;for (int i = 0; i iLength; i+)tempi = inputi0;int m = 0, n = 0;for (int k = 0; k iLength; k+)if (k != i)for (m = 0; m iLength - 1; m+)tempinputnm = inputkm + 1;/删除当前变量系数所在的行和列,得到减少一阶的新的行列式n+;if (i % 2 = 0)/ 递归调用,利用代数余子式与相应系数变量的乘积之和得到多阶行列式的值result = result + tempi * getMatrixResult(tempinput);elseresult = result - tempi * getMatrixResult(tempinput);return result;vector vector GetMatrix:getReplaceMatrix(int i)/ 用常数系数替换相应的变量系数,得到新的行列式vector vector tempresult(savequot);for (int m = 0; m savequot.size(); m+)for (int n = 0; n savequot.size(); n+)if (i != m)tempresultnm = savequotnm; elsetempresultni = constquotn;/ 用常量系数替换当前变量系数return tempresult;vector GetMatrix:getResult()double basic = 0;basic = getMatrixResult(savequot);/得到变量系数行列式的值if (abs(basic) 0.00001)/得到行列式的值为零时,表示此方程组没有唯一解coutit dose not have the queue result!endl;return saveResult;int iLength=saveResult.size();vector vector temp(iLength,vector(iLength);for (int i = 0; i iLength; i+)temp = getReplaceMatrix(i);saveResulti = getMatrixResult(temp) / basic;/依次计算得到每一个变量的解return saveResult;int _tmain(int argc, _TCHAR* argv)/* 测试方程组* 2a+b-5c+d=8 * a-3b-6d=9 * 2b-c+2d=-5 * a+4b-7c+6d=0*/*double test145 = 2, 1, -5, 1, 8 , 1, -3, 0, -6, 9 , 0, 2, -1, 2, -5 , 1, 4, -7, 6, 0 ;*/* 测试方程组* 4a+b=3 * 8a+b=6*/double test123 = 4, 1 ,3, 8, 1,6 ;vector vector t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论