错误:'x'未定义

时间:2017-01-30 11:15:36

标签: octave ode

我遇到运行Octave函数(ODE)的问题,我已经尝试过针对这个问题提出解决方案,但没有任何工作。我也尝试将我的文件名保存为egzamin.m,但它也没有用。

来自八度的代码:

function dx=egzamin(x,t)
dx=zeros(4,1);
b=0;
g=9.81;
x1=x(1);
y1=x(2);
Vx=x(3);
Vy=x(4);
dx(1)=Vx;
dx(2)=Vy;
dx(3)=-b*Vx*sqrt(Vx.^2+Vy.^2);
dx(4)=-b*Vy*sqrt(Vx.^2+Vy.^2)-g;
endfunction
N=mod(291813,100);
x1=0;
y1=0;
Vx=20+N;
Vy=20+N;

t=0:0.01:500;
sol=lsode("egzamin",[x1,y1,Vx,Vy],t);
plot(sol(:,1),sol(:,2)) 

错误是:

error: 'x' undefined near line 5 column 4
error: called from
    egzamin at line 5 column 3

2 个答案:

答案 0 :(得分:1)

由于文件以function开头,因此它不是脚本文件, 正如doc

中所述
  

与函数文件不同,脚本文件不能以关键字开头   功能

1;行之前添加任何语句(甚至像function之类的虚拟语句)以获取脚本文件。

# dummy statement to get a script file instead of a function file   
1;

function dx=egzamin(x,t)
  g = 9.81;
  Vx = x(3);
  Vy = x(4);
  dx = [Vx, Vy, 0, -g];
endfunction

N=mod(291813,100);
x1=0;
y1=0;
Vx=20+N;
Vy=20+N;

t=0:0.01:500;
sol=lsode("egzamin",[x1,y1,Vx,Vy],t);
plot(sol(:,1),sol(:,2))

给出了here的正确解释。

答案 1 :(得分:0)

您需要将函数(因此从function保存到endfunction而不是其他)保存为 egzamin.m ,然后在脚本中执行其余代码或者在命令行。或者,如果Octave的功能与现在的MATLAB相同,首先将脚本(N=(..)添加到plot())然后再添加函数。

这是必要的,因为您首先定义了您的功能,因此它还没有任何输入,因为您不会在以后定义它们。该函数需要在执行之前定义其输入,因此您需要单独保存函数。

你当然可以保存你的脚本" bit,因此当前在函数声明之下的所有内容,作为一个函数,只是不给它输入和输出,或者在这里设置所有输入参数。 (我不会这样做,因为它和你的一样 egzamin 然后。)例如

function []=MyFunc()
N=mod(291813,100);
x1=0;
y1=0;
Vx=20+N;
Vy=20+N;

t=0:0.01:500;
sol=lsode("egzamin",[x1,y1,Vx,Vy],t);
plot(sol(:,1),sol(:,2)) 
endfunction