👤

Scrieti un program cu ajutorul caruia sa puteti calcula si afisa f(k), f(2k), f(3k)...f(10k) pt urmatoarea functie:f(x)=[ arctg(x+1)+(x-9)^7+sqrt(x-7)+3^(x+2)...daca x<12

arcctg(x+1)+x^9+5^(x+8).... daca x>_12

Un model ma intereseaza,nu programul in sine facut dupa functie.Program:MatLab.

K e o constanta...


Răspuns :

Răspuns:

Explicație:

Codul prezentat mai jos nu este chiar complet. De exemplu, daca doriti , puteti schimba intervalul de definire al plot-ului (unde este comentat 'plot pt k curent' ) .. eu l-am luat pe ramuri, dar pentru k < 12 , nu proneste din 0, ci de la -inf (oricum are comportament asimptotic stabil functia, apoi explodeaza la un punct, se aseamana cu functia dirac)) dar nu este corect sa-l iau de la 0.. Depinde de functie aici...Daca spre exemplu as fi avut o functie doar din arctg , dupa ce as fi definit functia anonymous si as fi vrut sa fac plot, avea sens sa-l plotez pe 0,pi ( ceva de genul fplot(f,[0,pi]) )

Acum voi explica codul , deoarece ati spus ca vreti doar model, nu si rezolvarea efectiva a problemei prezentate:

Incepem prin a defini variabilele de stare pentru input / initializari...putem hardcoda k / x direct, fara a fi nevoie sa cerem functia "input()" din biblioteca matlab.

Apoi studiem domeniul de definitie al functiei: Observam ca se imparte in 2 ramuri, pt k < 12 si k>= 12.

Acum..exista o varietate de moduri prin care putem declara functii in matlab. Cele mai utilizate sunt functiile 'anonymous' , care se folosesc de semnul "@" si inregistreaza in memorie la adresa lui 'f' cu variabila 'k'(variabila e mereu ce urmeaza dupa @) functia denumita.

De exemplu: f = @(x) (x+1), este echivalentul functiei pe hartie f(x) = x+1.

//////

Atentie, daca doriti calcul avansat si aveti nevoie de o functie cu 2 variabile, modul corect de definire este:

1) cream un vector coloana X in care bagam variabilele functiei x1,x2,...,xn : X = [x1;x2;...;xn]

2) definim cine sunt x1,...,xn (exemplu: x1 = 5 ; x2 = 6)

3) definim functia f = @(x) x(1) + x(2) => aceasta va lua primul element din vectorul coloana X si il va insuma cu cel de-al 2-lea din acelasi vector, elementele acestui vector fiind variabilele respective

///////

Dupa ce am definit corect functiile si am impartit pe ramuri, vom plota f(k), f(2k) , ... f(10 * k), intr-un for unde indicele i reprezinta argumentul functiei inmultit cu k => f(i*k)

a) K < 12 => count = 1 ; CopieK = k ;  for i = 1 : 10 {inmultesc k cu ct, afisez cu fplot(f , domeniul(unde la noi domeniul este [0,k_actualizat])  )  ; resetez k sa il am pe cel original, cresc counterul ca la pasul urmator sa am 2*k }

b) analog ca la a, doar ca aici se schimba functia, si domeniul de definitie

In cazul in care nu se vede codul complet in screenshot, il voi scrie si aici:

prompt='Baga k : '

k = input(prompt)

if k < 12

      f = @(k) atan((k + 1)) + ((k - 9)^7) + sqrt((k - 7)) + 3^((k + 2));

end  

if k >=  12

   f = @(k) acot(k+1) + k^9 + 5^(k+8);  

end

if k < 12

   ct=1;

   korig = k;

         for i = 1 : 10  

                  k=k*ct; % multiplica cu pas

                   test = k ;

                  fplot(f,[0,k])  % plot pentru k curent

                   k = korig; %reset k  

                  ct=ct+1; % creste pas  

              end

end

if k >= 12

   ct=1;

   korig = k;

        for i = 1 : 10  

   

              k=k*ct; % multiplica cu pas

               test = k ;

               fplot(f,[12,k])  % plot pentru k curent

               k = korig; %reset k  

                ct=ct+1; % creste pas  

            end

end

Sper sa fi fost de ajutor cat de cat... Noroc

Vezi imaginea FRANZ
Vezi imaginea FRANZ