Solve is not returnig solution - matlab
Mostrar comentarios más antiguos
Hi,
I'm trying to find the vector x=[x1 ; x2 ; x3 ; x4 ; x5] by solving:
Valorantigo(1,1)=3441/(1-0.00302+x1) + 3441/(1-0.00261+x1)^2 + 301720.5/(1-0.00208+x1)^3
Valorantigo(2,1)=68750/(1-0.00302+x2) + 1068750/(1-0.00261+x2)^2 + 0/(1-0.00208+x2)^3
Valorantigo(3,1)=170040/(1-0.00302+x3) + 13085020/(1-0.00261+x3)^2 + 0/(1-0.00208+x3)^3
Valorantigo(4,1)=229350/(1-0.00302+x4) + 229350/(1-0.00261+x4)^2 + 5729350/(1-0.00208+x4)^3
Valorantigo(5,1)=34194000/(1-0.00302+x5) + 0/(1-0.00261+x5)^2 + 0/(1-0.00208+x5)^3
My code is:
A=[99.23;100.05;91;107.71;104.1];
B=[3441 3441 301720.5;68750 1068750 0;170040 13085020 0;229350 229350 5729350;34194000 0 0];
N=[300000;1000000;13000000;5500000;32800000];
E=[-0.00302;-0.00261;-0.00208];
[c3,r3]=size(A);
[c4,r4]=size(B);
Valorantigo(1:c3,1)=A(1:c3,1).* N(1:c3,1) ./100;
x=sym ('x',[1 c3]);
x=transpose(x);
for i=1:c3
Valor(i,1)=symfun(0,x);
for j=1:r4
Valor(i,1)=symfun((Valor(i,1)/(1+E(j,1)+x(i,1))^j)+((B(i,j)/((1+E(j,1)+x(i,1))^j))),x);
end
end
eqn=Valor(1:c3,1)==Valorantigo(1:c3,1);
[x1,x2,x3,x4, x5, param, cond] = solve(eqn, x, 'ReturnConditions', true);
But the solve don't return any value, can you understand why?
1 comentario
Jan
el 19 de Jul. de 2017
The more threads you open for a specific question, the higher is the level of confusion for the ones, who want to assist you.
Respuestas (1)
Torsten
el 17 de Jul. de 2017
function main
x0=ones(5,1);
sol=fsolve(@myfun,x0)
function F=myfun(x)
A=[99.23;100.05;91;107.71;104.1];
B=[3441 3441 301720.5;68750 1068750 0;170040 13085020 0;229350 229350 5729350;34194000 0 0];
N=[300000;1000000;13000000;5500000;32800000];
E=[-0.00302;-0.00261;-0.00208];
[c3,r3]=size(A);
[c4,r4]=size(B);
Valorantigo(1:c3)=A(1:c3).*N(1:c3)./100;
for i=1:c3
Valor(i)=0.0;
for j=1:r4
Valor(i)=Valor(i)+B(i,j)/(1+E(j)+x(i)^j);
end
F(i)=Valor(i)-Valorantigo(i);
end
Note that your 5th equation does not have a zero - so you will have to exclude it from the above calculation.
Best wishes
Torsten.
6 comentarios
Mariana Ferreira
el 17 de Jul. de 2017
John D'Errico
el 17 de Jul. de 2017
Editada: John D'Errico
el 17 de Jul. de 2017
Valorantigo(5,1)=34194000/(1-0.00302+x5) + 0/(1-0.00261+x5)^2 + 0/(1-0.00208+x5)^3
But see that TWO of the terms are zero ALWAYS. They are 0/stuff. So the 5th equation reduces to trying to solve for x5, such that
34194000/(1-0.00302+x5) == 0
Under what circumstances with that EVER be zero? NONE. There is no real or complex value for x5 that makes the left hand side zero.
Mariana Ferreira
el 17 de Jul. de 2017
Torsten
el 18 de Jul. de 2017
You are right.
Best wishes
Torsten.
Mariana Ferreira
el 18 de Jul. de 2017
If you insert the above values in the first and second equation, you will see that they don't solve them.
But - as Jan pointed out - there is an error in the code: a parenthesis is set incorrectly.
Use
Valor(i)=Valor(i)+B(i,j)/(1+E(j)+x(i))^j;
instead of
Valor(i)=Valor(i)+B(i,j)/(1+E(j)+x(i)^j);
Best wishes
Torsten.
Categorías
Más información sobre Mathematics en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!