找回密码
 注册
Simdroid-非首页
查看: 2736|回复: 47

【原创】一个matlab画四维图的例子

[复制链接]
发表于 2009-4-27 13:23:16 | 显示全部楼层 |阅读模式 来自 韩国
本帖最后由 messenger 于 2009-5-22 12:04 编辑

昨天在群里问了大家,现在把做的过程发出来。
这个问题相当于有限元里面后处理的例子。一个数组一共四列,前三列为坐标xyz,第四列为温度。
clear
clc
data=load('c:/nodetemp.txt')
sx=0:0.2/5:0.2
sy=0:0.3/5:0.3
sz=0:0.2/5:0.2
v=zeros(6,6,6)
for index=1:216
            if (data(index,1)-0.00)<1e-5
                xbiao=1
            elseif (data(index,1)-0.04)<1e-5
               xbiao=2
            elseif (data(index,1)-0.08)<1e-5
               xbiao=3
             elseif (data(index,1)-0.12)<1e-5
               xbiao=4  
            elseif (data(index,1)-0.16)<1e-5
               xbiao=5
            elseif (data(index,1)-0.2)<1e-5
               xbiao=6
            end
               
             if (data(index,2)-0.00)<1e-5
                ybiao=1
            elseif (data(index,2)-0.06)<1e-5
               ybiao=2
            elseif (data(index,2)-0.12)<1e-5
               ybiao=3
             elseif (data(index,2)-0.18)<1e-5
               ybiao=4  
            elseif (data(index,2)-0.24)<1e-5
               ybiao=5
            elseif (data(index,2)-0.3)<1e-5
               ybiao=6
             end
            
            if (data(index,3)-0.00)<1e-5
                zbiao=1
            elseif (data(index,3)-0.04)<1e-5
               zbiao=2
            elseif (data(index,3)-0.08)<1e-5
              zbiao=3
             elseif (data(index,3)-0.12)<1e-5
               zbiao=4  
            elseif (data(index,3)-0.16)<1e-5
               zbiao=5
            elseif (data(index,3)-0.2)<1e-5
               zbiao=6
            end
            
            v(xbiao,ybiao,zbiao)=data(index,4)
end
             [x,y,z] = meshgrid(0:0.2/5:0.2,0:0.3/5:0.3,0:0.2/5:0.2)
            
        slice(x,y,z,v,data(:,1),data(:,2),data(:,3))  

        
        colorbar

读入的txt文件:

结果图形:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2009-4-30 00:24:04 | 显示全部楼层 来自 美国
Simdroid开发平台
本帖最后由 smarten 于 2009-4-29 12:15 编辑

