如何创建自定义函数来查找3x3矩阵的行列式

时间:2014-03-17 20:14:01

标签: matlab function matrix

我知道det(A)在matlab中。

我想做一个带矩阵A(3x3)并返回行列式的函数。 我知道这是愚蠢的,但它是理解功能的。

我的尝试:

function [myDet] = myDet(a)
  myDet = a(1,1) * (a(2,2) * a(3,3) - a(3,2) * a(2,3))
        - a(1,2) * (a(2,1) * a(3,3) - a(3,1) * a(2,3))
        + a(1,3) * (a(2,1) * a(3,2) - a(3,1) * a(2,2))
endfunction

3 个答案:

答案 0 :(得分:2)

使用GNU / Octave ...

首先,语义可能不是你的意思。它是

function [ <output> ] = <function_identifier> ( <input> )

因此

function [ d ] = myDet ( A )

然后,显然多行语句无法作为单个指令进行求值。我这样解决了

function [ d ] = myDet ( A )

    ## If A is a 3x3 matrix, compute the determinant as follows ... 
    if size(A) == [3,3]
        d = A(1,1) * (A(2,2) * A(3,3) - A(3,2) * A(2,3)) + \
            - A(1,2) * (A(2,1) * A(3,3) - A(3,1) * A(2,3)) + \
            + A(1,3) * (A(2,1) * A(3,2) - A(3,1) * A(2,2));
    ## ... else, use the default function ...
    else
        d = det(A)
    endif
end

注意

我已经更改了输出变量的名称(从myDetd),因为一般来说调用函数的输出作为给出过程的名称并不好。在Octave(ehm ... Matlab)中,这听起来没有任何后果,但提醒一些编程语言,你可以通过它们的标识符直接处理函数(例如,我想到了Javascript)。

答案 1 :(得分:0)

尝试

function [y] = myDet(A)
      y = A(1,1) * (A(2,2) * A(3,3) - A(3,2) * A(2,3)) \
        - A(1,2) * (A(2,1) * A(3,3) - A(3,1) * A(2,3)) \
        + A(1,3) * (A(2,1) * A(3,2) - A(3,1) * A(2,2));
end

答案 2 :(得分:0)

我手边没有MATLAB,但我认为你需要'end function'中的空格。除此之外,它看起来不错。我做了一些错误检查,大小(a)= 3 3.(实际上,如果它在自己的文件中,你根本不需要'结束'。它是'结束',而不是'结束功能') 。返回值应该只是'myDet'

function out = myDet(a)
out = a(1,1) * (a(2,2) * a(3,3) - a(3,2) * a(2,3))
  - a(1,2) * (a(2,1) * a(3,3) - a(3,1) * a(2,3))
  + a(1,3) * (a(2,1) * a(3,2) - a(3,1) * a(2,2))
end

将输出变量更改为“out”,以便您没有相同名称的方法和变量。这可能会变得毛茸茸。