一、利用for循环解多元一次方程

package day4_01;
public class Demo1 {/*** 利用for循环解决三元一次方程* 2X-7=y* 5X+3Y+2Z=3* 3X+Z=7* * 解答:x=2  y=-3  z=1* 缺点:具有局限性,结果必须是整数,且考虑循环的范围(即值的可能范围)* 解决办法:1.int min = -Integer.   效率极其低下*        2.设置初始值,当不满足情况下,改变循环条件*/public static void test1(){int max=Integer.MAX_VALUE;int min=-Integer.MIN_VALUE;for (int x=min; x<max; x++) {for (int y=min; y<max; y++) {for (int z=min; z<max; z++) {if((y==2*x-7) && (5*x+3*y+2*z==3) && (3*x+z==7)){System.out.println("x="+x+"\ty="+y+"\tz="+z);}}}} }public  static void test2(){int max = 10;int min = -10;ok: for(;;){for (int x=min; x<max; x++) {for (int y=min; y<max; y++) {for (int z=min; z<max; z++) {if((y==2*x-7) && (5*x+3*y+2*z==3) && (3*x+z==7)){System.out.println("x="+x+"\ty="+y+"\tz="+z);break ok;}}}} max += 10;//扩大范围min -= 10;//扩大范围}}public static void main(String[] args) {//test1();//会卡住test2();}
}

测试结果为:

x=2 y=-3   z=1

二、利用矩阵解多元一次方程

package day4_03;import java.text.DecimalFormat;public class GaussUtil {/*** 该工具类用于计算多元一次方程组* @param* equ-方程的个数* var-变量的个数* array--增广矩阵* result[]-用于保存方程组的解*//*** * @return 通过返回值判断该方程组解的情况* 1.一个解(有效方程个数=变量个数)  =0* 2.无解(有效方程个数>变量个数)   -1* 3.多个解(有效方程个数<变量个数)  >0*/public static int GaussFunction(int equ,int var,int[][] array,double[] result){DecimalFormat df = new DecimalFormat("#.00");//定义程序中使用到的变量int i,j,k,max_r,temp,num1,num2,gcdtemp,lcmtemp,ta,tb;int col = 0;      //从第1列开始处理for(k=0;k<equ && col<var;k++,col++){  //循环处理增广矩阵中的各行max_r = k;        //用于记录当前列中绝对值最大数所在的行for(i=k+1;i<equ;i++){if(Math.abs(array[i][col])>Math.abs(array[max_r][col])){max_r = i;}}if(max_r != k){        //若最大值不是当前行,则将当前行与最大值所在行交换for(j=k;j<var+1;j++){temp = array[k][j];array[k][j] = array[max_r][j];array[max_r][j] = temp;}}//经过以上变换后判断当前col,k的元素是否为0,若为0,则说明col列第k行以下全是0//直接不用处理该列,继续下一列(但是要保持k不变,col+1)if(array[k][col] == 0){k--;continue;}//将该列(col)中k行以下元素变换为0for(i=k+1;i<equ;i++){if(array[i][col] != 0){//该元素不为0时才进行变换,否则跳到下一行num1 = Math.abs(array[i][col]);//获取该元素的绝对值num2 = Math.abs(array[k][col]);while(num2 != 0){ //求最大公约数temp = num2;num2 = num1 % num2;num1 = temp;}gcdtemp=num1;   //最大公约数(gcdtemp,lcmtemp都是整数)lcmtemp=(Math.abs(array[i][col]) * Math.abs(array[k][col]))/gcdtemp;//最小公倍数ta = lcmtemp/Math.abs(array[i][col]);tb=lcmtemp/Math.abs(array[k][col]);if(array[i][col]*array[k][col]<0){ //如果两数符号不同 tb = -tb;}//开始消元for(j=col;j<var+1;j++){array[i][j] = array[i][j]*ta - array[k][j]*tb;}}}}//到此变换完成上三角矩阵 (对角线以下元素均为0)/**System.out.println("****************");//用于测试输出的矩阵即相关数据for(int m=0;m<array.length;m++){for(int n=0;n<array[m].length;n++){System.out.print(array[m][n]+" ");}System.out.println();}System.out.println("k="+k);System.out.println("col="+col);System.out.println("****************");*///对得到的矩阵进行判断/*** 判断最后一行,最后一列的该元素(即常数矩阵的最后一个元素)* 若为0,则表示该方程无解,返回-1* 例如 {3, 1,-4,2}*    {3, 4,-1,3}*    {6, 8,-2,4}* 后面两个方程无解,此时会执行前面的k--,造成k和col的值不相等* 变换后的结果为*     {6, 8,-2, 4}*    {0,-6,-6, 0}*    {0, 0, 0, 2}*    array[i][col]=array[2][3]=2   retutn -1 无解;*/for(i=k;i<equ;i++){if(array[i][col] != 0){return -1;}}/*** 变量var个数大于变换后矩阵中有效方程的个数* 则有无穷多个解  return var - k;* 例如 {3, 1,-4,2}*    {3, 4,-1,3}*    {6, 8,-2,6}* 后面两个方程化简后是相同的,相当于一个方程* 变换后的结果为*       {6, 8,-2, 6}*    {0,-6,-6,-2}*    {0, 0, 0, 0}*    通过前面代码过滤掉了无解的情况,若此时k<var,则说明*    有效方程个数少于变量个火,有无穷多个解*/if(k<var){return var - k;}/*** 通过以上过滤,则说明方程有唯一解* 通过下面代码对方程进行求解*   例  {7, 2, 6,-4}*     {3, 5,-4, 0}*     {4,-1, 5,-5}*   变换后*    {7,  2,  6,   -4}*    {0, 29,-46,   12}*    {0,  0,-371,-371}*   此时 k=3 col=3*/for(i=var-1;i>=0;i--){//从最后一个变量计算temp = array[i][var];//获取该变量的系数for(j=i+1;j<var;j++){if(array[i][j] != 0){temp-=array[i][j]*result[j];}}double d = (double)temp/array[i][i];//为了使结果更准确采用double类型保存result[i] = Double.parseDouble(df.format(d));}return 0;//有唯一解}//测试类public static void main(String[] args) {//传入参数---方程个数 equ=3 变量个数var=3int[][] arr = new int[][]{{2, 1, -1,2},{1, 2,-1, 5},{1,-1, 2,-7}};int equ = arr.length;int var = arr[0].length-1;double[] result = new double[var];//输出传入的参数查看结果//System.out.println(equ+"  "+var+"  "+result.length);//3 3 3//调用高斯函数int type = GaussFunction(equ,var,arr,result);switch(type){case -1:System.out.println("方程无解");break;case 0:System.out.println("该方程的解为:");for(int i=0;i<result.length;i++){System.out.println("x"+(i+1)+"="+result[i]);}break;default:System.out.println("该方程有无穷多解! 自由变量数量为:"+type);}}
}

测试结果如下:

该方程的解为:
x1=-1.0
x2=2.0
x3=-2.0

利用矩阵解多元一次方程相关推荐

  1. 组合数学之隔板法:多元一次方程组解的统计

    1. 内容 讨论多元一次不定方程: x 1 + x 2 + . . . + x d = t x_1 + x_2 + ... + x_d = t x1​+x2​+...+xd​=t有解的情况 隔板法求解 ...

  2. Excel解多元一次方程组(线代)

    目录: 方法一:矩阵解法 方法二:用克莱姆法则 方法三:用规划求解 ---------------------------------------------- Excel中解多元一次方程组的三种方法 ...

  3. python 线性代数:解多元一次方程

    因为在程序化交易策略中使用了网格算法进行交易,因为在网格中想设置动态资源大小的问题,所以就想到使用抛物线的分布方法来对网格资金配置进行分配. 比如我的网格最大值设置为1540,最小值设置为1404,中 ...

  4. 计算机怎么接多元一次方程,使用Excel解多元一次方程组的三种方法

    本文列出了使用Excel中解多元一次方程组的三种方法:矩阵解法.用克莱姆法则和用规划求解的方法. 方法一:矩阵解法 原理:对于由n个未知数,n个方程组成的多元一次方程组: 写成矩阵形式为Ax=b,其中 ...

  5. php计算多元一次方程,C++实现的求解多元一次方程示例

    本文实例讲述了C++实现的求解多元一次方程.分享给大家供大家参考,具体如下: 注:这里计算的是n*n的等距矩阵,代码如下: #include #include #include #include us ...

  6. c语言 多元一次方程,C++实现的求解多元一次方程示例

    本文实例讲述了C++实现的求解多元一次方程.分享给大家供大家参考,具体如下: 注:这里计算的是n*n的等距矩阵,代码如下: #include #include #include #include us ...

  7. 求解多元一次方程解的个数(参考内容)

    1.整数多元一次不定方程的矩阵解法与程序设计 2.欧几里得算法(含严谨证明) 3.扩展欧几里得算法(含严谨证明) 4.多元一次不定方程解的个数 但只有系数是1的时候才可以排列组合..我们要解决的是系数 ...

  8. 怎样用c语言编程解多元方程组,C语言解多元一次方程组(矩阵法)

    C语言解多元一次方程组(矩阵法) 发布时间:2016年06月08日 评论数:抢沙发 阅读数:2560 #include #include #define Han 200//(可自设)多元一次方程组有n ...

  9. 【C++】超级详细,多元一次方程的求解方法

    在这个问题中,假设我们是要解一个N元一次的方程: 解题使用方法: 使用多元一次方程的 消去法 假设我有三个方程 2a-b+c=3 , 3a+b-c=2 , a-3b+2c=1 对第一个式子我让第一个元 ...

最新文章

  1. (C++)1046 Shortest Distance
  2. Android动态加载入门 简单加载模式
  3. Shell函数:Shell函数返回值、删除函数、在终端调用函数
  4. Ethercat解析(十二)之命令行工具的使用
  5. mysql5.6安装配置教程_Centos6.8 Mysql5.6 安装配置教程
  6. Git工作笔记003---Git常用命令总结
  7. Django - rest - framework - 下
  8. swift使用cocoapods导入第三方库
  9. Tcmalloc优化Mysql内存管理
  10. VS2019MSDN的下载安装和使用
  11. w10 桌面计算机垃圾桶,win10垃圾桶图标不见了怎么办
  12. php7和php5区别
  13. 工业机器人的臂部配置形式_工业机器人臂部设计注意事项
  14. Mac终端adb安卓刷机
  15. 微星x58pro支持服务器内存吗,免费午餐 微星全线X58升级BIOS支持SLI
  16. 一部手机最长能用几年?
  17. Http 协议学习笔记 (燕十三老师)
  18. python爬虫爬取京东商品评价_python爬取京东商品信息及评论
  19. 微应用 qiankun 项目搭建
  20. 贾扬清:如何看待人工智能方向的重要问题?【相辅相成不可或缺的两位“大数据和AI”】

热门文章

  1. ubuntu创建新账号在登录界面找不到相应的帐号
  2. 阿里巴巴Java开发手册(嵩山版)v1.7.0 及各个历史版本 百度云直接带走 不需要其他操作
  3. 微雪A20 配置 红外遥控器
  4. xml文件中引入xsd文件问题解决
  5. 前端HTML+CSS面试题汇总一
  6. 解决锁等待超时的解决方法
  7. Linux下多线程的操作
  8. 智慧园区BIM智能化系统平台建设方案
  9. C语言程序100例之C#版-021
  10. 本地计算机的oracle,(转)解决:本地计算机 上的 OracleOraDb10g_home1TNSListener服务启动后停止...