2017-01-30 2 views
1

У меня возникла проблема с запуском функции Octave (ODE), я уже пробовал уже предлагать решения для этой проблемы, но ничего не работает. Я также пытался сохранить мое имя файла egzamin.m, но он тоже не работал.Ошибка: 'x' undefined

код из октавы:

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

Вы должны сохранить функцию (при этом от function до endfunction и ничего другого), как egzamin.m , а затем выполнить остальную часть кода в скрипте или в командной строке. В качестве альтернативы, если Octave делает это так же, как то, что делает 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.

Смежные вопросы