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

请问如何求取通过ASCII码导入数据绘制曲线的最值,有导入程序及数据

[复制链接]
发表于 2010-5-20 22:03:30 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
本帖最后由 bluehy 于 2010-5-25 10:15 编辑

一些ASCII码试验数据(eg:1.uff),通过readuff.m文件导入matlab中,
然后利用命令plot(ans{1,1}. x, abs(ans{1,1}. measData), 'DisplayName', 'ans{1,1}. measData', 'YDataSource', 'ans{1,1}. measData'); figure(gcf)绘制出曲线

问题:1。希望能够对该曲线求取任意横坐标范围内的最大函数值,即通常max(y(x1:x2))命令那样的求解结果,请指教应该怎么求解
          2。上面的那个plot命令不太明白具体各项的意思,请好心人帮忙解答一下,谢谢
          3。附件是待求的数据文件及readuff.m文件
  谢谢!

本帖子中包含更多资源

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

×
发表于 2010-5-21 00:15:48 | 显示全部楼层 来自 贵州
Simdroid开发平台
1、max(ans{1,1}.measData(find(ans{1,1}.x>=x1&ans{1,1}.x<=x2)));
2、doc plot   and    doc lineseries properties
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-21 09:31:19 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢2楼的回复,但是我试了一下还是不行
比如我想获取绘制曲线的第一个峰值位置及数值,
用命令[c,d]=max(ans{1,1}.measData(find(ans{1,1}.x>=200&ans{1,1}.x<=500)));后提示cell contents reference from a non-cell array object.

请大家指教应该怎么办,谢谢
回复 不支持

使用道具 举报

发表于 2010-5-21 19:32:38 | 显示全部楼层 来自 贵州
本帖最后由 lengyunfeng 于 2010-5-21 22:41 编辑

>> a=readuff('1.uff');
>> plot(a{1,1}.x,abs(a{1,1}.measData),'DisplayName','a{1,1}.measData','YDataSource','a{1,1}.measData');
>> figure(gcf)
>> max(a{1,1}.measData(find(a{1,1}.x>=200&a{1,1}.x<=500)))
ans =
-47.6935 +11.2382i
>> abs(ans)
ans =
   48.9997

可以啊,一点问题没有,最后一个ans与你的图上所示的第一个峰值一模一样

3# bluehy

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-21 21:44:00 | 显示全部楼层 来自 黑龙江哈尔滨
多谢lengyunfeng ,可以实现了
我还想问一下想获得该最大值对应的x值又该如何实现呢,
我用原来的命令获取的结果与图中显示的不一致。
可否用插值的方法?这种知道y插值获取x地情况应该怎么实现呢?请指教! 谢谢!
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-21 21:44:17 | 显示全部楼层 来自 黑龙江哈尔滨
多谢lengyunfeng ,可以实现了
我还想问一下想获得该最大值对应的x值又该如何实现呢,
我用原来的命令获取的结果与图中显示的不一致。
可否用插值的方法?这种知道y插值获取x地情况应该怎么实现呢?请指教! 谢谢!
回复 不支持

使用道具 举报

发表于 2010-5-21 22:46:08 | 显示全部楼层 来自 贵州
你想学好Matlab的话,自己找答案。线索就在我前面的程序语句中,自己多用Matlab的Help。本来2#楼的回答就能解决问题的,你非得要我把语句全写出来,肯定是你没用心看。

6# bluehy
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-22 10:50:05 | 显示全部楼层 来自 黑龙江哈尔滨
呵呵,原来用[c,d]=max(a{1,1}.measData(find(a{1,1}.x>=200&a{1,1}.x<=500)));就可以直接得到最大和对应的位置,但由于该例的x值并非直接就是自变量值(x总共有7200个点,但变量域是4500),所以计算的x值不太对,本人是新手,故希望楼上不惜笔墨再具体指教以下,谢谢!
回复 不支持

使用道具 举报

发表于 2010-5-22 15:17:17 | 显示全部楼层 来自 贵州
本帖最后由 lengyunfeng 于 2010-5-22 22:42 编辑

The last response for you,再回答下去我会犯嗔戒的!阿米豆腐~~

>> a=readuff('1.uff');
>> celldisp(a)
屏幕显示:
a{1} =

        measData: [7200x1 double]
              d1: 'Transfer function                                                               '
              d2: 'UFF Format                                                                      '
            date: 'May 17,2010 11:55:11                                                            '
            ID_4: 'EXCITATIONRESPONSE                                                              '
            ID_5: 'NONE                                                                            '
    functionType: 4
      loadCaseId: 0
      rspEntName: 'NONE'
         rspNode: 2
          rspDir: 0
      refEntName: 'NONE'
         refNode: 1
          refDir: 0
            xmin: 0
              dx: 0.6250
               x: [1x7200 double]

再输
b=a{1}.x;
>> c=a{1}.measData;
>> plot(b,c');
不会出错,意味着x和measData大小一样,一一对应,怎么就“该例的x并非直接就是自变量值”?是,x总共有7200个点,其range是4500,你要搞清楚7200是指数据个数,4500是指变量范围,二者能对等吗???

8# bluehy
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 10:33 , Processed in 0.044854 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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