高斯消元法的MATLAB和PYTHON实现
2011-11-26 18:07
1081 查看
MATLAB实现:
function x = gauss(a,b) n = length(b); for i = 1 : n-1 for j = (i+1) : n if a(i,i)~=0 lam = a(j,i)/a(i,i); a(j,(i+1):n) = a(j,(i+1):n) - lam*a(i,(i+1):n); b(j) = b(j) -lam*b(i); end end end for i = n:-1:1 b(i) = (b(i) - sum(a(i,(i+1):n).*b((i+1):n)))./a(i,i); end x = b;
PYTHON实现:
import numpy numpy import dot def gauss(a,b): n = len(b) for i in range(0,n-1): for j in range(i+1,n): #print a[j,i] if a[j,i] != 0.0: lam = float(a[j,i])/a[i,i] a[j,(i+1):n] = a[j,(i+1):n] - lam*a[i,(i+1):n] b[j] = b[j] - lam*b[i] for k in range(n-1,-1,-1): b[k] = (b[k] - dot(a[k,(k+1):n],b[(k+1):n]))/a[k,k] result = b return result x = numpy.matrix([[2,1,-1],[-3,-1,2],[-2,1,2]],dtype = numpy.float) aa = numpy.matrix([[2,1,-1],[-3,-1,2],[-2,1,2]], dtype = numpy.float) y = numpy.array([8,-11,-3],dtype = numpy.float) bb = numpy.array([8,-11,-3], dtype = numpy.float) c = gauss(aa,bb)
这次练习过程中发现的一个问题是关于矩阵变量的传递的问题,gauss(aa,bb)函数调用后,aa和bb的值都将会被修改,利用Python的id语句可以查看函数外的参数aa,bb和函数内的参数a和b的id,发现他们是一样的,这个问题应该怎么解决,怎样像C一样进行数值传递呢?目前能够想到的办法只有在函数中复制一下matrix,但是矩阵复制貌似和列表复制有所区别。列表的赋值使用b = a[:]就可以了,但是matrix不行…
终于找到答案了!利用matrix内置的method copy!
>>> x
matrix([[ 2., 1., -1.],
[-3., -1., 2.],
[-2., 1., 2.]])
>>> y = x.copy()
>>> y
matrix([[ 2., 1., -1.],
[-3., -1., 2.],
[-2., 1., 2.]])
>>> id(x)
32482800
>>> id(y)
39972208
list还是使用原来的方法进行复制,因为list里面没有copy这个method,在matrix或者dict中都有copy这个method用来实现真正的复制!
相关文章推荐
- Cost Function的原理及实现(Python, matlab)
- matlab中求逆矩阵的高斯消元法实现的代码
- 支持Python系列:Matlab的Python实现Scipy和Matplotlib简介
- 【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)
- python调用matlab引擎实现MDS
- 图像灰度化的三种方法及matlab,c++,python实现
- lambda表达式在C++/MATLAB/Python语言中的实现
- 【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)
- python实现类似于Matlab中的magic函数
- logistic regression (Python&Matlab实现)
- 用python numpy实现matlab中的std与mean函数
- Python调用Matlab实现混合编程
- Matlab的Python实现Scipy和Matplotlib简介
- python中类似matlab的tic,toc程序自我实现
- 利用 Python 实现多线程多任务提交 - matlab 函数示例
- K-Means算法的Python实现和Matlab实现
- 实现python调用Matlab的.m文件
- 高斯消元法的python实现
- 实现python调用Matlab的.m文件
- Go语言调用python调用matlab,实现matlab并行运行