尝试在Octave中求解非线性系统时出现以下错误:
错误:@Jfun:未找到函数且未找到方法
错误:从
调用 第4行第13列的voc
我正在使用4个脚本,但找不到错误的来源。 ffun
,jfun
和newtonsys
文件之前已经过测试,我几乎可以确定问题不存在(我不知道变量命名是否有问题。虽然),但为了防万一,我将它们全部包括在下面。
文件voc.m
x0=[9;8;0.5];
tol=10^-3;
nmax=1000;
[z,res,niter]=newtonsys(@Ffun,@Jfun,x0,tol,nmax)
文件功能.m
q=1.602E-19;
k=1.381E-23;
Ncs=12;
Tc=329.25;
gamma=1.35;
Isc=9.14;
Rsh=94.5;
Vmp=37.8;
Imp=8.74;
function F=Ffun(x)
F(1,1)=Isc+x(2)*[exp((q*Isc*x(3))/(gamma*k*Tc*Ncs))-1]-(Isc*x(3))/Rsh-x(1);
F(2,1)=x(2)*[exp(q*(Voc)/(gamma*k*Tc*Ncs))-1]+(Voc/Rsh)-x(1);
F(3,1)=Imp+x(2)*[exp(q*(Vmp+Imp*x(3))/(gamma*k*Tc*Ncs))-1]+(Vmp+(Imp*x(3)))/Rsh-x(1);
endfunction
文件JFun.m
q=1.602E-19;
k=1.381E-23;
Ncs=12;
Tc=329.25;
gamma=1.35;
Isc=9.14;
Rsh=94.5;
Vmp=37.8;
Imp=8.74;
function J=Jfun(x)
J(1,1)=-1;
J(1,2)=exp((q*Isc*x(3))/(gamma*k*Tc*Ncs))-1;
J(1,3)=x(2)*[exp((q*Isc*x(3))/(gamma*k*Tc*Ncs))]*(q*Isc/(gamma*k*Tc*Ncs))-(Isc/Rsh);
J(2,1)=-1;
J(2,2)=exp(q*(Voc)/(gamma*k*Tc*Ncs))-1;
J(2,3)=0;
J(3,1)=-1;
J(3,2)=exp(q*(Vmp+Imp*x(3))/(gamma*k*Tc*Ncs))-1;
J(3,3)=x(2)*[exp(q*(Vmp+Imp*x(3))/(gamma*k*Tc*Ncs))]*(q*Imp/(gamma*k*Tc*Ncs))+(Imp/Rsh);
endfunction
文件newtonsys.m
function [x,res,niter] = newtonsys(Ffun,Jfun,x0,tol,...
nmax, varargin)
niter = 0;
err = tol + 1;
x = x0;
while err >= tol & niter < nmax
J = Jfun(x,varargin{:});
F = Ffun(x,varargin{:});
delta = - J\F;
x = x + delta;
err = norm(delta);
niter = niter + 1;
end
res = norm(Ffun(x,varargin{:}));
if (niter==nmax & err> tol)
fprintf(['Il metodo non converge nel massimo ',...
'numero di iterazioni. L''ultima iterata\n',...
'calcolata ha residuo relativo pari a %e\n'],F);
else
fprintf(['Il metodo converge in %i iterazioni',...
' con un residuo pari a %e\n'],niter,F);
end
return
答案 0 :(得分:1)
问题是您的JFun.m
文件不是功能文件,它是一个脚本文件,碰巧在其中定义了“现场”功能JFun
。如果voc.m
脚本恰巧在之前调用了该函数(即JFun.m
脚本有机会运行之前,因此最终在当前环境),然后它会抱怨说那里不存在。
您所遇到的解决方案是将所有这些变量定义移到功能块内,使其成为适当的“功能文件”,然后可以从voc中访问它(只要它位于同一目录中/八度音阶路径中) )。
或者,如果您仍然希望将JFun.m
用作脚本(例如,也许 do 希望所有这些变量最终在全局范围内定义),那么只需确保您首先将其作为脚本 first 运行,以便它首先定义您需要的功能;但是,在这种情况下,最好将脚本名称更改为其他名称,以使其名称与脚本中定义的现场功能不冲突。
快速浏览手册中的respective section,尤其是this部分。