线性方程组

高斯消元解线性方程组的小东西

我的未来我决定 提交于 2019-12-06 02:18:04
#include<algorithm> #include<stdlib.h> #include<stdio.h> #include<math.h> int n; bool needDebug; double m[1005][1005]={0}; double x[1005]={0}; void input() { printf("请输入系数矩阵的阶数(1~1000)\n"); scanf("%d",&n); printf("请按行优先顺序输入增广矩阵(用空格、缩进或回车分割每个数字)\n"); for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) scanf("%lf",&m[i][j]); printf("是否输出中间过程的增广矩阵?是请输入y\n"); char cc[2]; scanf("%s",cc); if(cc[0]=='y') needDebug=1; else needDebug=0; } void debug() { if(!needDebug) return; printf("**********************\n"); for(int i=1;i<=n;i++,printf("\n")) for(int j=1;j<=n+1;j++) printf("%24.20lf",m[i][j]); printf("***

用Python的Numpy求解线性方程组

北慕城南 提交于 2019-12-03 17:32:56
原文链接: http://tecdat.cn/?p=8445 在本文中,您将看到如何使用Python的Numpy库解决线性方程组。 什么是线性方程组? 维基百科将 线性方程组 定义为: 在数学中,线性方程组(或线性系统)是两个或多个涉及同一组变量的线性方程的集合。 解决线性方程组的最终目标是找到未知变量的值。这是带有两个未知变量的线性方程组的示例, x 并且 y : 等式1: 4x + 3y = 20 -5x + 9y = 26 为了解决上述线性方程组,我们需要找到 x 和 y 变量的值。解决此类系统的方法有多种,例如消除变量,克莱默规则,行缩减技术和矩阵解决方案。在本文中,我们将介绍矩阵解决方案。 在矩阵解中,要求解的线性方程组以矩阵形式表示 AX = B 。例如,我们可以用矩阵形式表示 等式1 ,如下所示: A = [[ 4 3] [-5 9]] X = [[x] [y]] B = [[20] [26]] 要查找的值 x 和 y 变量 方程1 ,我们需要找到在矩阵中的值 X 。为此,我们可以采用矩阵逆的点积 A 和矩阵 B ,如下所示: X = inverse(A).B 用numpy求解线性方程组 要求解线性方程组,我们需要执行两个操作:矩阵求逆和矩阵点积。Python的Numpy库支持这两种操作。如果尚未安装Numpy库,则可以使用以下 pip 命令: $ pip

R语言解线性方程组和求极值

匿名 (未验证) 提交于 2019-12-03 00:40:02
1、R语言矩阵函数 2、求解线性方程组 分析:使用函数solve(a,b),运算a%*%x=b得到x。 a<-matrix(c(1,1,1,-1),2,2); b<-c(3,1); solve(a,b) 运行结果 > a<-matrix(c(1,1,1,-1),2,2);b<-c(3,1);solve(a,b) [1] 2 1 注:这里矩阵a从数组读数是按照列读数 解:先求Jacob行列式(求偏导) 相应的程序(程序名为:Newtons.R)为 Newtons<-function(fun,x,ep=1e-5,it_max=100){ index<-0;k<-1; while(k<it_max){ x1<-x;obj<-fun(x);x<-x-solve(obj$J,obj$f);norm<-sqrt((x-x1)%*%(x-x1)); if(norm<ep){index<-1;break}; k<-k+1} obj<-fun(x); list(root=x,it=k,index=index,FunVal=obj$f) } 在这个函数中,输入变量有:fun是方程构成的函数,x是初始变量,ep是精度要求,缺省时为e-5,it_max是最大迭代次数,缺省为100. 输出变量有:root是方程解的近似值,it是迭代次数,index是指标,index=1表明计算成功,index

齐次线性方程组和非齐次线性方程组

匿名 (未验证) 提交于 2019-12-02 23:03:14
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaoyaoqiekenaoo/article/details/84836519 定义 齐次线性方程组:等式右侧常数项全部为0 非齐次线性方程组: 等式右侧常数项不全部为0 齐次方程组的求解 将系数矩阵化为行阶梯形矩阵,记全为0的行数量为r=n-R(A)。将后r个未知数分别取值为1和0,对应的形成r个解。这些r个解的线性组合即为基础解系。 非齐次方程组的求解 分为两步:1.计算特解。将增广矩阵化为行阶梯形矩阵,将r个未知数全部取值为0,得到一个特解。 2.计算对应的齐次方程组的基础解系。 4. 方程组有解的判断条件 程序实现:列主消元法 #include<iostream> #include<cmath> using namespace std; const int n = 3; //交换2个数的大小 template<class T> void SWAP(T& a, T& b) { T c; c = a; a = b; b = c; } //高斯列主元素消元法 void gaussin_L(double a[n][n], double b[n]) { int i, j, k; int col, row; for (k = 0; k < n - 1; k++) { double ave

Python 线性方程组求解之:Jacobi迭代算法

