24小时热门版块排行榜    

CyRhmU.jpeg
查看: 4042  |  回复: 7

dxyhn1979

银虫 (小有名气)

[交流] 【求助】matlab中如何求一个向量的极大值已有4人参与

在下想各位高手请教:
matlab中如何求一个向量在自变量区间内的所有的极大值以及对应点的自变量的值?
自变量为时间t=0:1:400;
向量V=[ -59.9000

  -66.1788
  -67.9221
  -67.7066
  -67.3257
  -67.4786
  -68.2176
  -69.1629
  -69.7605
  -69.5510
  -68.3500
  -66.3147
  -63.8543
  -61.3557
  -58.8394
  -54.9172
    2.6585
    5.6446
  -41.6950
  -76.4487
  -76.0107
  -75.1546
  -73.9862
  -72.7260
  -71.7017
  -71.1654
  -71.1299
  -71.3273
  -71.3127
  -70.6573
  -69.1497
  -66.9086
  -64.3159
  -61.7524
  -59.2648
  -55.7941
  -25.3802
   12.8929
  -34.6773
  -76.3394
  -76.0765
  -75.2649
  -74.1454
  -72.9239
  -71.9162
  -71.3722
  -71.3112
  -71.4761
  -71.4310
  -70.7518
  -69.2277
  -66.9768
  -64.3818
  -61.8298
  -59.3952
  -56.2190
  -36.5000
   17.8293
  -30.3985
  -76.0782
  -76.1134
  -75.3273
  -74.2362
  -73.0376
  -72.0403
  -71.4925
  -71.4173
  -71.5637
  -71.5010
  -70.8082
  -69.2747
  -67.0182
  -64.4223
  -61.8781
  -59.4777
  -56.4819
  -41.4130
   21.4158
  -27.2884
  -75.6619
  -76.1396
  -75.3717
  -74.3012
  -73.1196
  -72.1301
  -71.5798
  -71.4945
  -71.6276
  -71.5523
  -70.8497
  -69.3094
  -67.0491
  -64.4527
  -61.9144
  -59.5402
  -56.6794
  -44.2394
   24.2354
  -24.7794
  -75.0499
  -76.1602
  -75.4071
  -74.3533
  -73.1854
  -72.2024
  -71.6503
  -71.5569
  -71.6794
  -71.5941
  -70.8835
  -69.3379
  -67.0748
  -64.4782
  -61.9452
  -59.5927
  -56.8343
  -46.1557
   26.6609
  -22.5630
  -74.2018
  -76.1780
  -75.4382
  -74.3987
  -73.2430
  -72.2658
  -71.7123
  -71.6120
  -71.7251
  -71.6311
  -70.9136
  -69.3633
  -67.0975
  -64.5006
  -61.9719
  -59.6373
  -56.9668
  -47.6247
   28.8704
  -20.4329
  -73.0127
  -76.1946
  -75.4670
  -74.4415
  -73.2974
  -72.3259
  -71.7711
  -71.6644
  -71.7688
  -71.6663
  -70.9424
  -69.3877
  -67.1195
  -64.5226
  -61.9986
  -59.6823
  -57.0945
  -48.8632
   30.9967
  -18.2464
  -71.3028
  -76.2111
  -75.4963
  -74.4849
  -73.3526
  -72.3870
  -71.8311
  -71.7178
  -71.8134
  -71.7025
  -70.9719
  -69.4128
  -67.1420
  -64.5450
  -62.0256
  -59.7264
  -57.2164
  -49.9878
   33.2012
  -15.7928
  -68.8036
  -76.2288
  -75.5279
  -74.5323
  -73.4132
  -72.4543
  -71.8972
  -71.7768
  -71.8628
  -71.7426
  -71.0048
  -69.4409
  -67.1676
  -64.5708
  -62.0568
  -59.7792
  -57.3616
  -51.0989
   35.4921
  -12.7970
  -65.0057
  -76.2491
  -75.5661
  -74.5885
  -73.4853
  -72.5346
  -71.9764
  -71.8477
  -71.9222
  -71.7911
  -71.0447
  -69.4748
  -67.1987
  -64.6015
  -62.0934
  -59.8394
  -57.5278
  -52.2607
   37.7444
   -8.6664
  -59.1274
  -76.2742
  -75.6157
  -74.6632
  -73.5816
  -72.6422
  -72.0828
  -71.9432
  -72.0025
  -71.8567
  -71.0989
  -69.5215
  -67.2410
  -64.6442
  -62.1448
  -59.9232
  -57.7462
  -53.5966
   33.6403
   -1.8652
  -49.9180
  -76.3044
  -75.6923
  -74.7791
  -73.7320
  -72.8112
  -72.2508
  -72.0947
  -72.1304
  -71.9618
  -71.1863
  -69.5971
  -67.3105
  -64.7148
  -62.2303
  -60.0612
  -58.0883
  -55.2992
  -32.1447
   13.9198
  -33.9835
  -76.1587
  -75.8496
  -75.0210
  -74.0499
  -73.1729
  -72.6138
  -72.4249
  -72.4118
  -72.1954
  -71.3828
  -69.7697
  -67.4713
  -64.8787
  -62.4271
  -60.3721
  -58.8055
  -57.9294
  -58.7668
  -63.1446
  -67.6137
  -68.9118
  -68.1375
  -66.5092
  -64.9202
  -64.0292
  -64.2750
  -65.6637
  -67.4920
  -68.8186
  -69.0871
  -68.1833
  -66.3434
  -64.0317
  -61.7041
  -59.5680
  -57.3789
  -52.6442
   37.6239
   -6.7767
  -56.4829
  -76.2806
  -75.6314
  -74.6871
  -73.6124
  -72.6768
  -72.1171
  -71.9741
  -72.0286
  -71.8781
  -71.1167
  -69.5369
  -67.2552
  -64.6589
  -62.1633
  -59.9551
  -57.8317
  -54.0538
   21.6409
    1.2902
  -46.2404
  -76.3102
  -75.7258
  -74.8299
  -73.7983
  -72.8862
  -72.3256
  -72.1624
  -72.1878
  -72.0092
  -71.2259
  -69.6316
  -67.3426
  -64.7470
  -62.2686
  -60.1229
  -58.2407
  -55.9542
  -45.2468
   24.3565
  -24.9062
  -74.9038
  -75.9457
  -75.1715
  -74.2509
  -73.4047
  -72.8493
  -72.6413
  -72.5981
  -72.3519
  -71.5164
  -69.8887
  -67.5841
  -64.9947
  -62.5662
  -60.5856
  -59.2534
  -59.1339
  -61.6533
  -66.1022
  -68.6882
  -68.9069
  -67.6522
  -65.7714
  -64.0012
  -62.9467
  -63.1284
  -64.7371
  -66.9870
  -68.6478
  -69.1008
  -68.2924
  -66.5102
  -64.2524
  -62.0176
  -60.1253
  -58.7917
  -58.5857
  -61.1633
  -66.0792
  -68.9112
  -69.1702
  -67.9092
  -66.0207
  -64.2548
  -63.2177
  -63.4022
  -64.9461
  -67.0827
  -68.6617
  -69.0748
  -68.2482
  -66.4564
  -64.1886
  -61.9338
  -59.9875
  -58.4823
  -57.6800
  -58.8155
  -63.7369
  -68.1304
  -69.2030
]
图片
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dxyhn1979

