用matlab写这个的最短方法是什么? lam1=0.0:0.1:4.0 lam=1.60*lam1-0.30*lam1^2表示0

用matlab写这个的最短方法是什么? lam1=0.0:0.1:4.0 lam=1.60*lam1-0.30*lam1^2表示0,matlab,Matlab,类似的值: lam1 = 0.0:0.1:4.0 lam = 1.60*lam1-0.30*lam1^2 for 0<lam1<=1 lam = lam1+0.30 for 1<=lam1<=4 %注意,在两个数组中的所有元素上操作,将覆盖lam next中的错误条目;更优雅(也许更快)的方法是只在lam(1:11)上操作。 但是,如果你有一堆这些,Matlab的方法是写一个函数来实现它们 哦,在这两种情况下,你都有lam1==1,你应该解决这个问题 编辑:为了更加

类似的值:

lam1 = 0.0:0.1:4.0  
lam = 1.60*lam1-0.30*lam1^2 for 0<lam1<=1
lam = lam1+0.30 for 1<=lam1<=4
%注意,在两个数组中的所有元素上操作,将覆盖lam next中的错误条目;更优雅(也许更快)的方法是只在lam(1:11)上操作。

但是,如果你有一堆这些,Matlab的方法是写一个函数来实现它们

哦,在这两种情况下,你都有
lam1==1
,你应该解决这个问题

编辑:为了更加简洁,你可以写:

lam(12:end) = lam1(12:end)+0.3;
在这个版本中,我在第一部分中留下了1,第二部分从1.1开始,我认为在MATLAB中实现这一点最干净(即最容易阅读和解释)的方法如下:

lam = 1.6*(0:0.1:4)-0.3*(0:0.1:4).^2;
lam(12:end) = (1.1:0.1:4)+0.3;
lam=0:0.1:4;%#初始值
Lessthanne=lam<1;%#小于1的值的逻辑索引
lam(lessThanOne)=lam(lessThanOne)。*。。。
(1.6-0.3.*林(莱斯特哈内));%对于小于1的值
lam(~lessThanOne)=lam(~lessThanOne)+0.3%对于大于等于1的值

上述代码创建一个向量
lam
,并使用
lessthanne
修改其条目。这个解决方案还有一个额外的好处,就是即使给定给
lam
的初始值是降序的(或者甚至是未排序的)。

Ugh,与之相比,使用if测试元素的循环似乎更容易阅读,IMHO。那么我敢打赌,@Idigas,你更不喜欢我的第二个解决方案!一般来说,比起Matlab中的循环和ifs,我更喜欢向量运算。实际上,出于某种原因,我非常喜欢第二个版本。。。干净易读(至少对我来说)。。。谢谢马克!!我同意。除了我会写'lessthanneidx'或类似的东西,而不是'index'。为了努力+1,但我还是更喜欢上面的内容。这更像是我用键盘写东西的方式。@MatlabDoug-true。我同意,应该这样写。但有时我在纸上写一些我几乎看不懂的东西,然后在写代码时,我希望尽可能少的额外行数。。。我不知道……”这很奇怪,但这就是我的思维方式。
lam = 1.6*(0:0.1:4)-0.3*(0:0.1:4).^2;
lam(12:end) = (1.1:0.1:4)+0.3;
lam = 0:0.1:4;          %# Initial values
lessThanOne = lam < 1;  %# Logical index of values less than 1
lam(lessThanOne) = lam(lessThanOne).*...
                   (1.6-0.3.*lam(lessThanOne));  %# For values < 1
lam(~lessThanOne) = lam(~lessThanOne)+0.3;       %# For values >= 1