早上好..。
我需要用八度写一个函数y= interval(a)。该函数需要创建一个维数为nx2的矩阵y。每一行必须包含ymin和ymax乘以pi/ 2。
X的间隔是:
x = 0:.1:25;输出矩阵的等式必须是:
cos(x) = exp(a*x)-1A的值将在函数->区间(4)的参数中给出。
到目前为止我只做了这么多。这件事让我很困惑,因为我试图使倍频程计算cos(x) = exp(a*x)-1,然后在每一行中用ymin和ymax来创建矩阵nx2,乘以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发布于 2015-11-18 11:10:11
您似乎误解了如何将值返回到函数。函数的最后一行,interval = [y'];没有任何用途。该函数将返回分配给y的最后一个值。interval只是调用函数的名称,它不是函数中的变量。
此外,您还需要注意y向量的方向和h & g的输出。目前,y是作为行向量创建的。然后,当您执行y = [h, g]时,它将创建一个非常长的行向量,其中h的值后面跟着g的值。相反,您应该将h和g作为列向量,然后将它们放入y中,或者在分配给y的范围内(类似于y = [h(y)',g(y)'])。
尽管如此,我仍然不完全清楚,您所做的工作是否会产生您希望从x的等式中得到的输出。也许您可以提供一个非常简单的例子,说明对于一个小的输入,输出应该是什么样子的。或者更简单地说,你写的东西会在Matlab/Octave中运行,但我不知道你首先想要的是什么数学输出。
而且,我不认为函数中有任何对clear functions语句的真正需求。这些函数中的任何一个都是在interval函数的本地创建的,并且在该函数运行后不再存在。
编辑:好,看起来您已经固定了返回值,所以现在X的最后一个定义将由函数返回,这将是一个nx2矩阵。
编辑:现在更清楚的是,作为一个输出,您想要得到什么。您正在尝试生成一个矩阵,其中包含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;
endfunctionhttps://stackoverflow.com/questions/33755250
复制相似问题