2015-07-09 2 views
0

Я хочу решить det(A)=0 для большой матрицы A с каждым элементом функция w.Как использовать fsolve() с det()

Одним из способов решения этой (простая) проблемы используют символический подход, например:

A = sym('[w, 1; 2, 4*w^2 + 2]'); 
answer = solve(det(A),'w'); 

Однако, я хочу решить гораздо большую проблему, при которой уравнении каждого элемента определяются как функция ручка (например, A4 = @(w) 4*w^2 + 2;) и может потребоваться решить численно с помощью fsolve().

Проблема заключается в том, что я не могу сразу поставить функцию ручки в матрице A - они должны быть помещены в массив ячеек, но тогда solve(det(A)) несовместима с сотовыми массивов и возвращает "Undefined function 'det' for input arguments of type 'cell'."

Как решить проблему ?

ответ

3

Я попытался выполнить следующий подход, используя минимальный пример.

% Defining all functions as cells: 
f{1,1} = @(w)w; 
f{1,2} = @(w)1; 
f{2,1} = @(w)2; 
f{2,2} = @(w)4*w.^2+2; 

% Function to solve 
fsol = @(w)det(cellfun(@(x)x(w),f)); 

% Using fsolve 
fsolve(fsol,0) 

В результате

0.5898 

которая равна (реального) решения с использованием символической математики.

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