电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

瀏覽:2日期:2022-08-22 17:50:15

補(bǔ)充知識(shí):

正定矩陣

奇異矩陣

嚴(yán)格對(duì)角占優(yōu)

要理解Gauss消去法,首先來(lái)看一個(gè)例子:

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

從上例子可以看出,高斯消去法實(shí)際上就是我們初中學(xué)的階二元一次方程組,只不過(guò)那里的未知數(shù)個(gè)數(shù)$n=2$

$n>2$時(shí),Gauss消去法的思路實(shí)際上和解二元一次方程組是一樣的,方法如下:

將n方程組中的n−1個(gè)方程通過(guò)消元,形成一個(gè)與原方程組等價(jià)的一個(gè)新方程組,新方程組中的n−1個(gè)方程僅包含n−1個(gè)未知數(shù)。 故問(wèn)題就轉(zhuǎn)化為了求解n−1元的方程組,這樣我們可以繼續(xù)消元,以次類推,直到最后一個(gè)方程組為一元一次方程組 從最后一個(gè)一元一次方程組求解出最后一個(gè)未知量,然后逐步回代入之前的方程組,從而得到所有的未知數(shù)。 我們可以看到Gauss實(shí)際上就分為兩步:消去和回代

下面通過(guò)一般化得到Gauss消元法的求解過(guò)程

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

以上就是Gauss消去法的基本步驟,我們?cè)倩剡^(guò)頭看看有沒(méi)有什么問(wèn)題?

我們?cè)谇蟊壤?l_{ik}= frac{a_{ik}^{left (k-1 right )}}{a_{kk}^{left (k-1 right )}}$時(shí),如果分母很小,即:

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

$l_{ik}rightarrow infty$,那么

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

總結(jié)一下,能否使用Gauss消元法的情況

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

為了解決這個(gè)問(wèn)題,我們可以使用列主元Gauss消元法。

如何基于java實(shí)現(xiàn)Gauss消元法過(guò)程解析

參考了一些網(wǎng)上的代碼,這里給出Gauss的Java實(shí)現(xiàn)

package peterxiazhe;import java.util.Scanner;public class Gauss { /** * 列主元高斯消去法 */ static double A[][]; static double b[]; static double x[]; static int n; //n表示未知數(shù)的個(gè)數(shù) static int n_2; //記錄換行的次數(shù) public static void main(String[] args) { System.out.println('--------------輸入方程組未知數(shù)的個(gè)數(shù)---------------'); Scanner sc = new Scanner(System.in); n = sc.nextInt();A = new double[n][n]; b = new double[n]; x = new double[n];System.out.println('--------------輸入方程組的系數(shù)矩陣A:---------------'); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) {A[i][j] = sc.nextDouble(); } }System.out.println('--------------輸入方程組的常量向量b:---------------'); for(int i = 0; i < n; i++) {b[i] = sc.nextDouble(); }Elimination(); BackSubstitution(); PrintRoot(); } //消元法 public static void Elimination() { PrintA(); for(int k = 0; k < n; k++) { WrapRow(k); for(int i = k+1; i < n; i++) {double l = A[i][k] / A[k][k];A[i][k] = 0;for(int j = k+1; j < n; j++) { A[i][j] = A[i][j] - l * A[k][j];}b[i] = b[i] - l * b[k]; } //System.out.println('第' + k + '次消元后:'); //PrintA(); } } //回代法 public static void BackSubstitution() { x[n-1] = b[n-1] / A[n-1][n-1]; for(int i = n - 2; i >= 0; i--) { x[i] = (b[i] - solve(i)) / A[i][i]; } } public static double solve(int i) { double result = 0.0; for(int j = i; j < n; j++) result += A[i][j] * x[j]; return result; } //輸出方程組的根 public static void PrintRoot() { System.out.println('--------------方程組的根為---------------'); for(int i = 0; i < n; i++) { System.out.println('x' + (i+1) + ' = ' + x[i]); } } //交換Swap函數(shù)??? public static void Swap(double[] ar, int x, int y) { Double tmp = ar[x]; ar[x] = ar[y]; ar[y] = tmp; } public static void PrintA() { //輸出A的增廣矩陣 //System.out.println('--------------增廣矩陣---------------'); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) {System.out.print(A[i][j] + ' '); } System.out.println(b[i]); } } //交換矩陣的行 public static void WrapRow(int k) { //k表示第k+1輪消元 double maxElement = Math.abs(A[k][k]);int WrapRowIndex = k; // 記住要交換的行 for(int i = k + 1; i < n; i++) { if (Math.abs(A[i][k]) > maxElement) {WrapRowIndex = i;maxElement = A[i][k]; } } if (WrapRowIndex != k) { //交換求得最大主元 n_2 += 1; System.out.println('k = ' + k + '時(shí),' + '要交換的行為' + k + '和'+ WrapRowIndex); //先交換A for(int j = k; j < n; j++) {double[] arr = {A[k][j], A[WrapRowIndex][j]};Swap(arr, 0, 1);A[k][j] = arr[0]; A[WrapRowIndex][j] = arr[1];//double tmp = A[k][j];//A[k][j] = A[WrapRowIndex][j];//A[WrapRowIndex][j] = tmp; } //再交換b double[] arr = {b[k], b[WrapRowIndex]}; Swap(arr, 0, 1); b[k] = arr[0]; b[WrapRowIndex] = arr[1];// double tmp = b[k];// b[k] = b[WrapRowIndex];// b[WrapRowIndex] = tmp; System.out.println('--------------交換后---------------'); PrintA(); } }}

注意:由于Java不支持對(duì)基本數(shù)據(jù)類型的引用傳遞,這里使用了一個(gè)小技巧

java中交換兩個(gè)基本數(shù)據(jù)類型的變量函數(shù)swap(int[] source,int i,int j)

java中函數(shù)的參數(shù)傳遞機(jī)制是:基本數(shù)據(jù)類型采用值傳遞,對(duì)象采用傳引用。因此,如果要寫一個(gè)交換兩個(gè)int型變量數(shù)值的函數(shù),還真是有點(diǎn)不方便,必須采用一個(gè)數(shù)組對(duì)象來(lái)作為輔助,具體實(shí)現(xiàn)如下:

//交換兩個(gè)整數(shù) private static void swap(int[] source, int i, int j) { int temp = source[i]; source[i] = source[j]; source[j] = temp; }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 透平油真空滤油机-变压器油板框滤油机-滤油车-华之源过滤设备 | 商秀—企业短视频代运营_抖音企业号托管 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 棕刚玉_白刚玉_铝酸钙-锐石新材料| 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 上海诺狮景观规划设计有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 |