我试图用雅可比人用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);
端
答案 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]
然后,您可以使用double
将DFDX_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文件交换中搜索符合您要求的实现。