这样的方法没代表性吧。 说白了,就是把这些node练成多边形,然后根据结点的温度填上结点的颜色。因为软件填色的本身设定,整个多边形就填上色。Matlab 可以做,Mathematica也可以做。因为你把那些结点关系省略了,我就用Interpolation来补充一下了。
  1. data = Import["C/nodetemp.txt", "Table"]
  2. data1 = Transpose[{data[[All, 1 ;; 3]], data[[All, 4]]}];
  3. b = Max@data[[All, 4]];
  4. a = Min@data[[All, 4]];
  5. ff = Interpolation[data1, InterpolationOrder -> 1]
  6. tt = RegionPlot3D[
  7.    0 <= x <= 0.2 && 0 <= y <= 0.3 && 0 <= z <= 0.2, {x, 0, 0.2}, {y,
  8.     0, 0.3}, {z, 0, 0.2}, Mesh -> {8, 5, 6}, PlotPoints -> {10, 7, 8},
  9.     MaxRecursion -> 0];
  10. cls = Map[(ColorData["TemperatureMap"][(ff @@ # - a)/(b - a)]) &,
  11.    tt[[1, 1]]];
  12. Row[{Graphics3D[{GraphicsComplex[
  13.      tt[[1, 1]], {Opacity[0.8], EdgeForm[],
  14.       Cases[tt[[1]], Polygon[__], {0, Infinity}]},
  15.      VertexColors -> cls]}, Axes -> True,
  16.    AxesLabel -> {"x", "y", "z"}, Boxed -> False, BoxRatios -> 1,
  17.    ViewPoint -> {-2, -2, 1}, ImageSize -> 350],
  18.   Graphics[DensityPlot[(y - a)/(b - a), {x, 0, 0.5}, {y, 22, 25},
  19.      ColorFunction -> (ColorData["TemperatureMap"][#1] &)][[1]],
  20.    Ticks -> {None, Range[22, 25, 0.5]}, Frame -> False, Axes -> True,
  21.    AspectRatio -> 10, ImageSize -> 45]}, Spacer[5]]
复制代码
得到:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

2

查看全部评分

回复 1 不支持 0

使用道具 举报

发表于 2009-4-27 19:55:51 | 显示全部楼层 来自 黑龙江哈尔滨
好像有那么点意思,支持一下
回复 不支持

使用道具 举报

发表于 2009-4-29 10:40:34 | 显示全部楼层 来自 黑龙江哈尔滨
做的效果挺好,就是程序没有看太明白,哈哈,新手,学习一下
回复 不支持

使用道具 举报

发表于 2009-4-29 19:54:23 | 显示全部楼层 来自 天津
学习学习

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-4-29 22:22:51 | 显示全部楼层 来自 辽宁大连
学习一下,谢谢

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-4-30 12:41:02 | 显示全部楼层 来自 甘肃兰州
faynmand怎么评分的啊,扣币加分?
回复 不支持

使用道具 举报

发表于 2009-4-30 13:12:16 | 显示全部楼层 来自 浙江杭州
:L

貌似我没有给扣分,不知道怎么回事就成这样了。
回复 不支持

使用道具 举报

发表于 2009-4-30 23:48:43 | 显示全部楼层 来自 江苏南京
学习一下,谢
回复 不支持

使用道具 举报

发表于 2009-5-2 00:05:10 | 显示全部楼层 来自 北京海淀
6# smarten
高手啊,求你一件事情,我变了一个计算程序,结果是一个三维数组,v(k,i,j),不知道怎么把结果以图形的方式显示出来,固定一个k值,画一个图,固定一个i值画一个图,固定一个j值,画一个图,我把我的程序发给你,帮帮忙哈~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2009-5-2 13:17:08 | 显示全部楼层 来自 重庆
6# smarten  
高手啊,求你一件事情,我变了一个计算程序,结果是一个三维数组,v(k,i,j),不知道怎么把结果以图形的方式显示出来,固定一个k值,画一个图,固定一个i值画一个图,固定一个j值,画一个图,我把我的 ...
foolishman 发表于 2009-5-2 00:05


用 Tecplot  绘图软件,可以很方便地做

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-5-3 00:21:20 | 显示全部楼层 来自 美国
不要误会我的意思。我只是说那个例子也可以用Mathematica。 其实我很赞同matlab很强大的,你看看帮助(help)以及想一想,很多问题就可以解决了。
你看看这个版面上的帖子,你的矩阵计算可以大幅度提高的,你需要从C的想法转变到Matlab (matrix) 的想法。 你的图用Matlab很容易画的。
10# foolishman
回复 不支持

使用道具 举报

发表于 2009-5-22 10:38:27 | 显示全部楼层 来自 陕西西安
那到底怎么解决这个问题呢?能否详细的说下?
回复 不支持

使用道具 举报

发表于 2009-5-23 18:05:36 | 显示全部楼层 来自 北京海淀
好好学习下。受用

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-5-26 18:53:20 | 显示全部楼层 来自 江苏南京
博大精深啊我

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-6-3 15:46:34 | 显示全部楼层 来自 香港
好好学习下
回复 不支持

使用道具 举报

发表于 2009-8-20 21:52:22 | 显示全部楼层 来自 湖北襄阳
不错,学习下
回复 不支持

使用道具 举报

发表于 2009-8-23 10:41:38 | 显示全部楼层 来自 广西南宁
很好,谢谢分享~~
回复 不支持

使用道具 举报

发表于 2009-12-12 11:02:20 | 显示全部楼层 来自 北京
大侠,能否把原数据和图发给我,因为我所在的用户组无法看到您的原数据和图,
拜托!谢谢了!!邮箱:zoyolo_ok@126.com
回复 不支持

使用道具 举报

发表于 2009-12-12 14:23:36 | 显示全部楼层 来自 浙江杭州
已经通过验证,升级为1级会员,自己下载吧

大侠,能否把原数据和图发给我,因为我所在的用户组无法看到您的原数据和图,
拜托!谢谢了!!邮箱:zoyolo_ok@126.com
youlong0921 发表于 2009-12-12 11:02
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 07:02 , Processed in 0.106780 second(s), 23 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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