2017-01-30 136 views
1

我与运行八度音功能(ODE)的一个问题,我已经试过这个问题已经存在解决方案,但没有什么工作。我也尝试通过保存我的文件名为egzamin.m,但它也没有奏效。从八度错误:“X”未定义

代码:

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 
+0

它的工作:)),但我只能在脚本保存呢? – Graku

回答

0

你需要(由此从functionendfunction,并赢得他)保存功能egzamin.m ,然后在脚本或命令行中执行其余代码。另外,提供了八度的确是一样什么MATLAB做时下,首先把你的脚本(N=(..)plot()),然后该功能。

这是必要的,因为你首先定义你的函数,因此它不具有任何输入的是,只要你不定义它们,直到后来。该功能需要在执行之前将其输入定义为,因此您需要单独保存您的功能。

当然你也可以保存你的“脚本”位,因此一切这是目前下方的函数声明,作为一个功能以及,根本不给它输入和输出,或者,将所有的输入参数,在这里以及。 (我不会做,因为它是与您的 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 
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