Quiero tomar una ecuación de EDO y aislar el término y''
.
por ejemplo, -3xy' -y'' - bcos(t) = asin(t)
convierte en y'' = -3xy' - bcos(t) - asin(t)
.
Por ejemplo: 4y - 3y' = -y''
sería y'' = -4y + 3y'
Reglas: El orden más alto debe ser y''
y no habrá una constante delante del término y''
por lo que no se requiere división.
Básicamente, lo que quiero hacer es agregar signos ‘+’ donde sea necesario y luego recorrer la cadena y cada vez que encuentre un ‘+’ en el lado equivocado del signo igual Pon un ‘-‘ en el otro lado y me muevo todos los caracteres están entre él y el siguiente + o – justo después de eso.
example: "-2+y'=3x" turns into "-2+y'=+3x" and then I take that and make it to "2+y'=+3x+" and finally "+y'=+3x+2"
Aquí está mi bash hasta ahora, aunque no pasa nada:
#include #include int main() { FILE *fin; fin = fopen("diffeq.txt", "r"); char line[300]; char from[300]; char to[300]; while (fgets(line, sizeof(line), fin)) { for (int i = 0; i < strlen(line); i++) { if (from[i] == '=' && from[i + 2] != '-') to[i] = '='; i++; to[i] = '+'; i++; printf("%s\n", line); } } fclose(fin); }
La forma en que puede hacerlo es tokenizar por sus términos tanto en tamaño de mano izquierda como en lado derecho.
lhs
y rhs
P.ej:
lhs = ["-3x","+2","-y"] rhs = ["+4y","-5"]
Ahora cree 2 matrices de cadenas nuevas para almacenar los lhs y rhs reorganizados. Llamémoslos new_lhs
y new_rhs
.
Iterar a través de lhs
y rhs
y colocar todos non-y
términos non-y
en new_lhs
y todos los términos y
en new_rhs
.
Simplifica los términos.
Unir ambos new_lhs
y new_rhs
en una nueva cadena.
EDITAR: Puede hacer que esta variable sea agnostic
envolviéndola en una función y pasando la variable que desea resolver.
Por ejemplo:
char* solve_for_variable(char* variable, char* equation);