C/C++ 语言实现使用LU分解求解线性方程组

2023-10-27

应用计算方法C语言程序:02

接应用计算方法C语言程序:01:C/C++ 语言实现矩阵LU分解:Doolittle(A)

以计算方法课本例题4-6为例。
在这里插入图片描述
设矩阵A,b分别为:A[3][3] = { {1,3,3},{2,1,1},{2,3,4} }; b[3] = { 1,2,1 };
利用C语言程序求解方程组如下:(其中LU分解程序见应用计算方法C语言程序:01
程序中矩阵求逆部分程序使用了博友(重中之重小星星)的程序(感谢博主的分享):原文链接

void Matrix_inverse(double arc[3][3], int n, double ans[3][3])//计算矩阵的逆
{
	int i, j, k;//列
	double max, tempA, tempB, P;
	int max_num;
	double arcs[3][3];
	memcpy(arcs, arc, n*n*sizeof(double));
	for (i = 0; i < n; i++)
	{
		ans[i][i] = 1;
	}
	for (i = 0; i < n; i++)//第i列
	{
		max = fabs(arcs[i][i]);
		max_num = i;
		for (j = i + 1; j < n; j++)//选出主元
		{
			if (fabs(arcs[j][i]) > max)
			{
				max = fabs(arcs[j][i]);
				max_num = j;
			}
		}
		for (k = 0; k < n; k++)//交换行
		{
			tempA = arcs[i][k];
			arcs[i][k] = arcs[max_num][k];
			arcs[max_num][k] = tempA;
			tempB = ans[i][k];
			ans[i][k] = ans[max_num][k];
			ans[max_num][k] = tempB;
		}
		for (k = i + 1; k < n; k++)
		{
			P = arcs[k][i] / arcs[i][i];
			for (j = 0; j < n; j++)
			{
				arcs[k][j] = arcs[k][j] - arcs[i][j] * P;
				ans[k][j] = ans[k][j] - ans[i][j] * P;
			}
		}
	}
	for (i = 0; i < n; i++)//行
	{
		P = arcs[i][i];
		for (j = i; j < n; j++)
		{
			arcs[i][j] = arcs[i][j] / P;
		}
		for (j = 0; j < n; j++)
		{
			ans[i][j] = ans[i][j] / P;
		}
	}
	for (i = n - 1; i > 0; i--)
	{
		for (j = i - 1; j >= 0; j--)
		{
			for (k = 0; k < n; k++)
			{
				ans[j][k] = ans[j][k] - ans[i][k] * arcs[j][i];
			}
		}
	}
}
int main()
{
	double A[3][3] = { {1,3,3},{2,1,1},{2,3,4} };
	double b[3] = { 1,2,1 };

	Doolittle(A);

	double b1[3][3] = { 0 };
	double b2[3][3] = { 0 };
	Matrix_inverse(U, 3, b1);//求矩阵U的逆
	Matrix_inverse(L, 3, b2);//求矩阵L的逆
	
	
	//x=U^(-1) * L^(-1) * b
	double b3[3][3] = { 0 };
	//U^(-1) * L^(-1)
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			for (int k = 0; k < 3; k++)
			{
				b3[i][j] += b1[i][k] * b2[k][j];
			}
		}
	}
	//x=U^(-1) * L^(-1) * b
	double b4[3] = { 0 };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			b4[i]+= b3[i][j] * b[j];
		}
	}

	//输出方程的解
	cout << endl;
	for (int i = 0; i < 3; i++)
	{
		cout << "x" << i + 1 << " = " << b4[i] << " ";
	}

	cout << endl << endl << endl;

	return 0;
}

运行结果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++ 语言实现使用LU分解求解线性方程组 的相关文章

