Matrix 我不明白为什么Scilab会给我“语法错误,出乎意料

Matrix 我不明白为什么Scilab会给我“语法错误,出乎意料,matrix,scilab,Matrix,Scilab,好的,我得到了多变量的牛顿方法代码,我把它修改成4个变量的函数,而不是2个,但是我一直得到错误 语法错误,意外 参考第9行,这是函数F上方程偏导数的雅可比矩阵。每一行是另一列,每一行;这是另一条线 clear;clc function z=F(p1,p2,p3,p4) z(1)=0.3*(500-p1)^0.5-0.2*(p1-p2)^0.5+0.2*(p1-p3)^0.5 z(2)=0.2*(p1-p2)^0.5-0.1*(p2-p4)^0.5+0.2*(p2-p3)^0.5

好的,我得到了多变量的牛顿方法代码,我把它修改成4个变量的函数,而不是2个,但是我一直得到错误

语法错误,意外

参考第9行,这是函数F上方程偏导数的雅可比矩阵。每一行是另一列,每一行;这是另一条线

clear;clc
function z=F(p1,p2,p3,p4) 
    z(1)=0.3*(500-p1)^0.5-0.2*(p1-p2)^0.5+0.2*(p1-p3)^0.5
    z(2)=0.2*(p1-p2)^0.5-0.1*(p2-p4)^0.5+0.2*(p2-p3)^0.5
    z(3)=0.1*(p1-p3)^0.5-0.2*(p3-p2)^0.5+0.1*(p3-p4)^0.5
    z(4)=0.1*(p2-p4)^0.5+0.1*(p3-p4)^0.5-0.2*(p4)^0.5
endfunction
function z=J(p1,p2,p3,p4) //Jacobiano
    z=[-0.3/(2*sqrt(500-p1))-0.2/(2*sqrt(p1-p2))+0.2/(2*sqrt(p1-p3)) 0.2/(2*sqrt(p1-p2)) -0.2/(2*sqrt(p1-p3)) 0;0.2/(2*sqrt(p1-p2)) -0.2/(2*sqrt(p1-p2))-0.1/(2*sqrt(p2-p4))+0.2/(2*sqrt(p2-p3) -0.2/(2*sqrt(p2-p3)) -0.1/(2*sqrt(p2-p4));0.1/(2*sqrt(p1-p3)) 0.2/(2*sqrt(p3-p2)) -0.1/(2*sqrt(p1-p3))-0.2/(2*sqrt(p3-p2))+0.1(2*sqrt(p3-p4)) -0.1/(2*sqrt(p3-p4));0 0.1/(2*sqrt(p2-p4)) 0.1/(2*sqrt(p3-p4)) -0.1/(2*sqrt(p2-p4))-0.1/(2*sqrt(p3-p4))-0.2/(2*sqrt(p4))]
endfunction
代码并没有到此结束,但错误肯定是我在4x4雅可比矩阵或函数本身中使用的格式,我只是不明白为什么是错误的


感谢您的帮助。

您忘记关闭第9行第191列中的括号,也忘记了第319列中的运算符

如果要创建一个矩阵,其中的元素是运算的结果,最好使用逗号而不是空格来分隔它们。你也应该使用。。。在多行中打断矩阵定义以提高可读性。如果您的雅可比函数是这样编写的,那么调试起来就容易多了:

function z=J(p1,p2,p3,p4) //Jacobiano
    z=[-0.3/(2*sqrt(500-p1))-0.2/(2*sqrt(p1-p2))+0.2/(2*sqrt(p1-p3)),...
        0.2/(2*sqrt(p1-p2)),...
       -0.2/(2*sqrt(p1-p3)),...
        0;...
        ...
        0.2/(2*sqrt(p1-p2)),...
       -0.2/(2*sqrt(p1-p2))-0.1/(2*sqrt(p2-p4))+0.2/(2*sqrt(p2-p3),...
       -0.2/(2*sqrt(p2-p3)),...
       -0.1/(2*sqrt(p2-p4));...
        ...
        0.1/(2*sqrt(p1-p3)),...
        0.2/(2*sqrt(p3-p2)),...
       -0.1/(2*sqrt(p1-p3))-0.2/(2*sqrt(p3-p2))+0.1(2*sqrt(p3-p4)),...
       -0.1/(2*sqrt(p3-p4));...
        ...
        0,...
        0.1/(2*sqrt(p2-p4)),...
        0.1/(2*sqrt(p3-p4)),...
       -0.1/(2*sqrt(p2-p4))-0.1/(2*sqrt(p3-p4))-0.2/(2*sqrt(p4))]
endfunction
在这种风格中,您的错误很容易被发现:注意第8行中的缺失,以及第14行中的缺失/缺失