Evaluar una funcion matematica
Hola amigos necesito que alguien me de alguna informacion de como hacer un codigo que me permita evaluar una funcion matematica para un valor de X ,Y dado. Donde puedo ademas encontrar el codigo para resolver el metodo de Rugge-Kutta de orden 4
emm con ke keriendo ek te hagan la tarea no? jeje
pues no te tengo el codigo ( hice ese programa el semestre pasado, pero formatie la PC sorry) pero te tengo una solucion.
primero pasa la exprecion a POSFIJA asi sera mas facil evaluarla. Posfijo es por ejemplo
A+B en posfijo es AB+
A+B*C en posfijo es ABC*+
A*B+C es AB*C+
como puedeas darte cuenta hay prioridades de exponente ( no recuerdo si es el mas alto) a MULT y DIV ke son de igual prioridad y a SUM y RES los mas bajos. si no te kedo claro buscalo POSFIJO en google
el pusto es pasalo a posfijo y luego pues hechale coco un ratillo e inventate un programa.
tienes suerte un amigo se acaba de conectar y el si tiene la de evaluar ( TE ACLARO KE EVALUA SOBRE UNA EXPRECION POSFIJA)
void MAIN()
{
t=evaluar();
}
float evaluar()
{
float mat_num[20];
char mat_tex[20];
int sal=0,q,rr,salte,ww;
float M=0,var1,var2;
// char cop_1[20],cop_2[20];
for(int ert=0;ert<20;ert++)
{
mat_num[ert]=0;
mat_tex[ert]=' ';
}
mat_tex[19]=' ';
for(ww=0;posfija[ww]!=' ';ww++)
{
if(posfija[ww]=='a' || posfija[ww]=='b' || posfija[ww]=='c' || posfija[ww]=='d' || posfija[ww]=='e')
{
switch(posfija[ww])
{
case 'a' : mat_num[ww]=a;mat_tex[ww]=' ';break;
case 'b' : mat_num[ww]=b;mat_tex[ww]=' ';break;
case 'c' : mat_num[ww]=c;mat_tex[ww]=' ';break;
case 'd' : mat_num[ww]=d;mat_tex[ww]=' ';break;
case 'e' : mat_num[ww]=e;mat_tex[ww]=' ';break;
}
}
else
{
mat_num[ww]=0;mat_tex[ww]=posfija[ww];
}
}
for(ww=0;posfija[ww]!=' ';ww++)
{}
rr=ww;
while(sal!=1)
{
salte=0;
q=0;
if(mat_tex[q]=='+' || mat_tex[q]=='-' || mat_tex[q]=='*' || mat_tex[q]=='/' || mat_tex[q]=='^')
salte=1;
while(salte!=1)
{
q++;
if(mat_tex[q]=='+' || mat_tex[q]=='-' || mat_tex[q]=='*' || mat_tex[q]=='/' || mat_tex[q]=='^' || q==rr)
salte=1;
if(q==rr)
sal=1;
}
if(sal!=1)
{
var1=mat_num[q-2];
var2=mat_num[q-1];
switch(mat_tex[q])
{
case '+' : M=var1+var2;break;
case '-' : M=var1-var2;break;
case '*' : M=var1*var2;break;
case '/' : M=var1/var2;break;
case '^' : M=pow(var1,var2);break;
}
int qq;
qq=q-2;
mat_num[qq]=M;
qq++;
q++;
for(;q<rr;q++,qq++)
{
mat_num[qq]=mat_num[q];
mat_tex[qq]=mat_tex[q];
}
rr=rr-2;
}
}
return M;
}
pues no te tengo el codigo ( hice ese programa el semestre pasado, pero formatie la PC sorry) pero te tengo una solucion.
primero pasa la exprecion a POSFIJA asi sera mas facil evaluarla. Posfijo es por ejemplo
A+B en posfijo es AB+
A+B*C en posfijo es ABC*+
A*B+C es AB*C+
como puedeas darte cuenta hay prioridades de exponente ( no recuerdo si es el mas alto) a MULT y DIV ke son de igual prioridad y a SUM y RES los mas bajos. si no te kedo claro buscalo POSFIJO en google
el pusto es pasalo a posfijo y luego pues hechale coco un ratillo e inventate un programa.
tienes suerte un amigo se acaba de conectar y el si tiene la de evaluar ( TE ACLARO KE EVALUA SOBRE UNA EXPRECION POSFIJA)
void MAIN()
{
t=evaluar();
}
float evaluar()
{
float mat_num[20];
char mat_tex[20];
int sal=0,q,rr,salte,ww;
float M=0,var1,var2;
// char cop_1[20],cop_2[20];
for(int ert=0;ert<20;ert++)
{
mat_num[ert]=0;
mat_tex[ert]=' ';
}
mat_tex[19]=' ';
for(ww=0;posfija[ww]!=' ';ww++)
{
if(posfija[ww]=='a' || posfija[ww]=='b' || posfija[ww]=='c' || posfija[ww]=='d' || posfija[ww]=='e')
{
switch(posfija[ww])
{
case 'a' : mat_num[ww]=a;mat_tex[ww]=' ';break;
case 'b' : mat_num[ww]=b;mat_tex[ww]=' ';break;
case 'c' : mat_num[ww]=c;mat_tex[ww]=' ';break;
case 'd' : mat_num[ww]=d;mat_tex[ww]=' ';break;
case 'e' : mat_num[ww]=e;mat_tex[ww]=' ';break;
}
}
else
{
mat_num[ww]=0;mat_tex[ww]=posfija[ww];
}
}
for(ww=0;posfija[ww]!=' ';ww++)
{}
rr=ww;
while(sal!=1)
{
salte=0;
q=0;
if(mat_tex[q]=='+' || mat_tex[q]=='-' || mat_tex[q]=='*' || mat_tex[q]=='/' || mat_tex[q]=='^')
salte=1;
while(salte!=1)
{
q++;
if(mat_tex[q]=='+' || mat_tex[q]=='-' || mat_tex[q]=='*' || mat_tex[q]=='/' || mat_tex[q]=='^' || q==rr)
salte=1;
if(q==rr)
sal=1;
}
if(sal!=1)
{
var1=mat_num[q-2];
var2=mat_num[q-1];
switch(mat_tex[q])
{
case '+' : M=var1+var2;break;
case '-' : M=var1-var2;break;
case '*' : M=var1*var2;break;
case '/' : M=var1/var2;break;
case '^' : M=pow(var1,var2);break;
}
int qq;
qq=q-2;
mat_num[qq]=M;
qq++;
q++;
for(;q<rr;q++,qq++)
{
mat_num[qq]=mat_num[q];
mat_tex[qq]=mat_tex[q];
}
rr=rr-2;
}
}
return M;
}
