Matlab 为什么我的函数只返回一个值而返回两个值?

Matlab 为什么我的函数只返回一个值而返回两个值?,matlab,matrix,Matlab,Matrix,所以我尝试在Matlab中实现辛普森方法,这是我的代码: function q = simpson(x,f) n = size(x); %subtracting the last value of the x vector with the first one ba = x(n) - x(1); %adding all the values of the f vector which are in even places starting from f(2) a = 2*f(2:2:end-1

所以我尝试在Matlab中实现辛普森方法,这是我的代码:

function q = simpson(x,f)
n = size(x);
%subtracting the last value of the x vector with the first one
ba = x(n) - x(1);

%adding all the values of the f vector which are in even places starting from f(2)
a = 2*f(2:2:end-1);
%adding all the values of the f vector which are in odd places starting from 1
b = 4*f(1:2:end-1);

%the result is the Simpson approximation of the values given
q = ((ba)/3*n)*(f(1) + f(n) + a + b);
这就是我得到的错误:

Error using ==> mtimes
Inner matrix dimensions must agree.
出于某种原因,即使我将q设为

q = f(n)
q = f(1)
因此,我得到:

q =

 0     1
而不是

q =

 0 
当我把q设为

q = f(n)
q = f(1)
我得到:

q =

 0


q =

 0
我无法解释这种行为,这可能就是我得到上述错误的原因。那么为什么q有两个值而不是一个

编辑:
x=linspace(0,pi/2,12);
f=sin(x)
size(x)
返回数组的大小。这将是一个包含矩阵所有维度的向量必须至少有两个维度

在您的例子中,
n=size(x)
将给出n=[n,1],而不仅仅是您想要的数组长度。这意味着ba将有2个元素

您可以使用返回最长维度而不是大小的
length(x)
(或
numel(x)
size(x,1)
或2,这取决于仅返回编号维度的x的定义方式)

另外,你想在a和b中求和,而现在你只需要用这些元素创建一个向量。尝试将其更改为
a=2*sum(f(…)
,类似于b

发生错误的原因是,您正在对两个维度不同的向量进行矩阵乘法,这是不允许的。如果您更改代码,那么所有的值都应该是标量,这样它就可以工作了

为了得到正确答案(3*n),也应该在括号中,因为matlab不喜欢在/和*()之间。您的版本有(ba/3)*n,这是错误的。

size(x)
返回数组的大小。这将是一个包含矩阵所有维度的向量必须至少有两个维度

在您的例子中,
n=size(x)
将给出n=[n,1],而不仅仅是您想要的数组长度。这意味着ba将有2个元素

您可以使用返回最长维度而不是大小的
length(x)
(或
numel(x)
size(x,1)
或2,这取决于仅返回编号维度的x的定义方式)

另外,你想在a和b中求和,而现在你只需要用这些元素创建一个向量。尝试将其更改为
a=2*sum(f(…)
,类似于b

发生错误的原因是,您正在对两个维度不同的向量进行矩阵乘法,这是不允许的。如果您更改代码,那么所有的值都应该是标量,这样它就可以工作了

为了得到正确答案(3*n),也应该在括号中,因为matlab不喜欢在/和*()之间。您的版本有(ba/3)*n,这是错误的。

size(x)
返回数组的大小。这将是一个包含矩阵所有维度的向量必须至少有两个维度

在您的例子中,
n=size(x)
将给出n=[n,1],而不仅仅是您想要的数组长度。这意味着ba将有2个元素

您可以使用返回最长维度而不是大小的
length(x)
(或
numel(x)
size(x,1)
或2,这取决于仅返回编号维度的x的定义方式)

另外,你想在a和b中求和,而现在你只需要用这些元素创建一个向量。尝试将其更改为
a=2*sum(f(…)
,类似于b

发生错误的原因是,您正在对两个维度不同的向量进行矩阵乘法,这是不允许的。如果您更改代码,那么所有的值都应该是标量,这样它就可以工作了

为了得到正确答案(3*n),也应该在括号中,因为matlab不喜欢在/和*()之间。您的版本有(ba/3)*n,这是错误的。

size(x)
返回数组的大小。这将是一个包含矩阵所有维度的向量必须至少有两个维度

在您的例子中,
n=size(x)
将给出n=[n,1],而不仅仅是您想要的数组长度。这意味着ba将有2个元素

您可以使用返回最长维度而不是大小的
length(x)
(或
numel(x)
size(x,1)
或2,这取决于仅返回编号维度的x的定义方式)

另外,你想在a和b中求和,而现在你只需要用这些元素创建一个向量。尝试将其更改为
a=2*sum(f(…)
,类似于b

发生错误的原因是,您正在对两个维度不同的向量进行矩阵乘法,这是不允许的。如果您更改代码,那么所有的值都应该是标量,这样它就可以工作了



为了得到正确答案(3*n),也应该在括号中,因为matlab不喜欢在/和*()之间。你的版本有(ba/3)*n,这是错误的。

这个f变量是什么?你得到的是哪一行的错误?你甚至还没有展示f到底是什么。你得到的结果是基于你的
f
I编辑了我的帖子并添加了我的x和f。我在试图计算q的那一行中得到了错误。因此我将
a
b
更改为
a=sum(f(2:2:end-1));b=总和(4*f(1:2:end-1))和测试运行后
a=3.0133
b=13.9103
,但我在尝试计算q时仍然得到相同的错误。也许f是个问题。如何访问f的第一个和最后一个值而不弄乱它?尝试将行
n=size(x)
更改为
n=size(x,1)
。当我将其更改为
n=size(x,1)
时,我得到
q=0
,因为
size(x,1)
的结果是
1
我将其更改为
n=size(x,2)
我得到了
n=12
,它的大小是
x
。现在我得到
q=112.6176
。这个f变量是什么?你得到的是哪一行的错误?你甚至还没有展示f到底是什么