Hao B.

V1

2022/12/26阅读:39主题:重影

向量化计算(上)

向量化计算


相关函数

  • arrayfun | structfun | cellfun : 数组、结构体和元胞数组
  • spfun | cell2mat | splitapply | varfun | rowfun | groupsummary

限于篇幅,本文分为2部分。

ARRAYFUN函数

ARRAYFUN官方解读

  • 将函数应用于每个数组元素
  • B = arrayfun(func,A1,...,An):将 func 应用于数组 A1,...,An 的元素,因此 B(i) = func(A1(i),...,An(i))。

ARRAYFUN举例

1个数组的情况

A = linspace(1105);
fun =@(x) exp(x^2) * x;

Y = arrayfun(fun, A)

运行结果

Y =

   1.0e+44 *

    0.0000    0.0000    0.0000    0.0000    2.6881

多个数组的情况

% 2个不同数组作用在同个函数,命名时就得一样,比如“A”,而不是“A_1”和“A_2”
S(1).A = linspace(1105); % 结构体
S(2).A = [2.12.24.567.1]; % 结构体

fun =@(x) exp(x.A .^ 2) .* x.A; 

Y = arrayfun(fun, S, "UniformOutput"false)

运行结果

Y =

  1×2 cell 数组

    {[2.7183 1.2564e+05 7.5469e+13 9.4214e+26 2.6881e+44]}    {[172.7659 278.2326 2.8033e+09 2.5867e+16 5.5468e+22]}

注意:ARRAYFUN函数应用在多个数组时,需要先定义结构体。但因不同数组都要作用于同一个函数,所以命名时不建议用A_1和A_2进行区分

也可以用来批量化绘图

A_1 = linspace(-5-1500);
A_2 = linspace(15500);

fun =@(x) sin(x.^2) .* cos(x);

B_1 = arrayfun(fun, A_1);
B_2 = arrayfun(fun, A_2);

s(1).X = A_1;  s(1).Y = B_1;
s(2).X = A_2;  s(2).Y = B_2;

hold on

m = @(x) plot(x.X, x.Y, "LineWidth"1.2);
p = arrayfun(m, s);
p(1).Marker = "o";
p(2).Marker = "s";

hold off

运行结果

其他类似函数

使用方法和“ARRAYFUN”一样

STRUCTFUN官方解读

  • 对标量结构体的每个字段应用函数
  • A = structfun(func,S) 将函数 func 应用于标量结构体 S 的每个字段,每次一个字段。

CELLFUN官方解读

  • 对元胞数组中的每个元胞应用函数
  • A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。

欢迎纠错。

分类:

数学

标签:

数学编程

作者介绍

Hao B.
V1