Jonhoo Skrevet 14. mars 2007 Del Skrevet 14. mars 2007 (endret) Heisann folkens =) Jeg holder på å utvikle et program som skal være til hjelp for alle som tar matte, fysikk og/eller kjemi på videregående, og i den sammenhengen trenger jeg en likningsløser som kan løse likninger uansett hvordan de er satt opp: ie. Den kan løse både x^2-3x+2 = 0 og x^2=3x-2 Problemet er at en maskin ikke kan tenke på samme måten som oss, så den kan ikke bare "flytte" ting fra en side til en annen, eller løse ut pareneteser.. Dette gjør ting litt vanskelig for meg Jeg har funnet ut at man kan løse enhver linjær likning (ikke noe opphøyd i) ved å bytte ut likhetstegnet med et minustegn, og så bytte ut x med det komplekse tallet i (= sqr(-1) ). Man tar så negativen til realdelen til svaret man får og deler på den imaginære delen. 3x - 2 + 2x = 10x - (x/5)3i - 2 + 2i - (10i - (i/5)) 5i - 2 - 10i + (i/5) -5i - 2 + (i/5) (-24/5)i - 2 x = -(-2) / (-24/5) x = (2*5)/-24 x = -(10/24) = -(5/12) Hvis du prøver å løse den på den "vanlige" metoden vil du se at svarene er like Denne metoden kalles "Newtons metode", og fungerer med en hver likning.. Spørsmålet mitt blir så, kjenner noen til en måte dette kan gjøres på for annen/tredjegradslikninger? Eller noen har noen idé til hvordan slikt kan løses når man ikke kan flytte rundt på ting.. Jeg vet at denne posten kanskje ikke passer under Skole/leksehjelp, men er ikke noen egen mattedel her ^^ Håper på hjelp, Jon Endret 14. mars 2007 av Jonhoo Lenke til kommentar
svamp Skrevet 15. mars 2007 Del Skrevet 15. mars 2007 Vet ikke hvilket språk du bruker, men her er litt kode jeg har brukt på skolen, C++. Funksjonen andregrad() løser andregradslikninger. Du kan ikke skrive inn likningen selv, men oppgir konstantene a, b og c. Vet ikke hvordan dette blir seende ut postet på forumet, men orker ikke formatere det ... void andregrad() { double dblA; //Inndata double dblB; double dblC; double dblM1; //Utrekning/utdata double dblM2; double dblM3; double dblM4; cout << "Andregradslikning: aX^2 + bX + C\n"; cout << "Hugs aa oppgi alle tal numerisk. A kan ikkje vere 0.\n\n"; do { cout << "Oppgi A: "; cin >> dblA; } while(inntest() || dblA == 0); //Kan ikkje dele på 0 do { cout << "Oppgi B: "; cin >> dblB; } while(inntest()); //Gjennomfør heilt til inntest == false do { cout << "Oppgi C: "; cin >> dblC; } while(inntest()); dblM1 = pow(dblB, 2) - (4 * dblA * dblC); //Reknar ut talet under rotteiknet if(dblM1 < 0) //Talet negativt? { cout << "\nTalet " << dblM1 << " under rotteiknet er negativt.\n"; cout << "Likninga har komplekse loysingar:\n"; dblM3 = (-dblB) / (2 * dblA); dblM4 = sqrt(abs(dblM1)) / (2 * dblA); //Tar absoluttverdien av det negative talet for å kunne finne rota cout << "Loysing 1: " << dblM3 << " + " << dblM4 << "i\n"; cout << "Loysing 2: " << dblM3 << " - " << dblM4 << "i\n"; } else if(dblM1 == 0) //Talet lik 0? { dblM2 = -dblB / (2 * dblA); cout << "Loysinga er " << dblM2 << ".\n"; } else if(dblM1 > 0 || dblM1 != 0) //Talet positivt? { cout << "Talet under rotteiknet er " << dblM1 << ".\n"; dblM3 = (-dblB + sqrt(dblM1)) / (2 * dblA); cout << "Loysing 1: " << dblM3 << endl; dblM4 = (-dblB - sqrt(dblM1)) / (2 * dblA); cout << "Loysing 2: " << dblM4 << endl; } } Lenke til kommentar
Jonhoo Skrevet 15. mars 2007 Forfatter Del Skrevet 15. mars 2007 Men det å løse likninger hvor du vet a, b og c er ikke noe problem.. Problemet kommer når man har en likning hvor alt står hulter til bulter, og man må forenkle det for å kunne finne svaret. Jeg tenker på en tilsvarende løsning som denne her, men den er dessverre ikke open source..: http://www.algebra.com/algebra/homework/eq...equation.solver Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå