Hello all,
Here is my code and it is running more than 2 days. Z1, Z2, A, B, D and E are known 1 X 1.000.000 vector and C and F are constant values 1X1. I am trying to estimate X and Y but the program is still working. Is there any chance to find when will it finish with these matrices? Any help will be great. Thanx all.
syms X Y
Z1=X.*A-Y.*B*C;
Z2=X.*D-Y.*E*F;
[A,B]=equationsToMatrix([Z1,Z2], [X,Y]);
X = linsolve(A,B);

 Réponse acceptée

Stephan
Stephan le 23 Juin 2019

2 votes

Get rid of symbolic calculation - this makes code very slow and solve numeric:
clear X Y
% This works if your values are of size 1 x 1.000.000
X = linsolve([A', (-B.*C)'; D.' (-E.*F)'],[Z1'; Z2'])

5 commentaires

Fikret Dogru
Fikret Dogru le 27 Juin 2019
Thanks for your help but I got an error. "Requested 2317620x1158810 (10004.9GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long time and cause MATLAB to become unresponsive. See array size limit or preference panel for more information." Do you have any idea to solve this?
Torsten
Torsten le 27 Juin 2019
Modifié(e) : Torsten le 27 Juin 2019
Y = (Z1.*D - Z2.*A) ./ (A.*E*F - B.*D*C);
X = (Z1.*E*F - Z2.*B*C) ./ (A.*E*F - B.*D*C);
if the denominator is different from zero.
Fikret Dogru
Fikret Dogru le 27 Juin 2019
Thanks Stephan,
it helped but which method is this? It is the first time I have seen solving problem like that.
Fikret
Stephan
Stephan le 27 Juin 2019
Modifié(e) : Stephan le 27 Juin 2019
You should thank Torsten - but here is an explaination of what he did:
syms X Y A B C D E F Z1 Z2
eq(1) = Z1==X.*A-Y.*B*C;
eq(2) = Z2==X.*D-Y.*E*F;
sol = solve(eq,[X,Y]);
sol.X
sol.Y
Torsten
Torsten le 27 Juin 2019
@ Fikret Dogru:
The method is called "Cramer's rule".

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by