Arrays Matlab中的矢量化,无法理解的语法差异导致失败

Arrays Matlab中的矢量化,无法理解的语法差异导致失败,arrays,matlab,vectorization,Arrays,Matlab,Vectorization,我不明白为什么在下面的示例中,只有x1变成1000列数组,而y是一个数字 x = [0:1:999]; y = (7.5*(x))/(18000+(x)); x1 = exp(-((x)*8)/333); 如有任何澄清,将不胜感激 尝试显式指定要执行元素操作而不是矩阵操作: y = (7.5.*(x))./(18000+(x)); 通常,*进行元素乘法,/进行元素除法等。因此,[12].[34]产生[38]。省略这些点将导致Matlab在能够合理解释输入为矩阵时使用矩阵运算。尝试明确指定要执

我不明白为什么在下面的示例中,只有x1变成1000列数组,而y是一个数字

x = [0:1:999];
y = (7.5*(x))/(18000+(x));
x1 = exp(-((x)*8)/333);

如有任何澄清,将不胜感激

尝试显式指定要执行元素操作而不是矩阵操作:

y = (7.5.*(x))./(18000+(x));

通常,
*
进行元素乘法,
/
进行元素除法等。因此,
[12].[34]
产生
[38]
。省略这些点将导致Matlab在能够合理解释输入为矩阵时使用矩阵运算。

尝试明确指定要执行元素操作而不是矩阵运算:

y = (7.5.*(x))./(18000+(x));

通常,
*
进行元素乘法,
/
进行元素除法等。因此,
[12].[34]
产生
[38]
。省略这些点将导致Matlab在能够合理解释输入为矩阵时使用矩阵运算。

为什么
x1
1x1000

如合同中所述

exp(X)
返回数组中每个元素的指数

由于
x
1x1000
,因此
-(x*8)/333
1x1000
,当对其应用
exp()
时,计算所有1000个元素的指数,因此
x1
也是
1x1000
。例如,
exp([1 2 3])
[exp(1)exp(2)exp(3)]
相同


为什么
y
是一个数字?

如合同中所述

如果
A
是矩形
m
-by-
n
矩阵,且
B
是矩阵 使用
n
列,然后
x=B/A
返回 方程组
x*A=B

就你而言,
A
18000+x
size(18000+x)
1x1000
m=1
n=1000
,以及
m~=n

B
7.5*x
,它有
n=1000
列。
(7.5*x)/(18000+x)
将返回方程的最小二乘解
x*(18000+x)=7.5*x


最后的评论:

  • x=[0:1:999]
    这里不需要括号,最好这样使用:
    x=0:1:999

  • 似乎要对计算
    x1
    进行元素级除法,应使用如下运算符:

    y=(7.5*x)./(18000+x);  %Also removed unnecessary brackets
    

  • 还要注意,加法总是按元素进行的
    +
    不是有效的MATLAB语法(但它在八度音阶下工作)。请参阅MATLAB中的有效算术数组和矩阵运算符


    ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍3.
    x1也有一些不必要的括号。

    为什么
    x1
    1x1000

    如合同中所述

    exp(X)
    返回数组中每个元素的指数

    由于
    x
    1x1000
    ,因此
    -(x*8)/333
    1x1000
    ,当对其应用
    exp()
    时,计算所有1000个元素的指数,因此
    x1
    也是
    1x1000
    。例如,
    exp([1 2 3])
    [exp(1)exp(2)exp(3)]
    相同


    为什么
    y
    是一个数字?

    如合同中所述

    如果
    A
    是矩形
    m
    -by-
    n
    矩阵,且
    B
    是矩阵 使用
    n
    列,然后
    x=B/A
    返回 方程组
    x*A=B

    就你而言,
    A
    18000+x
    size(18000+x)
    1x1000
    m=1
    n=1000
    ,以及
    m~=n

    B
    7.5*x
    ,它有
    n=1000
    列。
    (7.5*x)/(18000+x)
    将返回方程的最小二乘解
    x*(18000+x)=7.5*x


    最后的评论:

  • x=[0:1:999]
    这里不需要括号,最好这样使用:
    x=0:1:999

  • 似乎要对计算
    x1
    进行元素级除法,应使用如下运算符:

    y=(7.5*x)./(18000+x);  %Also removed unnecessary brackets
    

  • 还要注意,加法总是按元素进行的
    +
    不是有效的MATLAB语法(但它在八度音阶下工作)。请参阅MATLAB中的有效算术数组和矩阵运算符


    ‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍3.
    x1也有一些不必要的括号。

    其他人已经回答了这个问题。我只想指出一件小事。您不需要写入
    x=0:1:999
    。最好写为
    x=0:999
    ,因为MATLAB或倍频程使用的默认增量值为1。

    其他人已经回答了这个问题。我只想指出一件小事。您不需要写入
    x=0:1:999
    。最好将其写成
    x=0:999
    ,因为MATLAB或倍频程使用的默认增量值是1。

    ,实际有效。因此,我想结论是x1没有完全正确地编写,只是偶尔工作。
    +
    在MATLAB中不是有效的运算符。这个问题是关于MATLAB的,甚至没有倍频程标记(如果你在倍频程中尝试过的话)@SardarUsama我在MATLAB中运行了这个,不是倍频程,它工作了。但我同意这是不必要的。()