# 在MATLAB中打高尔夫球的技巧

14

10

``````'abc' - 'a'  % Returns: [0 1 2]
'123' - '0'  % Returns: [1 2 3]
'“' == 8220  % Returns: 1 (logical)
'a':'e'==100 % Returns: [0 0 0 1 0] (logical)
``````

9

``````plot(X,'C','k') % Ambiguous property found.
plot(X,'Co','k') % Expands to Color  (black)
``````

2

Dennis Jaheruddin

1

Luis Mendo

6

``````x='a'+magic(5) % Array with character codes of several letters

char(x) % The standard way
['' x] % The compact way
``````

5

``````for i=numel(str)
a=str(i)
...
end``````

``````for(a=str)
...
end``````

4

# 通过离散傅立叶变换的统一根

``````exp(2j*pi*(0:n-1)/n)
``````

``````exp(2j*pi*(1:n)/n)
``````

``````j.^(4*(0:n-1)/n)
``````

``````j.^(4*(1:n)/n)
``````

``````fft(1:n==n)
``````

``````fft(1:n==2)
``````

@flawr我从不知道优先规则...谢谢！

3

`nnz` 有时可以为您节省几个字节：

• 假设您想要一个逻辑矩阵的总和`A`。代替`sum(sum(A))``sum(A(:))`，您可以使用`nnz(a)``nnz`暗含`(:)`）。
• 如果您想知道数组中元素的数量，并且可以确保没有零，则`numel(x)`可以使用`nnz(x)`。例如，如果`x`是字符串，则适用。

3

``````for v=M
disp(v);
end
``````

``````for k=1:n
disp(M(:,k));
end
``````

3

Octave相关但不完全相同的技巧

MATLAB和Octave的一个鲜为人知且很少使用的功能是，大多数内置函数都可以在不带括号的情况下调用，在这种情况下，它们会将其后的任何内容都视为字符串（只要它不包含空格）。如果包含空格，则需要引号。使用以下命令时，通常可以节省一个字节`disp`

``````disp('Hello, World!')
disp 'Hello, World!'
``````

``````nnz PPCG
ans = 4

size PPCG
ans = 1  4

str2num 12
ans = 12
``````

``````strchr sssssssssssssst t
``````

``````nnz nnnnnnnnnnnnnn
``````

2

``````d = rand(5,2);

%// Using zeros
z = zeros(size(d));

%// Not using zeros
z = d*0;

%// Using ones
o = ones(size(d));

%// Not using ones
o = 1+d*0
``````

``````p = rand(5,2);

z = zeros(size(p,1), 1);
z = 0*p(:,1);

o = ones(size(p, 1), 1);
o = 1+0*p(:,1);
``````

``````%// This
z = zeros(2,3);

%// vs. This
z(2,3) = 0;
``````

2

sintax

2

### 2D卷积核

``````0 1 0
1 1 1
0 1 0
``````

``````v=[1,2,1];v'*v>1 %logical
v=[1,0,1];1-v'*v  %as numbers
``````

``````[0,1,0;1,1,1;0,1,0]
``````

``````0 1 0
1 0 1
0 1 0
``````

``````v=[1,-1,1];v'*v<0   % logical
[0,1,0;1,0,1;0,1,0] % naive verison
``````

Luis Mendo

2

``````[x,y]=meshgrid(-2:1e-2:1,-1:1e-2,1)
``````

``````c=x*0;
``````

``````c=x*0+3;
``````

``````[x,y,c]=meshgrid(-2:1e-2:1,-1:1e_2,1, 0); %or for the value 3
[x,y,c]=meshgrid(-2:1e-2:1,-1:1e_2,1, 3);
``````

``````[x,y,c1,c2,c3,c4,c5]=meshgrid(-2:1e-2:1,-1:1e_2,1, 1,pi,exp(3),1e5,-3i)
``````

flawr

0

## 一系列功能的总和

• 为了对函数f（x_n）求和，其中n是连续整数的向量，建议使用feval而不是symsum。

``````Syms x;symsum(f(x),x,1,n);
Sum(feval(@(x)f(x),1:n));
``````

请注意，基本操作`.*``./`是代替成对的二进制操作`*``/`

• 如果该函数可以被天真地编写，则后一种方法都不适合。

例如，如果函数是`log`，则可以简单地执行：`sum(log(1:n))`，它表示：

``````Sum(f(1:n));
``````

可以使用相对复杂的功能`log(n)/x^n`

``````Sum(log(1:n)./5.^(1:n))
``````

当一个功能甚至在某些情况下，较短不再作为`f(x)=e^x+sin(x)*log(x)/x`....

``````Sum(feval(@(y)e.^(y)+sin(y).*log(y)./y,1:n))
``````

明显短于 `sum(feval(@(y)e.^(1:n)+sin(1:n).*log(1:n)./(1:n),1:n))`