Matrix 倍频程-解方程并创建具有值的矩阵

Matrix 倍频程-解方程并创建具有值的矩阵,matrix,octave,Matrix,Octave,早上好 我需要在倍频程中写一个函数y=interval(a)。该函数需要创建一个尺寸为nx2的矩阵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乘以pi/2创建矩阵nx2,但却做不到 这是我的建议: func

早上好

我需要在倍频程中写一个函数y=interval(a)。该函数需要创建一个尺寸为nx2的矩阵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乘以pi/2创建矩阵nx2,但却做不到

这是我的建议:

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

似乎您误解了如何向函数返回值。函数中的最后一行,
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函数
语句。这些函数中的任何一个都是在
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;
endfunction

我试图在octave文档和其他文档中找到一种方法,将h和g转换为一行,每行有许多行。我计算的唯一方法是通过fprintf,但我需要一个矩阵,而不是fprintf。我想你给了我一个我需要做的线索。我将进行更改,然后编辑问题供您查看。谢谢,编辑完毕。我认为矩阵的创建是正确的。现在我需要调用另一个函数中另一个m.file中的矩阵值。你知道路吗?我当时在手机上,无法在回复中添加太多细节。让我在这里再加一点解释,看看这是否澄清了问题。调用函数的方式与调用任何函数(如
sin
cos
)的方式相同。当Octave看到您正在调用一个函数时,它首先查看内存中是否有使用该名称定义的函数,然后查看本地文件夹,然后开始查看函数的正常路径。因此,如果您已将
interval.m
保存在与另一个m.file相同的文件夹中,它将在看到类似以下行时使用您的函数:
DATA=interval(somenumber)