雅可比函数返回错误"未定义函数' jacobian'输入参数类型' double'"

时间:2016-01-19 17:53:23

标签: matlab

我试图用雅可比人用Newton Raphson方法解决方程式,但我一直在使用一个类型' double'错误。符号也已安装。我想知道我在这里是否正确使用F.对于F(1)和F(2),我是否必须单独使用雅可比行列式?这是脚本:

public partial class _default : System.Web.UI.Page

这是功能:

X=[0.75 0.25]; %N-dimensional array, first guess then solution
Y=[0 0];

F(1)=(X(1)^2)+(X(2)^2)-1; %right hand side functions
F(2)=X(1)+X(2)-1; %right hand side functions

MAXIT=10;
ITEST=1;
counter=0;
ABSER=0.00001;
RELER=.1;

DFDX=jacobian(F,X);

[X,ITEST,counter] =NLNR(X,F,MAXIT,counter,ABSER,RELER,ITEST,DFDX);


fprintf('answer for X1 is %d  and X2 is %d and ITEST is %d.\n',X(1),X(2),ITEST);
fprintf('number of interations is %d.\n',counter);

2 个答案:

答案 0 :(得分:3)

看起来您可以轻松转换错误使用符号jacobian函数以使用符号数学:

X = [0.75 0.25];   
x = sym('x',[1 2]);
F = [x(1)^2+x(2)^2-1;
     x(1)+x(2)-1];

DFDX = jacobian(F,x)
DFDX_sub = subs(DFDX,x,X)

返回

DFDX =

[ 2*x1, 2*x2]
[    1,    1]


DFDX_sub =

[ 3/2, 1/2]
[   1,   1]

然后,您可以使用doubleDFDX_sub转换为浮点数组。请注意,jacobian的第一个参数也可以是返回向量的函数的句柄(而不是符号函数或表达式):

X = [0.75 0.25];   
x = sym('x',[1 2]);
F = @(x)[x(1)^2+x(2)^2-1;
         x(1)+x(2)-1];

DFDX = jacobian(F,x)
DFDX_sub = subs(DFDX,x,X)

答案 1 :(得分:1)

您的matlab安装中没有名为jacobian的函数。如果您阅读文档,您会注意到具有该名称的两个函数都是工具箱的一部分:

http://www.mathworks.com/help/symbolic/jacobian.html http://www.mathworks.com/help/mbc/mbccommandline/jacobian.html

可能您没有安装或许可这些工具箱。

最佳解决方案可能是在matlab文件交换中搜索符合您要求的实现。