早上好......
我需要在Octave中写一个函数y = interval(a)。该函数需要创建一个维数为n x 2的矩阵y。每一行必须包含ymin和ymax乘以pi / 2.
x中的间隔是:
x = 0:.1:25;
输出矩阵的公式必须是:
cos(x) = exp(a*x)-1
a的值将在函数的参数中给出 - >间隔(4)
到目前为止,我已经完成了所有工作。这件事让我很困惑,因为我试图使八度计算cos(x)= exp(a * x)-1然后用ymin和ymax创建矩阵nx 2,每行乘以pi / 2而不能做到这一点。
这是我的尝试:
function [y] = interval(a)
y = 0:.1:25;
h = @(y) cos(y);
g = @(y) exp(a*y)-1;
c = pi/2;
y = [h(y),g(y)];
interval = [y'];
end
任何解决方案......
编辑 - >在Nick J评论消息之后的新代码:
function [X] = intervalos(a)
% limpar a memoria de todas as vars e funções
clear functions;
% limpa consola
clc;
% intervalo para x
x = 0:.1:25;
% ambas as funções h(x) e g(x)
h = @(x) cos(x);
g = @(x) exp(a*x)-1;
% multiplicador
c = pi/2;
% saída
xh = [h(x)*c];
xg = [g(x)*c];
fprintf('Matrix X:\n');
X = [xh', xg'];
% limpar a memoria de todas as vars e funções
clear functions;
endfunction
答案 0 :(得分:1)
您似乎误解了如何将值返回给函数。函数的最后一行interval = [y'];
没有用处。该函数将返回您分配给y
的最后一个值。 interval
只是你调用函数的名称,它不是函数中的变量。
另外,您要注意y
向量的方向和h
&的输出。 g
。目前,y
被创建为行向量。然后,当您执行y = [h, g]
时,它会创建一个非常长的行向量,其值为h
,后跟g
的值。相反,您应该先将h
和g
作为列向量,然后再将它们放入y
,或者在赋值给{y = [h(y)',g(y)']
之前)。
所有这一切,我仍然不完全清楚,如果你正在做的事情将使用x
产生你想要的输出。也许您可以提供一个非常简单的示例,表示您认为输出对于小输入应该是什么样子。或者更简单地说,你所写的内容将在Matlab / Octave中运行,但我不能说出你首先要寻找的数学输出。
另外,我并不认为函数中有clear functions
语句的真正需要。这些函数中的任何一个都是在interval
函数的本地创建的,并且在函数运行后不再存在。
编辑:好的,看起来你已经修复了返回值,所以现在函数将返回X
的最后一个定义,并且这将是一个n x 2矩阵。
编辑:现在它更清楚了你想要作为输出获得什么。您正在尝试为x
生成一个矩阵,其中包含该等式的左侧和右侧的值。在y
以任何方式出现在其中没有y
的等式之前,这一点尚不清楚。可能更清楚地说明您正在寻找生成矩阵
[cos(x)*pi/2,exp(a*x-1)*pi/2]
因为你上面写的等式根本没有进入过程。
此时,您的功能可能只是:
function output_matrix = interval(a)
x = [1:.1:25]';
output_matrix = [cos(x),(exp(a*x)-1)]*pi/2;
endfunction