Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 18. 11. 2013 15:45 — Editoval vasek.t (18. 11. 2013 15:47)

vasek.t
Zelenáč
Příspěvky: 12
Reputace:   
 

Rovnice s intervalem pro řešení

Ahoj, řeším problém, kde má program počítat x z rovnice když zadám pravou stranu. X má být v intervalu <0.1>. A pravá strana se zadává ručně z intervalu <-117,679>. Nefunguje mi to pro -117. Nevíte prosím jak to udělat? výsledné x má být s přesností na 4 desetinná místa.

Code:

  Scanner sc = new Scanner(System.in);
        
        System.out.println("Program pro vypocet x z rovnice (x+3)^5 - 15*(x-2)^3 - 30*(x-4)^2 = pravaStrana");
        System.out.println("Zadejte pravou stranu rovnice z intervalu <-117,679>:");
        int pravaStrana = sc.nextInt();
        double x=0;
        double vysledneX = 0;
        
    for (double i=0.00001; i<1; i+=0.00001) 
    {
      if (Math.pow(x + 3, 5) - 15 * Math.pow(x - 2, 3) - 30 * Math.pow(x - 4, 2)<pravaStrana){
     
          x = i;}}
    
    vysledneX = x;
     System.out.println("---Vysledky---");
        System.out.println("Resenim rovnice");
        System.out.println("(x+3)^5 - 15*(x-2)^3 - 30*(x-4)^2 =" +pravaStrana);
        System.out.println("je:");
        System.out.printf(Locale.US, "%6.4f%n", vysledneX);
    }
    
}

Offline

 

#2 18. 11. 2013 17:05 — Editoval mák (18. 11. 2013 17:08)

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 920
Reputace:   63 
 

Re: Rovnice s intervalem pro řešení

Zdravím, Pascal je pro mě španělská vesnice, ale myslím, že má být tento řádek takto:

Code:

for (double i=0; i<1; i+=0.00001)

a nebo předefinování x:

Code:

double x=-0.00001;

Poznámka:
Nebyla by efektivnější Newtonova metoda?

Kód v maximě:

Code:

NajdiX(ps):=block([x:0,z:1],
    while is(abs(x-z)>1e-13) do (
        z: x,
        x: float(x-((x+3)^5-15*(x-2)^3-30*(x-4)^2-ps)/(5*(x+3)^4-60*(x-4)-45*(x-2)^2))
    ),x
);

Funkce NajdiX s parametrem ps - hodnota pravé strany rovnice,
opakuje dokud se výsledek neliší od skutečnosti o více jak 1e-13,
výsledek je vypočítaný maximálně na šestý pokus.


LibreOffice Verze: 25.8.4.2, Maxima 5.49.0 (SBCL)

Offline

 

#3 18. 11. 2013 17:12

vasek.t
Zelenáč
Příspěvky: 12
Reputace:   
 

Re: Rovnice s intervalem pro řešení

↑ mák: ted nejsem u počítače,ale dekuju za radu. je to kód pro javu,ne pascal. ale nejak to zkusim predelat pro javu

Offline

 

#4 18. 11. 2013 18:20

vasek.t
Zelenáč
Příspěvky: 12
Reputace:   
 

Re: Rovnice s intervalem pro řešení

↑ mák: prosímtě, jak to bude pro tu javu, s javou bojuju a o pascalu nevim vůbec nic :-/ díky moc

Offline

 

#5 18. 11. 2013 20:03

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 920
Reputace:   63 
 

Re: Rovnice s intervalem pro řešení

Já Javu vidím prvně teď, ale zkusím to předělat podle tvýho.

Code:

Scanner sc = new Scanner(System.in);
        
        System.out.println("Program pro vypocet x z rovnice (x+3)^5 - 15*(x-2)^3 - 30*(x-4)^2 = pravaStrana");
        System.out.println("Zadejte pravou stranu rovnice z intervalu <-117,679>:");
        int pravaStrana = sc.nextInt();
        double x=0;
        double vysledneX = 0;
 
    double ps = pravaStrana; /* funkce pow potřebuje parametry jako double, tady je to potřeba asi převést, neumím to */
    
    double z = 1;

    while (Math.abs(x-z) > 1e-13) 
    {  
        z = x;
           x = x-(Math.pow((x+3),5)-15*Math.pow((x-2),3)-30*Math.pow((x-4),2)-ps)/(5*Math.pow((x+3),4)-60*(x-4)-45*Math.pow((x-2),2));
    }

    /* Javu neumím, napsal jsem to podle tvýho kódu, jestli to bude chodit neručím, snad jsem udělal málo chyb :-) */       
   
        vysledneX = x;

         System.out.println("---Vysledky---");
        System.out.println("Resenim rovnice");
        System.out.println("(x+3)^5 - 15*(x-2)^3 - 30*(x-4)^2 =" +pravaStrana);
        System.out.println("je:");
        System.out.printf(Locale.US, "%6.4f%n", vysledneX);
    }
    
}

Funkce pow potřebuje parametry double, nevím jestli Java si to umí automaticky převést, nebo se to musí ručně.
Taky nevím, jestli se to Math. musí psát před pow, nebo ne.
1e-13 je vlastně 10^-13, taky nevím jestli v Javě je to správně zapsáno.

Dalo by se to napsat i jako funkce:

Code:

public static double hledej(double ps){
    /* ps - obsahuje pravou stranu rovnice, musí se zadat */
    /* x  - inicializovaná proměnná na nulu, po ukončení smyčky vrátí výsledek */
    /* z  - pomocná proměnná, pokud bude absolutní rozdíl mezi [x] a [z] větší jak [1e-13] pak se stále provádí smyčka while */

    double x = 0;
    double z = 1;

    while (Math.abs(x-z) > 1e-13) 
    {  
        z = x;
           x = x-(Math.pow((x+3),5)-15*Math.pow((x-2),3)-30*Math.pow((x-4),2)-ps)/(5*Math.pow((x+3),4)-60*(x-4)-45*Math.pow((x-2),2));
    }

    return x;
}

Možná by to bylo přehlednější.


LibreOffice Verze: 25.8.4.2, Maxima 5.49.0 (SBCL)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson