模糊数学求传递闭包(C语言)

news2025/1/22 16:11:12

一、问题描述

我们在模糊数学中利用传递闭包法进行聚类分析的时候,需要求模糊相似矩阵的传递闭包,对于阶数比较高的矩阵,手工计算太过于繁琐,我们可以借助程序实现。

我们先来看一下模糊矩阵的合成规则:

X=\{ x_1,x_2,\cdots,x_m\},Y = \{ y_1,y_2,\cdots,y_s\},Z = \{ z_1,z_2,\cdots,z_n\}为有限论域,

R_1 = (a_{ik})_{m\times s},R_2 = (b_{kj})_{s\times n}

R_1R_2的合成为

R_1\circ R_2 = C=(c_{ij})_{m\times n}

其中c_{ij} = \vee_{k=1}^s(a_{ik} \wedge b_{kj})

模糊矩阵的合成类似于矩阵的乘法,不过将 乘 换成了 取小,将 加 换成了 取大。

下面我们来看一个模糊矩阵合成的例子。

已知模糊矩阵R_1 = \begin{bmatrix} 0.2 & 0.9 &0.5 \\ 0.4& 0.1 &0.8 \\ 0.6&0.7 &0.3 \end{bmatrix}R_2 = \begin{bmatrix} 0.9 & 0.5 &0.2 \\ 0.4& 0.8 &0.7 \\ 0.6& 0.3 &0.1 \end{bmatrix}

则模糊矩阵R_1\circ R_2

R_1\circ R_2 = \begin{bmatrix} 0.2 &0.9 &0.5 \\ 0.4& 0.1 &0.8 \\ 0.6&0.7 &0.3 \end{bmatrix}\circ \begin{bmatrix} 0.9 &0.5 &0.2 \\ 0.4& 0.8 &0.7 \\ 0.6& 0.3 & 0.1 \end{bmatrix}=\begin{bmatrix} 0.5 &0.8 &0.7 \\ 0.6& 0.4 &0.2 \\ 0.6& 0.7 &0.7 \end{bmatrix} 

我们使用平方法求R的传递闭包.

二、代码实现

#include <stdio.h>

/// <summary>
/// 取小
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
double getMin(double x, double y) {
	return x <= y ? x : y;
}

/// <summary>
/// 取大
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
double getMax(double x, double y) {
	return x >= y ? x : y;
}

/// <summary>
/// 矩阵合成
/// </summary>
/// <param name="s"></param>
/// <param name="t"></param>
/// <param name="p"></param>
/// <param name="n"></param>
void Matrix_composition(double(*s)[10], double(*t)[10], double(*p)[10], int n) {
	int i, j, k;
	double sum = 0;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			sum = 0;
			for (k = 0; k < n; k++) {
				sum = getMax(getMin(s[i][k], t[k][j]), sum);
			}
			p[i][j] = sum;
		}
	}
}

/// <summary>
/// 打印
/// </summary>
/// <param name="s"></param>
/// <param name="n"></param>
void Print(double(*s)[10], int n) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			printf("%.2f  ", s[i][j]);
		}
		printf("\n");
	}
}

/// <summary>
/// 判断矩阵是否相等
/// </summary>
/// <param name="s"></param>
/// <param name="p"></param>
/// <param name="n"></param>
void equalMatrix(double(*s)[10], double(*p)[10], int n) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (s[i][j] != p[i][j]) {
				printf("不相等!\n");
				return;
			}
		}
	}
	printf("合成前后相等!\n");
}
int main() {

	double A[10][10];
	double B[10][10];
	int flag = 1;
	printf("请输入矩阵的阶数:");
	int n = 0;
	scanf("%d", &n);
	while (flag) {
		printf("------------------------------------------------------------------\n");
		printf("请输入矩阵:\n");
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				scanf("%lf", &A[i][j]);
			}
		}

		Matrix_composition(A, A, B, n);

		printf("初始矩阵为:\n");
		Print(A, n);


		printf("合成后的矩阵为:\n");
		Print(B, n);

		equalMatrix(A, B, n);
		printf("------------------------------------------------------------------\n");

		printf("是否继续计算,如果是,请输入1,否则输入0\n");
		printf("请输入:");
		scanf("%d", &flag);
	}
	return 0;
}

三、效果演示

求传递闭包

R = 
1.0  0.9  0.7  0.5  0.9  1.0  0.4
0.9  1.0  0.5  0.4  0.5  0.4  0.1
0.7  0.5  1.0  0.5  0.7  0.1  0.4
0.5  0.4  0.5  1.0  0.5  0.7  0.9
0.9  0.5  0.7  0.5  1.0  0.7  0.1
1.0  0.4  0.1  0.7  0.7  1.0  0.5
0.4  0.1  0.4  0.9  0.1  0.5  1.0

 

 

我们发现直到合成第三次才有R^8 = R^4,于是R的传递闭包t(R)  = R^4. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT能取代传统伪原创工具吗?

文章伪原创工具是一种计算机辅助写作工具&#xff0c;通过算法和技术实现对原有文章内容进行修改和改写&#xff0c;生成新的、看起来不同于原文的文章&#xff0c;以达到避免抄袭和提高原创性的目的。今天我们来聊聊传统伪原创工具和使用ChatGPT进行文章改写的优缺点。 一、传…

【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C++ Linux Web Server 面试基础篇-操作系统(一、Linux基础)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源&#xff0c;在开发的时候&#xff0c;一般选择前后端分离的方式&#xff0c;前端使用vue 后端使用SpringBoot&#xff0c;通常情况下&#xff0c;部署都是前端通过http去请求后端资源&#xff0c;涉及…

