Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 雅可比函数返回误差“;未定义函数';雅可比矩阵&x27;对于类型为';双倍'&引用;_Matlab - Fatal编程技术网

Matlab 雅可比函数返回误差“;未定义函数';雅可比矩阵&x27;对于类型为';双倍'&引用;

Matlab 雅可比函数返回误差“;未定义函数';雅可比矩阵&x27;对于类型为';双倍'&引用;,matlab,Matlab,我试图用雅可比矩阵来解一个方程,用牛顿-拉斐逊法,但我一直得到一个“双重”误差。还安装了Symbolic。我想知道我在这里使用F是否正确。对于F(1)和F(2),我必须分别使用雅可比矩阵吗?以下是脚本: 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; %rig

我试图用雅可比矩阵来解一个方程,用牛顿-拉斐逊法,但我一直得到一个“双重”误差。还安装了Symbolic。我想知道我在这里使用F是否正确。对于F(1)和F(2),我必须分别使用雅可比矩阵吗?以下是脚本:

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);
这就是功能:

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

while ITEST==1  %run loop as long as ITEST is 1
    counter=counter+1;  %use counter to keep track of iterations


    dX=DFDX/(-F);

    X=X+dX;


        if abs(Y(1)-X(1))<ABSER %check convergence
            ITEST=3;
        end

        if abs((Y(1)-X(1))/X(1))<RELER %check convergence
            ITEST=3;
        end

        if counter>MAXIT %check divergence
            ITEST=2;
        end

    Y(1)=X(1); %set Y to check diff in next loop
    Y(2)=X(2);        


end
函数[X,ITEST,counter]=NLNR(X,F,MAXIT,counter,ABSER,RELER,ITEST)
当ITEST==1%时,只要ITEST为1,就运行循环
计数器=计数器+1;%使用计数器跟踪迭代
dX=DFDX/(-F);
X=X+dX;

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

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


对于您来说,最好的解决方案可能是在matlab文件交换中搜索符合您需求的实现。

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

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


对于您来说,最好的解决方案可能是在matlab文件交换中搜索符合您要求的实现。

看起来您可以很容易地将不正确使用的符号雅可比函数转换为使用符号数学:

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]
然后可以使用
double
DFDX\u sub
转换为浮点数组。请注意,
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]
然后可以使用
double
DFDX\u sub
转换为浮点数组。请注意,
jacobian
的第一个参数也可以是返回向量的函数的句柄(与符号函数或表达式相反):


我怀疑您设法命名了一个变量
jacobian
。检查您是否未执行此操作,运行
清除
并重试again@Amir,请不要在这个问题中标记雅可比矩阵。。。看在上帝的份上,我恐怕函数
jacobian
需要一个变量,我怀疑你设法命名了一个变量
jacobian
。检查您是否未执行此操作,运行
清除
并重试again@Amir,请不要在这个问题中标记雅可比矩阵。。。看在上帝的份上,我恐怕雅可比函数需要一个符号。我不认为这是问题所在,我正在使用一台学校电脑,上面说我安装了符号数学工具箱版本6.1(R2014b)@user2606257:好的,当符号工具箱存在时,我没有想到会出现错误消息。您有一个函数
jacobian
,但它需要类型为
sym
的输入参数,而不是
double
。它解析地解决了这个问题,我不知道如何适应你的情况。我不认为这是问题所在,我正在使用一台学校计算机,它说我安装了符号:符号数学工具箱版本6.1(R2014b)@user2606257:好的,我没想到当符号工具箱存在时会出现错误消息。您有一个函数
jacobian
,但它需要类型为
sym
的输入参数,而不是
double
。它解析地解决了这个问题,我不知道如何使它适应你的情况。