kurvend() in Mupad

Ein script für mupad um eine kurvendiskursion duchzuführen. Ich schrieb diese Funktion zu Zeit meines Abiturs um meine Rechenergebnisse zu verivizieren, wie es aber oft so ist, sind Feinheiten auf der strecke geblieben weil man ja schliesslich lernen muss. Später habe ich nicht weiter gemacht. Aus diesem Grund muss man die Regeln für hoch-, tief- und wendepunkte auswendig wissen, oder am Plot ablesen.

:stud:userinit.mu.txt Bitte die Endung .txt entfernen und nach ~/.mupad kopieren.

//   package("schule", quiet);
//   einlesen des "schule" paketes
//   ist doof, brauch ich dochnicht!
//      
//   Discription : ein script für mupad, um Funktionen zu diskutieren
//   Name        : Bernd Luxenburger
//   Email       : bernd at berndlux dot de
//   Url         : http://berndlux.de
//   Lizens      : GPL
//   Kommentar   : Grundidee aus Linux Magazin-6/2002 (www.linux-magazin.de)
//                 Zusätze und Ergänzungen zum täglichen gebrauch von mir
   
   
//   Chagelog:
//   03.12.12
//    + Grundfunktionen
//    ~ erste versuche mit der Wendetangente
//   04.02.28 
//      totaler rewrite, jetzt mit schöner Ausgabe der Ergebnisse
//    + neue aufteilung
//    + punke als formel, und als float
//    + alles zusammengefasst, neues layout
//   04.02.29
//    + unterscheidet hoch oder tief punkte (extrema)
//    + 
   
