Create Blockdiagonal using Cell Array with entries being Function handles

4 vues (au cours des 30 derniers jours)
I'm trying to build a Blockdiagonal Matrix A out of a cell array with its entries being function handles. Thus A consists of the identity on each diagonal block with values scaled by the function lambda, which is a function of s, while the x is a known vector - I use it as input to the function.
How can I create the blockdiagonal matrix A out of the 4x1 cell array I have with function handles?
-Using cell2mat() prompts the error: Nonscalar arrays of function handles are not allowed; use cell arrays instead.
- Using blkdiag() does not change anything.
I need a matrix because I will do further multiplication with other 4x4 matrices while the variable s has to be preserved for optimization purposes.
Help is much appreciated, thanks :)
%vector x
x1 = x(1);
x2 = x(2);
%cell array lambda
lambda1 = cell(4,1);
lambda1{1} = @(s)((x1 + 1)^s + (x1-1)^s) / ((x1 + 1)^s - (x1-1)^s);
lambda1{2} = lambda1{1};
lambda1{3} = @(s)((x2 + 1)^s + (x2-1)^s) / ((x2 + 1)^s - (x2-1)^s);
lambda1{4} = lambda1{3};
%..matrix A = blkdiag(lambda1)..?

Réponse acceptée

Oliver
Oliver le 3 Déc 2022
primitive but works:
@(s)[((x1 + 1)^s + (x1-1)^s) / ((x1 + 1)^s - (x1-1)^s), 0, 0, 0;
0, ((x1 + 1)^s + (x1-1)^s) / ((x1 + 1)^s - (x1-1)^s), 0, 0;
0, 0,((x2 + 1)^s + (x2-1)^s) / ((x2 + 1)^s - (x2-1)^s), 0;
0, 0, 0, ((x2 + 1)^s + (x2-1)^s) / ((x2 + 1)^s - (x2-1)^s)];

Plus de réponses (0)

Catégories

En savoir plus sur Creating, Deleting, and Querying Graphics Objects dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by