Azzera filtri
Azzera filtri

fsolve with multidimensional array and x0

5 visualizzazioni (ultimi 30 giorni)
Hello, everyone.
Here is a question. I've tried to solve some nonlinear equations (not simultaneous equations) of multi-dimensional array form by R2012a fsolve and then seen error message.
the following is the simplified code for this question.
x0=ones(3,2,2)
b(:,:,1)=[2 3;4 6;1 9];b(:,:,2)=2.*[2 3;4 6;1 9];
f=@(x)x.^3+b.*x+8
fsolve(f,x0)
and the error messages are...
Error using .* Matrix dimensions must agree.
Error in @(x)x.^3+b.*x+8
Error in C:\Program Files\MATLAB\R2012a\toolbox\shared\optimlib\finDiffEvalAndChkErr.p>finDiffEvalAndChkErr (line 26)
Error in C:\Program Files\MATLAB\R2012a\toolbox\shared\optimlib\finitedifferences.p>finitedifferences (line 128)
Error in trustnleqn (line 97) [JACfindiff,~,~,numFDfevals] = finitedifferences(x,funfcn{3},[],[],[],Fvec,[],[], ...
Error in fsolve (line 397) [x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=...
plz, let me know where the problems are.
best regards
S. R. Huh

Risposta accettata

Sargondjani
Sargondjani il 15 Giu 2012
if you want to stick more to your orginal formulation: the problem is that your x0 has to be a vector, not an array, so you will have to reshape both x (and b). also f has to return a vector. so: x1=reshape(x,[],1) and the same with b, and the resulting f will also be vector
  1 Commento
Sargondjani
Sargondjani il 18 Giu 2012
I guess you are working together with jinny zhou, but i should have mentioned that you should set the 'JacobPattern' to speye(length(x)). because all equations are independent, you should tell matlab that it doesn not need to estimate the full jacobian matrix

Accedi per commentare.

Più risposte (1)

Andrei Bobrov
Andrei Bobrov il 14 Giu 2012
for your case: EDIT
b(:,:,1)=[2 3;4 6;1 9];b(:,:,2)=2.*[2 3;4 6;1 9];
a = [1 0 0 8];
b1 = zeros(numel(b(:)),numel(a));
b1(:,3) = b(:);
c = bsxfun(@plus,a,b1);
rt = cell2mat(arrayfun(@(x)roots(c(x,:)),(1:numel(b))','un',0));
out = reshape(rt,[numel(a)-1,1,size(b)]);

Community Treasure Hunt

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

Start Hunting!

Translated by