银虫 (小有名气)

用findmax函数可以求出所有极大值,但是不知道如何求极大值处对应的自变量t的值,急求助。谢谢
2楼2010-06-14 10:30:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab

★ ★
dxyhn1979(金币+7):太感谢了,我试了,可以,真是简洁啊,超赞 2010-06-14 14:12:57
robert2020(金币+2):辛苦了! 2010-06-14 17:46:59
引用回帖:
Originally posted by dxyhn1979 at 2010-06-14 10:27:21:
在下想各位高手请教:
matlab中如何求一个向量在自变量区间内的所有的极大值以及对应点的自变量的值?
自变量为时间t=0:1:400;
向量V=[ -59.9000

  -66.1788
  -67.9221
  -67.7066
  ...

一般可以根据极值的定义 导数符号变化或者 局部最大最小来写函数
一下是你的数据测试  方法是以前在网上偶遇的 觉得非常简洁 赞一下那位未知的大大 原理就是导数符号变化啦
极大值位置
a=find(diff(sign(diff(V)))==2)+1
极值点V(a)
极小值位置
b=find(diff(sign(diff(data)))==-2)+1
极值点V(a)
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
3楼2010-06-14 12:28:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dxyhn1979

银虫 (小有名气)

robert2020:建议使用“引用回复该贴”,便于对方收到你的信息。 2010-06-14 17:47:31
请问。为什么末尾要加1呢?是不是因为区间是从零取的啊?要是区间从非零取,比如t=[8:1:400],就不用加1了吧?还有为什么是恒等于2或-2呢?请赐教。
4楼2010-06-14 14:17:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab

★ ★
robert2020(金币+2):辛苦了! 2010-06-14 17:47:54
dxyhn1979(金币+3):解释的详细,严重谢过 2010-06-14 19:50:00
引用回帖:
Originally posted by dxyhn1979 at 2010-06-14 14:17:40:
请问。为什么末尾要加1呢?是不是因为区间是从零取的啊?要是区间从非零取,比如t=[8:1:400],就不用加1了吧?还有为什么是恒等于2或-2呢?请赐教。

理解起来也不难的 主要是对符号函数sign进行diff嘛 sign只有+1 和-1取值 求两次diff就只有2和-2啦 只是我举的一个极大值的例子
>> V=[1 2 3 7 5 4 8 6 0 7 8]

V =

     1     2     3     7     5     4     8     6     0     7     8

>> diff(V)

ans =

     1     1     4    -2    -1     4    -2    -6     7     1

>> sign(ans)

ans =

     1     1     1    -1    -1     1    -1    -1     1     1

>> diff(ans)

ans =

     0     0    -2     0     2    -2     0     2     0

>> find(ans==2)

ans =

     5     8

>> V(ans+1)  加1的原因是因为diff逐差的时候数据少了啊

ans =

     4     0
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
5楼2010-06-14 15:32:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ayismas

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
自己做的一个判断向量的极大值、极小值的位置和值的函数,a是要测试的向量,maxvalpos表示极大值所处的位置,minvalpos表示极小值所处的位置,maxval表示相对应的极大值,minval表示相对应的极小值程序如下,效率不高请包涵:
a=rand(1000,1);
n=length(a);
a1=a(1n-2));
a2=a(2n-1));
a3=a(3:n);
k=zeros((n-2),1);
for i=1n-2)
    if(a1(i)<=a2(i)&a2(i)>=a3(i));
        k(i)=1;
    else if (a1(i)>=a2(i)&a2(i)<=a3(i));
        k(i)=-1;
        else
            k(i)=0;
    end
    end