匿名 (未验证) 提交于 2019-12-02 22:51:08
import numpy as np Delta=0.0001 #精度要求 #数据读取 data = [] f = open("H:/Notepad/数学实验/jacobi_data.txt") for line in f: line = line.replace("\n","") data.append(list(map(eval, line.split(",")))) f.close() data=np.array(data) #对data行初等变换,主元变为每列最大值 row,column=data.shape for i in range(row): max_value_index=np.argmax(np.fabs(data[i:row,i])) temp=np.copy(data[i,:]) data[i,:]=data[max_value_index+i,:] data[max_value_index+i,:]=temp #LU: -(L+U) #D:系数矩阵的对角线元素 #b:Ax=b中的b LU=np.negative(data[:,0:column-1]) D=np.zeros(row) b=data[:,column-1] for i in range(row): D[i]=data[i,i] LU[i,i]=0 #迭代求解 x=np.ones(row)

线性方程组之三:线性方程组的解法

痞子三分冷 提交于 2019-11-29 05:46:05
之前两回分别介绍了二元一次方程组和三元一次方程组的解法, 那里都是很具体的例子. 可能大家觉得之前太简单了, 没关系, 这一回我们稍微抽象一点, 考虑一般情形. 抽象挑战会大一些, 但确是揭示事情本质的. 如果看完本节觉得一头雾水, 没关系, 不妨先跳过本节, 看看后面几回的例子, 再跳回来看. 如果看完本节觉得很有道理, 那么恭喜你, 有点上路了. 为了表示任意多个变量, 我们不再用\(x,y,z\)来记变量, 而是采取下标写法, 用\(x_1,x_2,\cdots,x_n\)来记变量. \[ \left\{ \begin{split} &a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n = b_1\\ &a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n = b_2\\ &\qquad\qquad\qquad\cdots \\ &a_{m1}x_1+a_{m2}x_2+\cdots+a_{mn}x_n = b_m \end{split} \right.. \] 如果所有的系数\(a_{ij}\)都是\(0\), 那么该方程组的解只有两种情形. 一种是所有的\(b_i\)都为\(0\), 此时任意\(x_i\)都是它的解. 另外一种是某个\(b_i\neq0\), 此时无解. 如果\(a_{ij}\)不全为\(0\), 但是所有\(x

线性方程组之四:例子

て烟熏妆下的殇ゞ 提交于 2019-11-29 05:45:59
上回说到求解线性方程组的一般方法: 高斯消去法. 这一回我们来看一些具体的例子, 把高斯消去法练熟. 记得以前有篇课文叫卖油翁, 讲的是一个卖油的老头可以从铜钱的孔里将油倒过去, 而不粘湿钱. 别人都觉得很厉害, 问老头有什么诀窍, 老头说: 无他,唯手熟尔. 学数学也一样, 所谓熟能生巧, 练的多了自然也就会了. 好了, 不说废话了, 我们进入正题. 看这个方程组: \[ \left\{ \begin{split} &x_1+x_2-3x_4-x_5 = -2\\ &x_1-x_2+2x_3-x_4 = 1\\ &4x_1-2x_2+6x_3+3x_4-4x_5 = 7\\ &2x_1+4x_2-2x_3+4x_4-7x_5 = 1 \end{split} \right.. \] 首先对第一列利用高斯消去法, 得到 \[ \left\{ \begin{split} &x_1+x_2+0-3x_4-x_5 = -2\\ &0-2x_2+2x_3+2x_4+x_5 = 3\\ &0-6x_2+6x_3+15x_4+0 = 15\\ &0+2x_2-2x_3+10x_4-5x_5 = 5 \end{split} \right.. \] 然后对第二列利用高斯消去法, 得到 \[ \left\{ \begin{split} &x_1+x_2+0-3x_4-x_5 = -2\\ &0-2x

线性方程组之五:矩阵形式

本秂侑毒 提交于 2019-11-29 05:45:54
大家细细品味之前几回的内容就会发现, 其中的例子中真正起作用的是变量\(x_i\)前的系数, 而和符号\(x_i\)并没有太大的关系. 于是, 为了简(偷)化(懒), 矩阵应运而生. 对于线性方程组 \[ \left\{ \begin{split} &a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n = b_1\\ &a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n = b_2\\ &\qquad\qquad\qquad\cdots \\ &a_{m1}x_1+a_{m2}x_2+\cdots+a_{mn}x_n = b_m \end{split} \right.. \] 我们把它的系数按行列排成几排, 用花括号括起来, 记成 \[ A=\begin{pmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \cdots&\cdots&\cdots&\cdots \\ a_{m1}&a_{m2}&\cdots&a_{mn} \end{pmatrix}. \] 把\(A\)叫做矩阵. 对于\(A\)交换某两行(列)称为第一类初等变换, 在某一行(列)乘以一个非零数称为第二类初等变换, 将某一行(列)乘以一个数加到另外一行(列)称为第三类初等变换.