【问题标题】:Using f[i] = x + y in MatLab在 MatLab 中使用 f[i] = x + y
【发布时间】:2021-04-27 19:31:50
【问题描述】:

我是 Matlab 新手,我必须做一个使用曲线积分的项目。为此,我需要从 Z0 点开始并获得 4 个其他 random 点。我知道如何使用randn(1)*Varcomplex(x,y) 获取它们,但我的问题是,有没有办法定义z[i] = Real(z) + Imag(z)*i 而不必输入Z1、Z2 等... 我发现我可以使用eval(sprintf('z%d = complex(x,y)',d)),但不推荐使用它。 欢迎所有建议!

clear all;
close all;

global z x y
z = x+y*1i;

%z = complex(x,y);
fun = @(z) 1./(2*pi*z);



for d = 1:4
    x = randn(1)*5;
    y = randn(1)*5;
    zr = real(z);
    zi = imag(z);
    eval(sprintf('z%d = complex(x,y)',d))
    
end

syms z(x,y) [1 4]
z0 = complex(4,0);

【问题讨论】:

    标签: matlab for-loop


    【解决方案1】:

    您是否在寻找数组索引运算符(Matlab 中的括号)z_array(d) = complex(x, y)

    z_array = [];
    for d = 1:4
        x = randn(1)*5;
        y = randn(1)*5;
        z_array(d) = x + 1i * y;    
    end
    

    或者,您可以一次性创建整个数组,而不是循环:

    num_vals = 10;
    
    x_array = randn([num_vals, 1]); % Make a 10x1 random array
    y_array = randn([num_vals, 1]); % Make a 10x1 random array
    z_array = x_array + 1i * y_array;
    

    注意:z_array = complex(x_array, y_array) 可能比 z_array = x_array + 1i * y_arrayThanks Cris!

    如果您有大型数组,第二种方法会快得多 ,并且通常适用于数组的元素相加。

    【讨论】:

    • z_array = complex(x_array, y_array) 可能会更快。不知道是否仍然如此,但它曾经是。
    • @CrisLuengo 我记得两者中的一个更快,但我不记得哪一个。自从我使用 Matlab 已经有一段时间了,我听说新版本中有很多优化,所以它们现在很可能具有相同的性能。不过感谢您的注意:)
    • 确实,每个版本的 MATLAB 都有更多优化,如果是关键代码,您必须针对您使用的特定版本进行测试。此外,复数表示在 2018 年内部发生了变化,因此所有赌注都已取消。 :)
    • 太棒了!它完美无缺!我在想,就像在 Java 中一样,您可以在其中创建一个数组并说数组 [I] = rand_X + I rand_Y ,当前 Rand 中的值并且它位于 forloop 中,每次运行时都会更改值
    • 回复。每个象限一个点:您只需要四个点,所以只需手动操作。
    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 2020-08-31
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多