matlab &与&&的区别
Matlab中的逻辑运算”&&”与”&”,都是与的意思,但是有以下几个区别。
1、判断过程:
A&B:首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。
A&&B:首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
2、使用方法:
A&B:A和B不仅可以为标量,还可以为矩阵(e.g. A=[1 2 3],B=[0 1 0])
A&&B:A和B不能是矩阵,只能是标量。
扩展资料:
与&&和&类似的一组逻辑运算符号:||和|。这两个都是或的意思,并且同理于&&和&,只不过是“或”的逻辑。
那么出现这样的原因是因为:
A&&B 首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
这种用法非常有用,如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的。
另外这也可以防止类似被0除的错误。
matlab if语句
function dh=jiangyu (t,h)
%降雨量的表达式
if t<=400
a=6*12*(0.122*10^(3)abs(0.00061*t*10^(3)0.122*10^(3)))*cos(pi/9);
else
a=0;
end
%液面高度微分方程中的其他部分:
b=0.7*pi*(0.05)^2*sqrt(2*9.81*h);
c=2*12*sqrt(0.15*hh^2);
%使结果符合客观事实,增加下面的判定
z=isreal((ab)/c);
%如果液面高度正常为大于零的数,便按所设微分方程求解
if z==1
dh=(ab)/c;
%如果液面高度小于零,且此时不再下雨,则液面不再变化
elseif (z==0 & a==0)
dh=0;
%如果液面高度小于零,但仍然下雨,则液面将会上升,速度为下式
else
h=0.0001;
dh=(ab)/c;
end
end
你的判断等于要改成 ==
没有and这个用法的,用&
表并列直接回车就行了
你的c可能是虚数,注意~
matlab 如何使用循环语句
一、基本技术 1)MATLAB索引或引用(MATLAB Indexing or Referencing) 在MATLAB中有三种基本方法可以选取一个矩阵的子阵。
它们分别是 下标法,线性法和逻辑法(subscripted, linear, and logical)。 如果你已经熟悉这个内容,请跳过本节 1.1)下标法 非常简单,看几个例子就好。
A = 6:12; A([3,5]) ans = 8 10 A([3:2:end]) ans = 8 10 12 A = [11 14 17; 。 12 15 18; 。
13 16 19]; A(2:3,2) ans = 15 16 1.2)线性法 二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号 来访问元素。 A = [11 14 17; 。
12 15 18; 。 13 16 19]; A(6) ans = 16 A([3,1,8]) ans = 13 11 18 A([3;1;8]) ans = 13 11 18 1.3)逻辑法 用一个和原矩阵具有相同尺寸的01矩阵,可以索引元素。
在某个 位置上为1表示选取元素,否则不选。得到的结果是一个向量。
A = 6:10; A(logical([0 0 1 0 1])) ans = 8 10 A = [1 2 3 4]; B = [1 0 0 1]; A(logical(B)) ans = 1 4 2)数组操作和矩阵操作(Array Operations vs. Matrix Operations) 对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为 一个整体进行的运算则成为矩阵操作。MATLAB运算符*,/,,^都是矩阵 运算,而相应的数组操作则是.*, ./, ., .^ A=[1 0 ;0 1]; B=[0 1 ;1 0]; A*B % 矩阵乘法 ans = 0 1 1 0 A.*B % A和B对应项相乘 ans = 0 0 0 0 3)布朗数组操作(Boolean Array Operations) 对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。
因此其结果就不是一个“真”或者“假”,而是一堆“真假”。这个 结果就是布朗数组。
D = [0.2 1.0 1.5 3.0 1.0 4.2 3.14]; D >= 0 ans = 0 1 1 1 0 1 1 如果想选出D中的正元素: D = D(D>0) D = 1.0000 1.5000 3.0000 4.2000 3.1400 除此之外,MATLAB运算中会出现NaN,Inf,Inf。对它们的比较参见下例 Inf==Inf返回真 InfNaN==NaN返回假 同时,可以用isinf,isnan判断,用法可以顾名思义。
在比较两个矩阵大小时,矩阵必须具有相同的尺寸,否则会报错。这是 你用的上size和isequal,isequalwithequalnans(R13及以后)。
4)从向量构建矩阵(Constructing Matrices from Vectors) 在MATLAB中创建常数矩阵非常简单,大家经常使用的是: A = ones(5,5)*10 但你是否知道,这个乘法是不必要的? A = 10; A = A(ones(5,5)) A = 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 类似的例子还有: v = (1:5)’; n = 3; M = v(:,ones(n,1)) M = 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 事实上,上述过程还有一种更加容易理解的实现方法: A = repmat(10,[5 5]); M = repmat([1:5]’, [1,3]); 其中repmat的含义是把一个矩阵重复平铺,生成较大矩阵。 更多详细情况,参见函数repmat和meshgrid。
5)相关函数列表(Utility Functions) ones 全1矩阵 zeros 全0矩阵 reshape 修改矩阵形状 repmat 矩阵平铺 meshgrid 3维plot需要用到的XY网格矩阵 ndgrid n维plot需要用到的XYZ。网格矩阵 filter 一维数字滤波器,当数组元素前后相关时特别有用。
cumsum 数组元素的逐步累计 cumprod 数组元素的逐步累计 eye 单位矩阵 diag 生成对角矩阵或者求矩阵对角线 spdiags 稀疏对角矩阵 gallery 不同类型矩阵库 pascal Pascal 矩阵 hankel Hankel 矩阵 toeplitz Toeplitz 矩阵 ========================================================== 二、扩充的例子 6)作用于两个向量的矩阵函数 假设我们要计算两个变量的函数F F(x,y) = x*exp(x^2 y^2) 我们有一系列x值,保存在x向量中,同时我们还有一系列y值。 我们要对向量x上的每个点和向量y上的每个点计算F值。
换句话 说,我们要计算对于给定向量x和y的所确定的网格上的F值。 使用meshgrid,我们可以复制x和y来建立合适的输入向量。
然后 可以使用第2节中的方法来计算这个函数。 x = (2:.2:2); y = (1.5:.2:1.5)’; [X,Y] = meshgrid(x, y); F = X .* exp(X.^2 Y.^2); 如果函数F具有某些性质,你甚至可以不用meshgrid,比如 F(x,y) = x*y ,则可以直接用向量外积 x = (2:2); y = (1.5:.5:1.5); x’*y 在用两个向量建立矩阵时,在有些情况下,稀疏矩阵可以更加有 效地利用存储空间,并实现有效的算法。
我们将在第8节中以一个 实例来进行更详细地讨论. 7)排序、设置和计数(Ordering, Setting, and Counting Operations) 在迄今为止讨论过的例子中,对向量中一个元素的计算都是独立 于同一向量的其他元素的。但是,在许多应用中,你要做的计算 则可能与其它元素密切相关。
例如,假设你用一个向量x来表示一 个集合。不观察向量的其他元素,你并不知道某个元素是不是一 个冗余元素,并应该被去掉。
如何在不使用循环语句的情况下删除 冗余元素,至少在现在,并不是一个明显可以解决的问题。 解决这类问题需要相当的智巧。
以下介绍一些可用的基本工具 max 最大元素 min 最小元素 sort 递增排序 unique 寻找集合中。