2016-07-18 2 views
-2

Когда я запускаю это расширение Лапласа в Matlab для детерминанта, я получаю «Неопределенная функция или переменная« A ». Я буду рад, если кто-нибудь поможет мне исправить это и сделать его работоспособным.Matlab: Расширение Лапласа

function value = Laplace 
    A=input('matrix A ='); 
    [rows, columns] = size(A); 
if rows == 2 
    for i = 1:rows 
    value = A(1,1)*A(2,2) - A(1,2)*A(2,1); 
    end 
else 
    if rows==3:size(A); 
    for i = 1:rows 
    columnIndices = [1:i-1 i+1:rows]; 
value = value + (-1)^(i+1)*A(1,i)*...*Laplace(A(2:rows, columnIndices)); 
    end 
end 

Благодаря

+1

Предоставьте сообщение об ошибке [mcve] и * full *. – excaza

+0

@excaza Я представил сообщение об ошибке. Также все коды Matlab для расширения Laplace, которые я получил в Интернете, не работают. Я могу создать работоспособный код для порядка 2,3 и 4, но я не мог бы обобщить его для более высокого измерения. Спасибо – babs

+0

@beaker спасибо Я не буду этого делать – babs

ответ

0

Вот один из способов сделать код работоспособным:

function value = Laplace(A) 
if nargin < 1 
    n = input('Matrix dimention = '); 
    A = rand(n); 
end 
[rows, ~] = size(A); 
value = 0; 
if rows == 2 
    for i = 1:rows 
     value = A(1,1)*A(2,2) - A(1,2)*A(2,1); 
    end 
else 
    if rows >= 3 
     for i = 1:rows 
      columnIndices = [1:i-1 i+1:rows]; 
      value = value + (-1)^(i+1)*A(1,i)*Laplace(A(2:rows, columnIndices)); 
     end 
    end 
end 
end 

Это не означает, что он делает то, что он должен, я только исправлены все ошибки, которые мешают ему работая, угадывая, каково было первоначальное намерение.

+0

спасибо. Я должен сравнить его с методом Барисса и конденсацией Доджсона и показать, что он не подходит для более высокого измерения. – babs

+0

В чем смысл «если наргин <1». Сначала я подумал, что вы допустили ошибку для «margin», затем я обнаружил, что если я изменю ее на margin, я получу график для диаграммы Боде. Вы также пишете, что это не значит, что он делает то, что должен. Я смотрю, как я исправлю его для работы размером более двух. Кажется, что значение после еще неверно. – babs

+0

@babs 1. Я изменил код, чтобы он выполнялся для size> 3 => 'if rows> = 3'. Тем не менее, я не знаю всех этих методов, о которых вы писали, вы должны проверить, что он делает то, что должен. 2. 'nargin' - это переменная, которая содержит количество входов функции, когда она была вызвана, поэтому, если вы вызываете ее без ввода, например' Laplace', она будет запрашивать размер матрицы, но когда вы ее вызываете изнутри функции (рекурсивно) 'Laplace (A (2: rows, columnsIndices))", тогда она пропускает первую часть. – EBH

Смежные вопросы