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
我有一堆那些。编写那种东西的“matlab方式”是什么,缺少索引的简单循环和测试lam1的值?
答案 0 :(得分: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
上述代码会创建一个向量lam
,并使用logical index lessThanOne
修改其条目。即使给予lam
的初始值是降序(甚至是未排序的),此解决方案还具有工作的附加好处。
答案 1 :(得分:2)
这样的事情:
lam1 = 0:0.1:4; %lam1 now has 41 elements 0, 0.1, 0.2, ..., 4.0
lam = lam1; % just to create another array of the same size, could use zeros()
lam = 1.6*lam1-0.30*lam1.^2;
% note, operating on all elements in both arrays, will overwrite wrong entries in lam next; more elegant (perhaps quicker too) would be to only operate on lam(1:11)
lam(12:end) = lam1(12:end)+0.3;
但是如果你有很多这些,那么Matlab的方法就是编写一个函数来完成它们。
哦,你在两种情况下都有lam1==1
,你应该解决这个问题。
编辑:你可以写下额外的简洁性:
lam = 1.6*(0:0.1:4)-0.3*(0:0.1:4).^2;
lam(12:end) = (1.1:0.1:4)+0.3;
在这个版本中,我在第一部分中留下1,第二部分从1.1
开始