声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3576|回复: 2

[Nastran专区] matlab提取.pch文件中刚度矩阵

[复制链接]
发表于 2013-9-26 20:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
最近提取.pch输出文件中的刚度矩阵,matlab程序如下:
function [K,M]=Get_K_M(N)
%读取Nastran的pch文件,得到模型的总体质量和刚度矩阵
%输入:N,模型节点个数
%输出:模型总体质量矩阵M,总体刚度矩阵K
%2009年8月24日
N=800;
[filename,filepath]=uigetfile('*.pch','请选择pch数据文件'); %选择需要处理的pch文件
file_path_name=strcat(filepath,filename); %将字符串 文件名称和路径连接
fid=fopen(file_path_name);%打开文件

case1='DMIG';case2='DMIG*';case3='*';  %每行第一串字符的三种情况
while (~feof(fid)) %判断文件是否结束
    line=fgetl(fid);    %读取一行数据,返回字符串
    line_head=strread(line(1:8),'%s',1);%第一串字符,三种情况:‘DMIG’,‘DMIG*’或‘*’
    if strcmp(line_head,case1)%如果第一串字符是 DMIG
        lie=0;
        [matrix_name,zero1,ifo,tin,tout,matrix_size]=...
            strread(line(9:end),' %s %d %d %d %d %d');%提取该行数据,字母含义参考Nastran文档
        switch matrix_name{1,1}%根据矩阵名称判断是什么矩阵,并初始化。cell数据类型,用{};
            case 'KAAX'
               % pack
                K=zeros(6*800,6*800);
            case 'MAAX'
               % pack
                M=zeros(6*N,6*N);
            otherwise
                disp('读到未知矩阵类型1');      
        end
    elseif strcmp(line_head,case2)%如果第一串字符是 DMIG* ,开始矩阵中新的一列;
        [lie_node_number,lie_freedom_number]=...
            strread(line(33:end),'%d %d');%提取列节点 与 列节点自由度编号
        lie=(lie_node_number-1)*6+lie_freedom_number;

    else %如果第一串字符是‘*’,向矩阵增加一个数据
        [hang_node_number,hang_freedom_number,data]=...
            strread(line(17:end),'%d %d %f');%提取行节点、行节点自由度编号和数据。
        hang=(hang_node_number-1)*6+hang_freedom_number;
        switch matrix_name{1,1}%将数据装入不同的矩阵
            case 'KAAX'
                K(hang,lie)=data;
            case 'MAAX'
                M(hang,lie)=data;
            otherwise
                 disp('读到未知矩阵类型2');
                 break;
        end
    end
end
fclose(fid);
K=K+K'-diag(diag(K));
M=M+M'-diag(diag(M));
disp('OK');
end

但最后输出结果显示
Warning: Input should be a string.
> In strcat at 87
  In Get_K_M at 9
Warning: Input should be a string.
> In strcat at 95
  In Get_K_M at 9
??? Error using ==> feof
Invalid file identifier.  Use fopen to generate a valid file identifier.

Error in ==> Get_K_M at 13
while (~feof(fid)) %判断文件是否结束

请问是什么地方出问题了,急求啊????

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2013-9-26 21:36 | 显示全部楼层
punch文件格式不清楚,我是打印到f06文件,然后自编matlab程序把矩阵读取出来的。
 楼主| 发表于 2013-9-26 21:54 | 显示全部楼层
哦,多谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 03:19 , Processed in 0.094911 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表