Error : 'x' undefined
Error : 'x' undefined
我遇到了 运行 八度函数 (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
您需要将函数(因此从 function
到 endfunction
等等)保存为 egzamin.m,然后执行脚本或命令行中的其余代码。或者,如果 Octave 的功能与 MATLAB 如今的功能相同,则首先将您的脚本(N=(..)
到 plot()
)然后是函数。
这是必要的,因为您首先定义了函数,所以它还没有任何输入,因为您要等到稍后再定义它们。该函数需要在执行之前定义其输入,因此您需要单独保存您的函数。
你当然可以保存你的 "script" 位,因此当前在你的函数声明之下的所有东西,也作为一个函数,只是不要给它输入和输出,或者,设置所有也在这里输入参数。 (我不会这样做,因为它和你的一样
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
由于文件以function
开头,不是脚本文件,
如 doc:
中所述
Unlike a function file, a script file must not begin with the keyword
function
在 function
行之前添加任何语句(甚至像 1;
这样的虚拟语句)以获取脚本文件。
# 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))
对正在发生的事情给出了非常清楚的解释。
我遇到了 运行 八度函数 (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
您需要将函数(因此从 function
到 endfunction
等等)保存为 egzamin.m,然后执行脚本或命令行中的其余代码。或者,如果 Octave 的功能与 MATLAB 如今的功能相同,则首先将您的脚本(N=(..)
到 plot()
)然后是函数。
这是必要的,因为您首先定义了函数,所以它还没有任何输入,因为您要等到稍后再定义它们。该函数需要在执行之前定义其输入,因此您需要单独保存您的函数。
你当然可以保存你的 "script" 位,因此当前在你的函数声明之下的所有东西,也作为一个函数,只是不要给它输入和输出,或者,设置所有也在这里输入参数。 (我不会这样做,因为它和你的一样 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
由于文件以function
开头,不是脚本文件,
如 doc:
Unlike a function file, a script file must not begin with the keyword function
在 function
行之前添加任何语句(甚至像 1;
这样的虚拟语句)以获取脚本文件。
# 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))
对正在发生的事情给出了非常清楚的解释