簡體   English   中英

錯誤:'x' 未定義

[英]Error : 'x' undefined

我在運行 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

由於文件以function開頭,因此它不是腳本文件,如文檔中所述:

與函數文件不同,腳本文件不能以關鍵字 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))

這里給出對正在發生的事情的非常清楚的解釋。

您需要將函數(因此從function保存到endfunction而不是其他function )為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM