find函数matlab_关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本(下)...

本文主要是介绍find函数matlab_关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本(下)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    在上个部分,我们介绍了如何将Hypemesh导出的大型刚度矩阵快速导入matlab,并保存成data_K.mat文件。这一节,我们将介绍如何将它翻译成matlab可以使用的矩阵变量,并参与运算。

     由于这个大型刚度矩阵125万x125万≈1e12。matlab甚至其他计算软件无法保存这个大的一个矩阵文件。而这个刚度矩阵作为稀疏矩阵其中非零元素的数目只有有500多万。采用sparse稀疏矩阵技术是可以保存。

这里简单介绍一下这个Hypemesh导出的大型刚度矩阵txt文本。如图DMIG开头的标识符是换行符,后面两列是表示这条非零元素在刚度矩阵中列数的信息。我们已经将左边字母和符号等批量删除,得到了右边textread函数可以直接读取的文本。则换行符转化成了某行第三列为0。

35f05e1968607f9b59724e313e11f97e.png

     下面是采用通俗易懂的循环语句进行稀疏矩阵的赋值。循环语句就是逐行扫略,碰到换行符,行号k更新一次。随后计算这条数据的列数,将文本中第三列数据赋值给稀疏矩阵data。我们预估一下这样扫略需要多长时间,先计算1000行需要44.53秒,再对5165882行进行预估,可以看到用循环语句需要63.9小时才能算完。电脑跑两天半,实际上对于这么大的循环,电脑后期会越跑越慢,所以电脑可能得跑三天才能算完,这非崩即废。

6820f80cb81465ff0746fc6885fc08ce.png

clear allclcclose alltic load data_KbufenAX = data_K; data=sparse(41703*3,41703*3);k=1;i=0;% while i<5165882while i<1000    i=i+1;    if(bufenAX(:,3)==0)        k=k+1;    end    data(k,3*(bufenAX(i,1)-1)+bufenAX(i,2))=bufenAX(i,3);    data(3*(bufenAX(i,1)-1)+bufenAX(i,2),k)=bufenAX(i,3);endtoc

       所以肯定有更高效的赋值方式。那就是矩阵操作。怎么来形容这个矩阵操作呢?这么说吧,矩阵操作就像高考空间几何大题里的几何法,而循环语句就相当于代数法。哇,这个比喻真是太贴切了。所以循环语句通俗易懂,易于想到,提笔就写,但是计算耗时。而矩阵操作需要进一步思考,不熟悉matlab矩阵运算的规则的话,往往不好理解,但是计算效率很高。代码也很简洁。大家要注意matlab的基本运算单位是矩阵,如果以其他编程语言比如C语言等编程思维进行编写,难以发挥出矩阵运算的优势。对于小型数据看不出效率区别,但是像我们今天介绍的大型数据,计算效率问题将异常突出。所以很多人诟病matlab中for循环耗时,而其他语言循环语句执行很高效。这只是因为matlab为你提供了飞机和自行车,而你非要骑个自行车跑。当然想开飞机就需要更多经验和技术,这并不像骑自行车那么简单。

      好了,我们继续介绍如何使用矩阵操作实现赋值过程,可以看到相同的过程,使用矩阵操作只需要2s左右就可以完成。对于提取一次可以用循环算它几天几夜,但是多次提取,甚至需要matlab和有限元计算软件联合仿真并且中间以txt文本传输刚度矩阵等数据的话,循环操作是不现实的,只能使用矩阵操作来实现这里对矩阵操作的部分语句进行了注释。能够读懂循环语句的同学,应该可以看懂这部分代码。个别函数不清楚,可以查询,比如在左侧command window输入 doc repelem可以查询关于这个repelem函数的用法和用例。

clear allclcclose alltic load data_K[u v]= find(data_K(:,3)~=0);[u_hang v_hang]= find(data_K(:,3)==0);data_new = data_K(u,:);lie = 3*(data_new(:,1)-1) +data_new(:,2);hang_num = diff(u_hang)-1;%get  column number of each rowhang_num = [hang_num ;size(data_K,1) - u_hang(size(u_hang,1))];%add last rowvv = 1:size(hang_num,1);hang = repelem(vv,hang_num')';K = sparse(hang,lie,data_new(:,3));%% make symmetry assignpian = K - diag(diag(K));K = pian+pian'+diag(diag(K));toc

   文末依然附上本次使用的txt文本和相关代码文件。供大家学习使用。

链接:https://pan.baidu.com/s/1edm_eKDGUp1YJVM620tjFw

提取码:ypsv

    目前MATLAB学习笔记总用户数已经达到7641,多篇推送受到大家多次收藏与分享。说明很多人在使用微信搜一搜查询学习资料,也说明MATLAB学习笔记的程序实例的实用性。感谢大家的支持。

9a35faf77c350d68ebb42669393e0fec.png

    如果对程序实例中的代码有疑问,可发邮件至weizhuanaa@163.com一起讨论。

这篇关于find函数matlab_关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本(下)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320557

相关文章

pandas使用apply函数给表格同时添加多列

《pandas使用apply函数给表格同时添加多列》本文介绍了利用Pandas的apply函数在DataFrame中同时添加多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、Pandas使用apply函数给表格同时添加多列二、应用示例一、Pandas使用apply函

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

使用Python实现在PDF中添加、导入、复制、移动与删除页面

《使用Python实现在PDF中添加、导入、复制、移动与删除页面》在日常办公和自动化任务中,我们经常需要对PDF文件进行页面级的编辑,使用Python,你可以轻松实现这些操作,而无需依赖AdobeAc... 目录1. 向 PDF 添加空白页2. 从另一个 PDF 导入页面3. 删除 PDF 中的页面4. 在

Python中Namespace()函数详解

《Python中Namespace()函数详解》Namespace是argparse模块提供的一个类,用于创建命名空间对象,它允许通过点操作符访问数据,比字典更易读,在深度学习项目中常用于加载配置、命... 目录1. 为什么使用 Namespace?2. Namespace 的本质是什么?3. Namesp

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

MySQL中如何求平均值常见实例(AVG函数详解)

《MySQL中如何求平均值常见实例(AVG函数详解)》MySQLavg()是一个聚合函数,用于返回各种记录中表达式的平均值,:本文主要介绍MySQL中用AVG函数如何求平均值的相关资料,文中通过代... 目录前言一、基本语法二、示例讲解1. 计算全表平均分2. 计算某门课程的平均分(例如:Math)三、结合

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数