end
maxvalpos=find(k==1)+1;
mavval=a(maxvalpos)
minvalpos=find(k==-1)+1;
minval=a(minvalpos)
6楼2015-01-14 23:57:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ayismas

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
6楼: Originally posted by ayismas at 2015-01-14 23:57:54
自己做的一个判断向量的极大值、极小值的位置和值的函数,a是要测试的向量,maxvalpos表示极大值所处的位置,minvalpos表示极小值所处的位置,maxval表示相对应的极大值,minval表示相对应的极小值程序如下,效率不 ...

如果t是从1开始计数的话(在楼主的t值上加以),相应的极大值出现的位置和极大值分别如下:
位置   极大值
5        -67.3257000000000
18        5.64460000000000
27        -71.1299000000000
38        12.8929000000000
47        -71.3112000000000
58        17.8293000000000
67        -71.4173000000000
78        21.4158000000000
87        -71.4945000000000
98        24.2354000000000
107        -71.5569000000000
118        26.6609000000000
127        -71.6120000000000
138        28.8704000000000
147        -71.6644000000000
158        30.9967000000000
167        -71.7178000000000
178        33.2012000000000
187        -71.7768000000000
198        35.4921000000000
207        -71.8477000000000
218        37.7444000000000
227        -71.9432000000000
238        33.6403000000000
247        -72.0947000000000
259        13.9198000000000
277        -57.9294000000000
285        -64.0292000000000
298        37.6239000000000
307        -71.9741000000000
318        21.6409000000000
327        -72.1624000000000
339        24.3565000000000
357        -59.1339000000000
365        -62.9467000000000
377        -58.5857000000000
385        -63.2177000000000
397        -57.6800000000000
7楼2015-01-15 00:02:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lihe168

银虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
6楼: Originally posted by ayismas at 2015-01-14 23:57:54
自己做的一个判断向量的极大值、极小值的位置和值的函数,a是要测试的向量,maxvalpos表示极大值所处的位置,minvalpos表示极小值所处的位置,maxval表示相对应的极大值,minval表示相对应的极小值程序如下,效率不 ...

这个方法太复杂了啊。之前学C的时候才用这个。
8楼2018-09-06 14:41:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dxyhn1979 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见