我知道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
答案 0 :(得分:2)
首先,语义可能不是你的意思。它是
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
我已经更改了输出变量的名称(从myDet
到d
),因为一般来说调用函数的输出作为给出过程的名称并不好。在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”,以便您没有相同名称的方法和变量。这可能会变得毛茸茸。