MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 452|回复: 17|关注: 0

[已答复] 困扰很久,求教如何实现矩阵中某些特定数加上一个变化...

[复制链接]

新手

6 麦片

财富积分


050


3

主题

25

帖子

0

最佳答案
发表于 2016-5-11 16:09:07 | 显示全部楼层 |阅读模式
C=

  355.5400
  174.3500
  353.2600
  172.4100
   81.7500
  351.1500
  260.5300
  169.8800
   79.0200
  348.0800
  257.0800
  166.0500
   75.0100
  344.0700
  253.1500
  162.1800
   71.3500
  340.7000
  250.4900
我想将其中大于300的数选出来加上一个常数,这个常数在一定可知范围内变化,比如k=0:1:10
if C1(i,1)>300
    C(i,1)=C1(i,1)-k
else C(i,1)=C1(i,1)
这样写会报错,我知道这里k被视为了矩阵,但是我想了很久实在想不到其他方法了啊,比较急,这是我写毕业设计程序中一小段,我是机械工程的,对这个不熟,希望前辈帮下忙,真心感谢

论坛优秀回答者

中级

838 麦片

财富积分


5001500


18

主题

1616

帖子

194

最佳答案
  • 关注者: 24
发表于 2016-5-11 16:19:21 | 显示全部楼层
t = C > 300;
cnt = sum(t);
k = randi([0 10],7,1);
C(t) = C(t) + k;

论坛优秀回答者

权威

3455 麦片

财富积分



5

主题

4738

帖子

793

最佳答案
  • 关注者: 163
发表于 2016-5-11 16:31:09 | 显示全部楼层
你是指>300的分别减去1、2、3、....吗?如果是,倒是不难。

新手

6 麦片

财富积分


050


3

主题

25

帖子

0

最佳答案
 楼主| 发表于 2016-5-11 16:37:19 | 显示全部楼层
sammymx 发表于 2016-5-11 16:19
t = C > 300;
cnt = sum(t);
k = randi([0 10],7,1);

非常感谢你的解答,但我是初学者,有些还是不懂k=randi([0 10],7,1)指的是生成0到10间一个7x1的矩阵吗?可能我描述得不太清楚,我的问题,C矩阵是我读取excel表读出来的,我要将C里面大于300的找出来,事先我是不知道多少个大于300的,然后只将里面大于300的数加上k,k固定了范围,比如-5到5,步长是定值,必须为0.01,然后其他小于300的数的值不变,我最后要的就是大于300的数进行了计算,而其他数不变的矩阵C1,得到C1在进行后面的运算,希望能再次得前辈的指点,万分感谢!!

新手

6 麦片

财富积分


050


3

主题

25

帖子

0

最佳答案
 楼主| 发表于 2016-5-11 16:41:31 | 显示全部楼层
jingzhaos 发表于 2016-5-11 16:31
你是指>300的分别减去1、2、3、....吗?如果是,倒是不难。

谢谢前辈的回复,C矩阵是我读取excel表读出来的,我要将C里面大于300的找出来,事先我是不知道多少个大于300的,然后只将里面大于300的数加上k,k固定了范围,比如-5到5,步长是定值,必须为0.01,然后其他小于300的数的值不变,我最后要的就是大于300的数进行了计算,而其他数不变的矩阵C1,不知道前辈能否帮助一下

论坛优秀回答者

中级

838 麦片

财富积分


5001500


18

主题

1616

帖子

194

最佳答案
  • 关注者: 24
发表于 2016-5-11 16:44:07 | 显示全部楼层
xjiop 发表于 2016-5-11 16:37
非常感谢你的解答,但我是初学者,有些还是不懂k=randi([0 10],7,1)指的是生成0到10间一个7x1的矩阵吗? ...

改了一下
t = C > 300; % 找出大于300的值在C中的索引
cnt = sum(t); % 有cnt个大于300的值
k = randi([0 10],cnt,1); % 随机生成cnt个0到10之间的整数
C(t) = C(t) + k; % 这些大于300的数加上k

论坛优秀回答者

权威

3455 麦片

财富积分



5

主题

4738

帖子

793

最佳答案
  • 关注者: 163
发表于 2016-5-11 16:46:54 | 显示全部楼层
这样子是不是你要的:
  1. C_300=find(C>300);
  2. C(C_300)=C(C_300)-[1:length(C_300)]*0.01;
复制代码

新手

6 麦片

财富积分


050


3

主题

25

帖子

0

最佳答案
 楼主| 发表于 2016-5-11 16:57:34 | 显示全部楼层
sammymx 发表于 2016-5-11 16:44
改了一下
t = C > 300; % 找出大于300的值在C中的索引
cnt = sum(t); % 有cnt个大于300的值

谢谢前辈,其实问题出在这里,大于300的数有cnt个,但是我要加上的数的个数是远远大于cnt的,k是从-5到5,然后步长是0.01,就是分别加上-5,-4.99,-4.98,-4,97,.......5

新手

6 麦片

财富积分


050


3

主题

25

帖子

0

最佳答案
 楼主| 发表于 2016-5-11 16:58:33 | 显示全部楼层
jingzhaos 发表于 2016-5-11 16:46
这样子是不是你要的:

谢谢前辈,其实问题出在这里,大于300的数有x个,但是我要加上的数的个数是远远大于x的,k是从-5到5,然后步长是0.01,就是分别加上-5,-4.99,-4.98,-4,97,.......5,不知道该怎么实现

论坛优秀回答者

中级

838 麦片

财富积分


5001500


18

主题

1616

帖子

194

最佳答案
  • 关注者: 24
发表于 2016-5-11 17:01:17 | 显示全部楼层
xjiop 发表于 2016-5-11 16:58
谢谢前辈,其实问题出在这里,大于300的数有x个,但是我要加上的数的个数是远远大于x的,k是从-5到5,然 ...

你没法加啊,维数不对应怎么加,没有意义啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|版权保护|小黑屋|Archiver|手机版|MATLAB中文论坛 ( 苏ICP备08100737号

GMT+8, 2017-2-27 17:39 , Processed in 0.235015 second(s), 87 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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