C++求矩阵的逆程序代码
更新时间:2023-08-20 18:16: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++求矩阵的逆程序代码08-20
钢管塔设计施工标准10-12
2019-2020年七年级上学期第二次月考英语试卷05-08
老师的手作文500字07-01
大隗镇观寨小学教育现代化评估自评报告01-26
大游年歌详解三04-12
美丽的园区我的家作文800字06-27
实验一二三内容04-06
安全生产费用使用台帐09-05
英语复习题11-25
- 2012诗歌鉴赏讲座 师大附中张海波
- 2012-2013学年江苏省苏州市五市三区高三(上)期中数学模拟试卷(一)
- 市政基础设施工程竣工验收资料
- 小方坯连铸机专用超越离合器(引锭杆存放用)
- 荀子的学术性质之我见
- 氩弧焊管轧纹生产线操作说明
- 小学科学六年级上册教案
- (商务)英语专业大全
- 外汇储备的快速增长对我国经济发展的影响
- 幼儿园中班优秀语言教案《小猴的出租车》
- 第七章 仪表与显示系统
- 身份证号码前6位行政区划与籍贯对应表
- 单位(子单位)工程验收通知书
- 浅谈地铁工程施工的项目成本管理
- 沉积学知识点整理
- 前期物业管理中物业服务企业的法律地位
- 2014微量养分营养试卷
- 地质专业校内实习报告范文(通用版)
- 内部审计视角下我国高校教育经费支出绩效审计研究
- 高次插值龙格现象并作图数值分析实验1
- C++
- 矩阵
- 代码
- 程序
- 机关单位年出纳工作归纳.doc
- 2016年北京工商大学材料工程考研专业目录招生人数参考书目历年真题复试分数线答题方法
- 时尚英语
- 手机模具设计技术规范经验谈
- 变速恒频双馈风力发电机并网的复合控制
- 汽车及零部件行业MES条码质量追溯系统解决方案
- 2015-2020年中国挖掘装载机行业市场发展态势及投资前景可行性报告
- 【已阅】坚强智能电网前景与展望
- 20世纪后期三场战争对中国军事理念及装备的影响
- 辽宁省锦州市2020年(春秋版)八年级上学期物理期中考试试卷C卷
- 003读书笔记
- 有关住宅的若干名词解释
- ST 科 龙:2010年第二次临时股东大会的法律意见书 2010-03-30
- 实用的护理自我鉴定范文汇编8篇
- 伊利和蒙牛财务状况对比分析—毕业论文
- 哪些与戏曲有关的记忆
- 苏科版物理九年级简单机械和功章节练习
- 四大牙齿矫正体系
- 环保校园活动策划初稿
- 贷款贷后检查报告模版