Plot 倍频程-2个函数的绘图值

Plot 倍频程-2个函数的绘图值,plot,charts,octave,Plot,Charts,Octave,问候, 我有一个关于数字积分的八度脚本问题。 我有3个功能:1计算Heuler积分;第二,计算Heun积分;3rd应在同一窗口中绘制heuler和heun的折线图。 问题是第一个和第二个函数工作得很好,但是第三个函数名为previsao(),无论我做什么,都会抛出错误: A(I,J):列索引越界;值1超出范围0 第124行第7列的previsao 第124行是这样的:plt1=plot(eul(:,x),eul(:,ti),heu(:,x),heu(:,ti)) 这是heuler的代码 func

问候, 我有一个关于数字积分的八度脚本问题。 我有3个功能:1计算Heuler积分;第二,计算Heun积分;3rd应在同一窗口中绘制heuler和heun的折线图。

问题是第一个和第二个函数工作得很好,但是第三个函数名为previsao(),无论我做什么,都会抛出错误: A(I,J):列索引越界;值1超出范围0 第124行第7列的previsao

第124行是这样的:plt1=plot(eul(:,x),eul(:,ti),heu(:,x),heu(:,ti))

这是heuler的代码

function e = euler(x,ti,tf,h,fDerivada)

 xInicial = x;
 tInicial = ti;
 contador = 0;

 % inicia array na posição 1 a 0
  x(1) = 0;
 t(1) = 0;

 while(tInicial <= tf)

% implementa o método de Euler
xFinal = xInicial;
funcao = fDerivada(tInicial, xInicial);
xInicial = xInicial + h * funcao;

% insere valores nos arrays x e t e vai incrementando de posição no array
% vai dar origem à matriz com t e x 
x(contador + 1) = xInicial;
t(contador + 1) = tInicial;

tInicial = tInicial + h;

contador++;

 endwhile

 printf("\n");
 disp("Metodo de Euler:");
 % escreve a matriz em colunas
 [t', x']

 %gráfico 
 plt = plot(x);
 set(plt(1),"linewidth",2);
 set(plt(1),"color","r");
 xlabel("Tempo");
ylabel("Var dependente x");
title("Heuler");
legend("x");

 endfunction

非常感谢您提供了一个可能的解决方案……

调试此类问题的典型方法是启用“按错误调试”

debug_on_error(1);
再次运行脚本。这一次,它将在previsao中停止,并显示debug>提示符。现在您可以指示“eul”和“heu”,例如,第一步是

size(eul)
size(heu)
x
ti
那么问题就显而易见了。对于未来:请尝试将您的问题剥离到您有问题的关键部分,而不是“这是我的工作区,包含x文件”。如果代码可以复制并粘贴到解释器,而不需要帮助的人可以看到问题,这总是有帮助的。在您的情况下,我必须找出运行函数所需的x、ti、tf、h、fDerivada值

编辑:你的功能

function e = euler(x,ti,tf,h,fDerivada)

不写返回值,所以在这种情况下,显然eul是[],我确信Octave会发出警告,对吗?顺便说一句,你不应该覆盖像e,pi,i这样的内置代码…

非常感谢你的提示。正如您所说,我使用了debug命令,并且eul的大小为0;heu的大小=1。我熟悉代码,不知道为什么eul的大小I=0。我认为问题是存在的,因为heu的大小=1(我认为它有值)。那么,为什么eul没有价值呢?
size(eul)
size(heu)
x
ti
function e = euler(x,ti,tf,h,fDerivada)