//  dieser code steht unter der GPL, und ist frei!
    
  
 kurvend:=proc(f)
 begin
  // schaltet die schönschreibung an ;-)
  PRETTYPRINT := TRUE; 
   
  print(Unquoted,"Einfache Symetrie zur Y-Achse",bool(f(x)=f(-x)));
  print(Unquoted,"Punktsymetrie zum Ursprung: ",bool(f(x)=-f(-x)));
   
  print(Unquoted,"f(x) Faktoriesiert:");
  print();
  print(Unquoted,"f(x)= ", factor( f(x)));
  print();
   
   // Alle Ableitungen ####################################################
   print(Unquoted,"====================================================================");
   print(Unquoted,"Erste Ableitung:");
   print();
  Ableit1:=f'(x);
   print(Unquoted,"f'(x)=", Ableit1);
   print(Unquoted,"Vereinfacht:");
  print(Unquoted,"f'(x)=", factor(Ableit1));
   print();
   print(Unquoted,"--------------------------------------------------------------------");
   print(Unquoted,"Zweie Ableitung :");
   print();
  Ableit2:=f''(x);
  print(Unquoted,"f''(x)=",Ableit2);
   print(Unquoted,"Vereinfacht:");
  print(Unquoted,"f''(x)=", factor(Ableit2));
   print();
   print(Unquoted,"--------------------------------------------------------------------");
   print(Unquoted,"Dritte Ableitung:");
   print();
  Ableit3:=f'''(x);
   print(Unquoted,"Vereinfacht:");
  print(Unquoted,"f'''(x)=", factor(Ableit3));
   print();
   print(Unquoted,"####################################################################");
   // print(Unquoted,"---------------- Nullstellen f(x) ------------------------------");

  Nst:=solve(f(x)=0,x);
  print(Unquoted,"Nullstellen f(x)=",Nst);
   print();
   print(Unquoted,"float Werte");
  for i from 1 to nops(Nst) do
    print(Unquoted,"N(",float( op(Nst,i)),"| 0 )");
  end_for;
   print(Unquoted,"--------------------------------------------------------------------");
   print();
  Nst_Ableit1:=solve(f'(x)=0,x);
   print(Unquoted,"Extrema : ",Nst_Ableit1);
   print();
   print(Unquoted, "Punkte ausrechnen :");
  print(Unquoted,"f( f'(x)=0 )=",map(Nst_Ableit1,f));
   print();
   print(Unquoted, "Als float :");
  for i from 1 to nops(Nst_Ableit1) do
  print(); 
  print( op(Nst_Ableit1,i) );
  print();
  print( Ableit2(op(Nst_Ableit1,i)));
  print();
  print( float(Ableit2(op(Nst_Ableit1,i)))); 
 //   tmp:=Ableit2(op(Nst_Ableit1,i));
 //    if tmp > 0
 //     then 
  //      print(Unquoted,"Hochpunkt(",float(op(Nst_Ableit1,i)),"|",float( f(op(Nst_Ableit1,i) )),")");
  //    elif tmp < 0
  //      then
  //        print(Unquoted,"Tiefpunt(",float(op(Nst_Ableit1,i)),"|",float( f(op(Nst_Ableit1,i) )),")");
  //      else  
 //          print(Unquoted,"E(",float(op(Nst_Ableit1,i)),"|",float( f(op(Nst_Ableit1,i) )),")");
 //    end_if;
  
  
  
    //if Ableit1(op(Nst_Ableit1,i)) < 0 then
    // print(Unquoted,"Hochpunkt");
    //end_if;
    //if Ableit1(op(Nst_Ableit1,i)) > 0 then
    // print(Unquoted,"Tiefpunt");
    // end_if
    //else print(Extrema( | )
    print();
    print(Unquoted,"E(",float(op(Nst_Ableit1,i)),"|", float( f(op(Nst_Ableit1,i) )) ,")");
  end_for;
   //  ############################### bis hierhin überarbeitet 04.02.29 #######################
   print();
   print(Unquoted,"---------------------------------------------------------------------");
   
  print();
  print();
  print();
  
  // HK_Extrema:=map(Nst_Ableit2,f'');
  // print(Unquoted,"f''(",Nst_Ableit2,")=",HK_Extrema);
   
  Nst_Ableit2:=float(solve(f''(x)=0,x));
 print(Unquoted,"Nullstellen der 2. Ableitungsfunktion=",Nst_Ableit2);

  print();
  print(Unquoted, "Punkte ausrechnen :");
  print(Unquoted,"f(",Nst_Ableit1,")=", map(Nst_Ableit1,f));
  print();
  print();
  print(Unquoted,"==========================================================");

  print(Unquoted,"Dritte Ableitung:");
  Ableit3:=f'''(x);
  print(Unquoted,"f'''(x)=",Ableit3);


 // print(Unquoted,"Was passiert an den nullstellen der 2. Ableitung?");
 // print(Unquoted,"f'''(",Nst_Ableit2,")=",map(Nst_Ableit2,f'''));
 // wou war denn dasnoch gut ???

 // print(Unquoted,"------------- Wendetangente -----------------------------");
//    ######################### eine grosse baustelle ###################################
    // xKoordinate:=Nst_Ableit2;
   // Wendetangente:=subs(f, x = xKoordinate) + subs(f', x = xKoordinate) * (x - xKoordinate);

   //  tw(wx):=
   print(Unquoted,"Wendetangente : tw(x)=",tw);
   print();
   // Wendetangente multiplizieren Wendetangente , um die gewohnte Geradengleichung zu erhalten
   Wendetangente:=collect(Wendetangente, x);
   print(Unquoted,"t(x)=",Wendetangente);

   // und den graph zeichnen
  plotfunc2d(f(x),f'(x),f''(x),f'''(x),TitlePosition = [1, 1],x=-20..20,y=-20..20);
  print(Unquoted,"plotfunc2d(f(x),f'(x),f''(x),f'''(x),TitlePosition = [1, 1],x=-20..20,y=-20..20);");
 // dran denken: ich will die rasterung noch feiner machen option "ticker"?
 end_proc:

stud/mupad.txt · Zuletzt geändert: 2012/09/10 23:13 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki