Octave - 求解方程并创建具有值的矩阵

Octave - Solve equation and create Matrix with values

早上好...

我需要在 Octave 中编写一个函数 y = interval(a)。该函数需要创建一个维度为 n x 2 的矩阵 y。每行必须包含 ymin 和 ymax 乘以 pi/2。

x 的区间为:

x = 0:.1:25;

输出矩阵的方程必须是:

cos(x) = exp(a*x)-1

a 的值将在函数的参数中给出 -> interval(4)

到目前为止我已经完成了所有工作。这件事让我很困惑,因为我试图让八度音阶计算 cos(x) = exp(a*x)-1,然后创建矩阵 n x 2,每行中的 ymin 和 ymax 乘以 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

看来您误解了如何将 return 值赋给函数。函数的最后一行 interval = [y']; 没有任何作用。该函数将 return 您分配给 y 的最后一个值。 interval 只是您调用函数的名称,它不是函数中的变量。

此外,您要注意 y 向量的方向以及 hg 的输出。目前,y 被创建为行向量。然后当您执行 y = [h, g] 时,它将创建一个非常长的行向量,其中 h 的值后跟 g 的值。相反,您应该将 hg 作为列向量,或者在将它们放入 y 之前,或者在对 y 的赋值中(使用 y = [h(y)',g(y)'] 之类的东西)。

综上所述,我仍然不完全清楚你正在做的事情是否会从 x 的等式中产生你想要的输出。也许您可以提供一个非常简单的示例,说明您认为小输入的输出应该是什么样子。或者更简单地说,你所写的内容将 运行 变成 Matlab/Octave,但我无法确定你首先要寻找的是什么数学输出。

此外,我认为函数中没有任何真正需要 clear functions 语句的地方。这些函数中的任何一个都是在 interval 函数的本地创建的,并且在函数 运行s 之后不再存在。

编辑:好的,看起来您已经修复了 return 值,所以现在 X 的最后一个定义将由函数 return 编辑,这就是它将是一个 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