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
向量的方向以及 h
和 g
的输出。目前,y
被创建为行向量。然后当您执行 y = [h, g]
时,它将创建一个非常长的行向量,其中 h
的值后跟 g
的值。相反,您应该将 h
和 g
作为列向量,或者在将它们放入 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
早上好...
我需要在 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
向量的方向以及 h
和 g
的输出。目前,y
被创建为行向量。然后当您执行 y = [h, g]
时,它将创建一个非常长的行向量,其中 h
的值后跟 g
的值。相反,您应该将 h
和 g
作为列向量,或者在将它们放入 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