0

次のコードのエラーを理解したいですか?コードは以下に示されています

function x0=secand2d(f,g,x,dx,tol)
% find solution of f(x,y)=0 and g(x,y)=0
for i=1:20
    x0=x;
    f0=[feval(f,x0),feval(g,x0)];
   x0=x+[dx(1),0];
   fx=[feval(f,x0),feval(g,x0)];
   fx=(fx-f0)/dx(1);
   x0=x+[0 dx(2)];
   fy=[feval(f,x0),feval(g,x0)];
   fy=(fy-f0)/dx(2);
   A=[fx;fy]+eps;
   x=x+dx;
   dx=(-A\f0'-dx')';
   if(norm(dx)<tol) ;return; end;
end;

 disp(norm(dx));
 pause;

end

これは 2 次元割線法を表し、関数 f と g は次の形式で定義されます。

f=@(x,y) (x-sin(x+y)); and   g=@(x,y) y-cos(x-y);

私もチェックしましたが、これらの機能はそのパラメーターで正常に機能します

f(3,3)

ans =

    3.2794

g(1,1)

ans =

     0

また

x=[0.9 0.9];
dx=[0.1 0.1];
tol=1e-5;

しかし、次のコードはそのような種類のエラーを生成しました

secand2d(f,g,x,dx,tol)
Error using @(x,y)(x-sin(x+y))
Not enough input arguments.

Error in secand2d (line 5)
    f0=[feval(f,x0),feval(g,x0)];

このエラーの理由を明確にするのを手伝ってください

4

1 に答える 1

2

ここにのみ渡しているため、そのエラーが発生x0してfいます:

f0=[feval(f,x0),feval(g,x0)];

f2 つの入力をg期待しています。次のようにエラーを修正できます。

f0=[feval(f,x0,y0),feval(g,x0,y0)];

使用している特定の理由がない場合は、次のfevalようにすることができます。

f0 = [f(x0, y0) g(x0, y0)];
于 2013-05-09T13:18:59.293 に答える