C++求矩阵的逆程序代码
更新时间:2023-07-25 15:52:01 阅读量: 实用文档 文档下载
C++求矩阵的逆程序代码
C inverse.c
C Source Code for "GRPP, A Scientific Programming Language
C Processor Designed for Lex and Yacc."
C Author: James Kent Blackburn
C Goddard Space Flight Center, Code 664.0, Greenbelt, MD. 20771
C Computers in Physics, Journal Section, Jan/Feb 1994
/*
Matrix Inversion using
LU Decomposition from
Numerical Recipes in C
Chapter 2
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define TINY 1.0e-20
void inverse(double**,int);
void ludcmp(double**, int, int*, double*);
void lubksb(double**, int, int*, double*);
double **matrix(int,int,int,int);
double *vector(int,int);
void free_matrix(double**,int,int,int,int);
void free_vector(double*,int,int);
void inverse(double **mat, int dim)
{
int i,j,*indx;
double **y,d,*col;
y = matrix(0,dim-1,0,dim-1);
indx = (int *)malloc((unsigned)(dim*sizeof(int)));
col = vector(0,dim-1);
ludcmp(mat,dim,indx,&d);
for (j=0;j<dim;j++)
{
for (i=0;i<dim;i++) col[i] = 0.0;
col[j] = 1.0;
lubksb(mat,dim,indx,col);
C++求矩阵的逆程序代码
for (i=0;i<dim;i++) y[i][j] = col[i];
}
for (i=0;i<dim;i++)
for (j=0;j<dim;j++)
mat[i][j] = y[i][j];
free_matrix(y,0,dim-1,0,dim-1);
free_vector(col,0,dim-1);
free(indx);
}
void ludcmp(double **a, int n, int *indx, double *d)
{
int i,imax,j,k;
double big,dum,sum,temp;
double *vv;
vv = (double*)malloc((unsigned)(n*sizeof(double))); if (!vv)
{
fprintf(stderr,"Error Allocating Vector Memory\n"); exit(1);
}
*d = 1.0;
for (i=0;i<n;i++)
{
big = 0.0;
for (j=0;j<n;j++)
{
if ((temp=fabs(a[i][j])) > big) big = temp;
}
if (big == 0.0)
{
fprintf(stderr,"Singular Matrix in Routine LUDCMP\n"); for (j=0;j<n;j++) printf(" %f ",a[i][j]); printf("/n"); exit(1);
}
vv[i] = 1.0/big;
}
for (j=0;j<n;j++)
{
for (i=0;i<j;i++)
{
sum = a[i][j];
for (k=0;k<i;k++) sum -= a[i][k] * a[k][j];
C++求矩阵的逆程序代码
}
big = 0.0;
for (i=j;i<n;i++)
{
sum = a[i][j];
for (k=0;k<j;k++) sum -= a[i][k] * a[k][j]; a[i][j] = sum;
if ((dum=vv[i]*fabs(sum)) >= big) {
big = dum;
imax = i;
}
}
if (j != imax)
{
for (k=0;k<n;k++)
{
dum = a[imax][k];
a[imax][k] = a[j][k];
a[j][k] = dum;
}
*d = -(*d);
vv[imax] = vv[j];
}
indx[j] = imax;
if (a[j][j] == 0.0) a[j][j] = TINY;
if (j != n-1)
{
dum = 1.0 / a[j][j];
for (i=j+1;i<n;i++) a[i][j] *= dum; }
}
free(vv);
}
void lubksb(double **a, int n, int *indx, double *b) {
int i,ip,j,ii=-1;
double sum;
for (i=0;i<n;i++)
{
ip = indx[i];
C++求矩阵的逆程序代码
b[ip] = b[i];
if (ii>=0)
for (j=ii;j<i;j++) sum -= a[i][j] * b[j]; else if (sum) ii = i;
b[i] = sum;
}
for (i=n-1;i>=0;i--)
{
sum = b[i];
for (j=i+1;j<n;j++) sum -= a[i][j] * b[j]; b[i] = sum / a[i][i];
}
}
正在阅读:
C++求矩阵的逆程序代码07-25
豫东平原夏玉米高产优质制种技术措施研究03-19
网络综合布线实训任务书10-27
部编人教版七年级上册语文期中试卷10套(2018最新审定) - 图文03-26
马克思主义哲学原理考试试题08-27
对高效餐厅占座和排队插队现象的解释:基于博弈论的分析方法09-10
前台文员2022年上半年个人工作总结范文03-23
小学卫生室工作总结01-24
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- C++
- 矩阵
- 代码
- 程序
- (2020年)最新部编版二年级语文下册全册教学设计(含教学计划105页)
- 高一第一学期细胞的能量供应和利用 单元考试生物试卷
- 变速恒频双馈风力发电机并网的复合控制
- 伊利和蒙牛财务状况对比分析—毕业论文
- 成功经理人十二项自我管理能力(徐剑)
- 企业怎么选择加密软件
- 无架地黄瓜栽培技术
- 100多种杂志在线观看
- 自费出国留学中介服务合同
- 第1章 国际收支与国际收支平衡表1
- 2014届高考地理一轮复习第三单元第1讲 岩石圈与地表形态( 知识梳理+ 考点探究+ 专项突破+真题重组集训)
- 有关住宅的若干名词解释
- 2018智慧树音乐漫步满分答案
- 2016年北京工商大学材料工程考研专业目录招生人数参考书目历年真题复试分数线答题方法
- 市社保局局长被匿名举报后的思想汇报材料
- AIC1521-1CO中文资料
- 2015机修钳工技师技能(必备)
- 进出口业务管理制度
- 广东省深圳市2013年中考理综试题物理部分(word版,含解析)
- 平方差公式说课稿