CVE-2021-27905 Apache Solr SSRF漏洞

预备知识 1. 漏洞信息 漏洞编号&#xff1a;CVE-2021-27905 漏洞名称&#xff1a;Apache Solr SSRF漏洞 漏洞描述&#xff1a;Apache Solr是一个开源的搜索服务&#xff0c;使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器&#xff0c;是Apache Lucene项目的开源…

在Claude穿越千年,问了孔子人生问题

&#x1f4d5;如果大家还不知道Claude的话&#xff0c;可以先了解下&#xff0c;它是chatgpt最大的竞争对手。他有很多的知识&#xff0c;能做的事情也非常的多。 今天我们就让他用孔子的思想来跟我们对话&#xff0c;看看他会怎么回答我们的人生问题。 我们先问问他&#xf…

组播协议的RP

某组播网络示意图如图,其中MCS1是组播地址(G1)的组播源,PC1和PC2是组G1的接收者。 1.上述组播网络中,端口1、2、3需要运行哪些协议,为什么需要运行这些协议?(仅填必配的组播协议)详细写出具体原因 结合上述拓扑,考虑到存在RP场景,因此运行组播路由协议为PIM-SM协议,…

『pyqt5 从0基础开始项目实战』07. 次数清零与多行数据删除(保姆级图文)

目录 导包和框架代码 次数清零按钮添加绑定事件实现数据清零 数据删除按钮添加绑定事件实现删除功能完整代码总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 导包和框架代码 请…

GEE:Gmeans图像分割

G-means是一种聚类算法,它是基于K-means算法的改进版本。K-means算法的一个主要缺点是需要事先指定聚类的数量,而G-means算法则可以自动确定聚类的数量。 G-means算法使用了类似于K-means的迭代过程,但在每次迭代时,它会检查每个聚类是否可以继续细分为两个子聚类。这个检…

保护你的数字资产:网络安全的重要性和应对策略

网络安全已经成为现代企业和组织的重要问题。在数字化的时代&#xff0c;网络攻击和安全威胁的规模和复杂性不断增加&#xff0c;因此保护数字资产变得越来越重要。而Log360作为一款全面的网络安全解决方案&#xff0c;可以帮助企业识别、分析和应对网络安全威胁&#xff0c;从…

【PyTorch】第六节:乳腺癌的预测(二分类问题)

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

【SCI电气】考虑不同充电需求的电动汽车有序充电调度方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python】【进阶篇】二十、Python爬虫实现Cookie模拟登录

目录 二十、Python爬虫实现Cookie模拟登录20.1 注册登录20.2 分析网页结构20.3 编写完整程序 二十、Python爬虫实现Cookie模拟登录 在使用爬虫采集数据的规程中&#xff0c;我们会遇到许多不同类型的网站&#xff0c;比如一些网站需要用户登录后才允许查看相关内容&#xff0c…

【获奖案例巡展】信创先锋之星——甘肃省住房和城乡建设厅住建数据大脑

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目&#xff0c;星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动&#xff0c;旨在为各行业提供更多的优秀产品案例&#xff0c;彰显技术改变世界的力量&#xff0…

推进数字化转型进程,AntDB数据库协同神州云动共促新发展

当今&#xff0c;数字化转型已成为企业发展的必由之路。随着新技术的不断发展和市场的日益竞争&#xff0c;越来越多的企业开始意识到数字化转型的重要性&#xff0c;在帮助企业数字化转型过程中&#xff0c;高效的客户关系管理软件和具有灵活性、可伸缩的数字底座&#xff0c;…

关于于pyreadline模块的py3k_compat.py的函数collections.Callable兼容性问题

上图警告的官网链接地址 上图警告信息是一个警告信息,提醒你在代码中使用了即将被弃用的函数或配置项,建议及时修改以避免在将来的版本中出现不兼容的情况。具体解释如下: 这段段警告信息来自于pyreadline模块的py3k_compat.py文件,提示你使用了collections模块中即将被弃用…

code=45, title=禁止登录, message=登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。

如果你是采用 java 开发的&#xff0c;你可以参考本文章&#xff0c;java 和 kotlin 都是可以相互转换的。 在解决之前&#xff0c;先说明环境: JDK版本&#xff1a;java version "17.0.3.1" 【Oracle JDK】 Kotlin版本&#xff1a;1.8.20 采取simbot核心包开发&am…

PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning论文学习

一、概述 Motivation&#xff1a;直接提升PLATO的size训练不work Methods&#xff1a; 通过curriculum learning技术来构建一个高质量的开放领域机器人第一阶段&#xff1a;coarse-gained generation model&#xff1a;再简单的one-to-one框架下学习粗力度的回复生成模型第二…

【Micropython】ESP8266驱动mpu6050读取数据

【Micropython】ESP8266驱动mpu6050读取数据 &#x1f4cc;相关篇《【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕mpu6050图形控制》 ✨本案例基于Thonny平台开发。✨ &#x1f516;esp8266固件版本&#xff1a;MicroPython v1.19.1 on 2022-06-18 &#x1f4cd;本篇需要使…

2023 年打破认知,这个开源 API 管理工具你应该知道

关于 API 管理工具&#xff0c;如今的市场已经把用户教育的差不多了&#xff0c;毫不夸张地说&#xff0c;如果我随机抽取一位幸运读者&#xff0c;他都能给我罗列出一二三四款大家耳熟能详的工具&#xff0c;但我今天还是要推荐这一款我上手后&#xff0c;亲测觉得不错的开源 …