Error : 'x' undefined

前端 未结 2 1446
青春惊慌失措
青春惊慌失措 2021-01-25 05:30

I got a problem with running Octave function (ODE), I\'ve tried already present solutions for this problem but nothing is working. I\'ve also tried by saving my filename as

相关标签:
2条回答
  • 2021-01-25 05:58

    Since the file starts with function, it is not a script file, as explained in the doc:

    Unlike a function file, a script file must not begin with the keyword function

    Add any statement (even dummy like 1;) before the function line to get a script file.

    # 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))
    

    A very clear explanation of what's going on is given here.

    0 讨论(0)
  • 2021-01-25 06:14

    You need to save the function (thus from function to endfunction and naught else) as egzamin.m, and then execute the rest of the code in a script or at the command line. Alternatively, provided Octave does that the same as what MATLAB does nowadays, first put your script (N=(..) to plot()) and then the function.

    This is necessary since you are defining your function first, so it doesn't have any inputs yet, as you don't define them until later. The function needs to have its inputs defined before it executes, hence you need to save your function separately.

    You can of course save your "script" bit, thus everything which is currently below your function declaration, as a function as well, simply don't give it in- and outputs, or, set all the input parameters here as well. (Which I wouldn't do as it's the same as your egzamin then.) e.g.

    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
    
    0 讨论(0)
提交回复
热议问题