随机推荐

  • PCL生成线段点云

    生成三角形 生成平行四边形 生成凸包 pcl 生成线段点云 pcl官方有生成球体 圆柱体 圆锥体的相关函数 似乎没有生成线段的函数 正好有需要 所以自己写了两个 分别是根据数量和步长生成 原理 原理很简单 已知两个三维点p1 p2 求出方向
  • vue中使用高德地图marker标记点的setLabel,在不同层级下控制显示隐藏

    vue中使用高德地图marker标记点的setLabel 在不同层级下控制显示隐藏 设置点标注的文本标签 marker setLabel offset new AMap Pixel 1 0 设置文本标注偏移量 content div nam
  • 全局获取Context的技巧(再也不要为获取Context而感到烦恼)

    前言 Android提供了一个Application类 每当应用程序启动的时候 系统就会自动将这个类进行初始化 而我们可以定制一个自己的Application类 以便管理程序内的一些全局状态信息 比如说全局Context 定制自己的Appl
  • SaaS与本地部署 路在何方?

    了解云计算的一定都听过四个 高大上 的概念 On Premises 本地部署 IaaS 基础设施及服务 PaaS 平台即服务 和SaaS 软件即服务 这几个术语并不好理解 ServiceHot 旗下现产品有 ServiceHot ITSOM
  • Issues with peer dependencies found

    peer dependencies 默认存在的依赖 通常在开发组件和插件的时候用到 表示这些依赖不用下载 项目的仓库里有 例子 package json peer dependencies react 问题背景 今天安装一些依赖 报了这个错
  • Linux驱动编程(分层分离编程思想)

    1 面向对象 字符设备驱动程序抽象出一个 file operations 结构体 我们写的程序针对硬件部分抽象出 led operations 结构体 2 分层 上层实现硬件无关的操作 比如注册字符设备驱动 leddrv c 下层实现硬件相
  • @Autowired 和 @Resource 分别什么时候使用比较好

    Autowired 和 Resource 都是用于依赖注入的注解 但是它们有一些不同的使用场景 Autowired 是 Spring 框架提供的注解 它可以自动装配一个 Bean 可以根据类型进行匹配 也可以根据名称进行匹配 当有多个 Be
  • 数制转换(数据结构课程设计C语言版)

    define CRT SECURE NO WARNINGS include
  • 51单片机——定时器

    51单片机 定时器 为什么使用定时器 定时器原理 定时器设置 中断配置 源代码 为什么使用定时器 之前我们的led灯每隔1s循环左移点亮的时候 使用的定时方法是在c程序执行若干次空循环 这样会耗费很多cpu资源 因为空轮询 本篇博客将使用5
  • epoll使用(服务端代码讲解)

    下面这段代码是一个回射服务器 它会把客户端发送给它的信息再返回给客户端 include
  • Python的深浅拷贝

    目录 一 可变对象和不可变对象 二 概念 三 深浅拷贝 1 浅拷贝 2 深拷贝 一 可变对象和不可变对象 可变类型 列表 字典 集合 不可变类型 整数 小数 复数 字符串 元组 二 概念 是指向引用 浅拷贝 只拷贝父对象 不拷贝子对象 深拷
  • 数据库初始化过程

    从数据文件到内存的初始化过程 SQL gt startup mount ORACLE 例程已经启动 Total System Global Area 1970937856 bytes Fixed Size 2191096 bytes Var
  • 详解netty长连接网关请求处理模型

    想要支持海量的客户端请求 首先要有一套高效的请求处理模型 本文以开源项目SONA为例 详解如何基于netty设计请求处理模型 帮助读者动手实践 本文最后附上开源项目地址 背景 Sona 平台是一个搭建语音房产品的全端解决方案 包含了房间管理
  • 【Pytorch Lighting】第 8 章:自监督学习

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 第52节:cesium 3DTiles模型特效+选中高亮(含源码+视频)

    结果示例 完整源码
  • PAT_Basic_Level

    PAT乙级 1001 害死人不偿命的 3n 1 猜想 1002 写出这个数 1003 我要通过 1004 成绩排名 1005 继续 3n 1 猜想 1006 换个格式输出整数 1007 素数对猜想 1008 数组元素循环右移问题 1009
  • 今天已更新!Awesome AIGC与GPT加入免费镜像、相关插件、相关网页、相关项目源码等内容...

    点击上方 Python与机器智能 选择 星标 公众号 第一时间获取价值内容 目前这个文档经过好多天的收集和整理 给大家带来最全的AIGC与GPT资料大全 数百个链接和pdf 文档本身有近20页 主要包涵资源资料分享 gpt AI绘画相关技术
  • Feign远程调用的底层方法逻辑

    今天在写业务的时候 需要通过feign调用远程接口 平常只是调用就行了 没有了解到他是如何代码实现的 今天就使用debug来解开feign为什么可以远程调用的面纱 希望看本文章的同学朋友们 可以自己写一个简单的远程调用方法跟着我一起走一遍d
  • No.13 免费音乐软件推荐:轻松畅听全网音乐

    这些开源音乐软件为用户提供了丰富的音乐搜索和播放功能 让您可以享受高品质的音乐畅听体验 它们支持多种音乐平台 如网易云音乐 QQ音乐 酷狗音乐等 同时提供了自动切换播放源 精选歌单 数据同步等实用功能 选择这些项目 您将能够轻松搜索 播放和
  • C/C++ 语言实现使用LU分解求解线性方程组

    应用计算方法C语言程序 02 接应用计算方法C语言程序 01 C C 语言实现矩阵LU分解 Doolittle A 以计算方法课本例题4 6为例 设矩阵A b分别为 A 3 3 1 3 3 2 1 1 2 3 4 b 3 1 2 1 利用C