在matlab中写这个的最短方法是什么?

Roo*_*ook 3 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
Run Code Online (Sandbox Code Playgroud)

我有一堆那些.编写那种东西的"matlab方式"是什么,缺少索引的简单循环和测试lam1的值?

gno*_*ice 5

我认为在MATLAB中最干净(即最容易阅读和解释)的方法如下:

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
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了一个向量,lam并使用逻辑索引 修改其条目lessThanOne.即使给出的初始值lam是降序(甚至是未排序的),该解决方案还具有工作的额外好处.

  • 我同意.除了我写'lessThanOneIdx'或类似的东西而不是'index'. (2认同)
  • 这避免了"魔术数字",这是一件好事. (2认同)