Problema importazione accenti da MATLAB a latex

  • Creatore
    Topic
  • #91532
    Up
    0
    Down
    ::


    Buongiorno a tutti, sono nuovo del forum e quindi mi scuso se la sezione non è quella giusta o se si è già parlato dell’argomento (ho cercato ma non ho trovato molto).

    Utilizzo latex da poco per l’università e avrei bisogno di importare dei file.m di MATLAB nel file latex che sto scrivendo. Ho trovato dei pacchetti che permettono tramite il comando listing di andare a inserire i file ma non riesco a far riconoscere gli accenti e alcuni caratteri presenti dentro il file MATLAB.
    Come posso risolvere?

    Qui sotto copio la sezione del mio file latex utilizzata per fare questa cosa, così magari mi potete dire se ho sbagliato qualcosa. (Premetto che non sono un esperto del latex e che sto cercando di impararlo piano piano quindi se possibile non date niente per scontato nelle spiegazioni.)

    % LaTeX settings for MATLAB code listings
    % based on Ted Pavlic’s settings in http://links.tedpavlic.com/ascii/homework_new_tex.ascii
    \usepackage{listings}
    \usepackage[usenames,dvipsnames]{color}

    % This is the color used for MATLAB comments below
    \definecolor{MyDarkGreen}{rgb}{0.0,0.4,0.0}

    % For faster processing, load Matlab syntax for listings
    \lstloadlanguages{Matlab}%

    \lstset{language=Matlab, % Use MATLAB
    frame=single, % Single frame around code
    basicstyle=\small\ttfamily, % Use small true type font
    keywordstyle=[1]\color{Blue}\bfseries, % MATLAB functions bold and blue
    keywordstyle=[2]\color{Purple}, % MATLAB function arguments purple
    keywordstyle=[3]\color{Blue}\underbar, % User functions underlined and blue
    identifierstyle=, % Nothing special about identifiers
    % Comments small dark green courier
    commentstyle=\usefont{T1}{pcr}{m}{sl}\color{MyDarkGreen}\small,
    stringstyle=\color{Purple}, % Strings are purple
    showstringspaces=false, % Don’t put marks in string spaces
    tabsize=5, % 5 spaces per tab
    %
    %%% Put standard MATLAB functions not included in the default
    %%% language here
    morekeywords={xlim,ylim,var,alpha,factorial,poissrnd,normpdf,normcdf},
    %
    %%% Put MATLAB function parameters here
    morekeywords=[2]{on, off, interp},
    %
    %%% Put user defined functions here
    morekeywords=[3]{FindESS, homework_example},
    %
    morecomment=[l][\color{Blue}]{…}, % Line continuation (…) like blue comment
    numbers=left, % Line numbers on left
    firstnumber=1, % Line numbers start with line 1
    numberstyle=\tiny\color{Blue}, % Line numbers are blue
    stepnumber=5 % Line numbers go in steps of 5
    }

    \lstinputlisting[language=Matlab]{es11.m}

Visualizzazione 13 filoni di risposte
  • Autore
    Risposte
    • #91533
      Up
      0
      Down
      ::


      Benvenuto!

      Per permettere anche a chi non ha matlab di risolvere il problema ti chiedo alcune cose.
      Devi produrre un esempio minimo compilabile, ovvero un codice latex completo di preambolo e privo di ogni cosa superflua per risolvere il problema. Inoltre devi allegare il file incluso. Se non riesci ad allegarlo è sufficiente avere il contenuto del file. Poi basterà cambiare l’estensione. Almeno credo.

      Ciao
      Ivan

    • #91534
      Up
      0
      Down
      ::


      Mi scuso per l’errore da principiante.
      Ho allegato il file latex ristretto al minimo indispensabili con i vari pacchetti usati e il codice per l’importazione dei file matlab.
      Trovate anche il file matlab all’interno dello spoiler per non inquinare tutta la pagina. (ho provato a allegarlo ma non lo riconosceva).
      Spero che così sia sufficiente per spiegare la dinamica del problema.
      (chiedo scusa ancora se a qualcuno di voi il file risulterà da novellino ma ancora vado un po’ a braccio nella compilazione 🙂 )

      [attachment=883]prova.tex[/attachment]

      Spoiler

      %%%%%%%%%%% ESERCIZIO 7 %%%%%%%%%%
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      clear all
      close all
      clc

      s=tf(‘s’);
      np1=2001;
      tfin=200;
      t=linspace(0,tfin,np1);

      %%%%%%%%%%%%%% DEFINIZIONE PROCESSO %%%%%%%%%%%%%%

      k=-2;
      kd=5;
      teta=5;
      tetad=10;
      tau=10;
      taud=10;

      [nd1,dd1]=pade(teta,3);del=tf(nd1,dd1); % ritardo con pade, n=3
      [nd2,dd2]=pade(tetad,3);deld=tf(nd2,dd2); % ritardo con pade, n=3

      P=del*k/(tau*s+1);
      Pd=deld*kd/(taud*s+1);

      rlocus(-P) % si fa rlocus di -P perchè k(P) è negativo
      display(‘valori consigliati kmax=1.85 wmax=0.365’)
      kmax=1.85
      wmax=0.365

      Pu=2*pi/wmax;

      %%%%% PROGETTO REGOLATORE CASO 1) ZN %%%%

      %indichiamo tutti questi termini con il segno 1
      %così da capire che si riferiscono a tuning zn

      %%%% regolatore PI %%%%
      Kcpi1=-kmax/2.2;
      tauIpi1=Pu/1.2;

      Cpi1=Kcpi1*(1+1/(tauIpi1*s));

      Gpi1=Cpi1*P;

      Ypir1=Gpi1/(1+Gpi1);
      Ypid1=Pd/(1+Gpi1);

      %%%% regolatore PID %%%%

      Kcpid1=-kmax/1.7;
      tauIpid1=Pu/2;
      tauDpid1=Pu/8;

      Cpid1=Kcpid1*(1+s*tauDpid1+1/(s*tauIpid1));

      Gpid1=P*Cpid1;

      Ypidr1=Gpid1/(1+Gpid1);
      Ypidd1=Pd/(1+Gpid1);

      subplot(1,2,1);
      step(Ypir1,Ypidr1,t),title(‘ step response y(r) ZN’),…
      legend(‘PI’,’PID’),axis([0,100,-0.5,1.5])

      subplot(1,2,2);
      step(Ypid1,Ypidd1,t),title(‘ step response y(d) ZN’),…
      legend(‘PI’,’PID’); axis([0,150,-0.5,2.5])

      Ypitot1=Ypir1+Ypid1;
      Ypidtot1=Ypidr1+Ypidd1;

      %%%%%%%%%% CASO 2) TUNING CC %%%%%%%%%%

      %indichiamo i parametri con 2 così da far riferimensto a CC %

      %%% regolatore PI %%%

      kcpi2=(1/k)*(tau/teta)*(0.9+teta/(12*tau));
      tauIpi2=teta*(30+3*teta/tau)/(9+20*teta/tau);

      Cpi2=kcpi2*(1+1/(s*tauIpi2));

      Gpi2=Cpi2*P;

      Ypir2=Gpi2/(1+Gpi2);
      Ypid2=Pd/(1+Gpi2);

      %%% regolatore PID %%%

      kcpid2=(1/k)*(tau/teta)*(4/3+teta/(4*tau));
      tauIpid2=teta*(32+6*teta/tau)/(13+8*teta/tau);
      tauDpid2=teta*4/(11+2*teta/tau);

      Cpid2=kcpid2*(1+1/(s*tauIpid2)+s*tauDpid2);

      Gpid2=P*Cpid2;

      Ypidr2=Gpid2/(1+Gpid2);
      Ypidd2=Pd/(1+Gpid2);

      Ypitot2=Ypir2+Ypid2;
      Ypidtot2=Ypidr2+Ypidd2;

      figure(2)

      subplot(1,2,1),step(Ypir2,Ypidr2,t),title…
      (‘ step response y(r) CC’),legend(‘PI’,’PID’)
      axis([0,150,-0.5,2])
      subplot(1,2,2),step(Ypid2,Ypidd2,t),…
      title(‘ step response y(d) CC’),legend(‘PI’,’PID’)
      axis([0,150,-1,2.5])

      %%%%%%%% CASO 3) TECNICA CURVA DI RISPOSTA %%%%%%

      % Indichiamo tutto con 3 %

      %regolatore PI%

      c1=0.8

      kcpi3=(tau+teta/2)/((teta*(c1+1))*k)
      tauIpi3=tau+teta/2

      Cpi3=kcpi3*(1+1/(s*tauIpi3))

      Gpi3=Cpi3*P;

      Ypir3=Gpi3/(1+Gpi3);
      Ypid3=Pd/(1+Gpi3);

      %%% regolatore PID %%%

      c1=0.8;
      c2=0.3;

      kcpid31=kcpi3;
      kcpid32=(tau+teta/2)/((teta*(c2+1))*k);
      tauIpid3=tauIpi3;
      tauDpid3=tau*teta/(2*tau+teta);

      Cpid31=kcpid31*(1+s*tauDpid3+1/(tauIpid3*s));
      Cpid32=kcpid32*(1+s*tauDpid3+1/(tauIpid3*s));

      Gpid31=P*Cpid31;
      Gpid32=P*Cpid32;

      Ypidr31=Gpid31/(1+Gpid31);
      Ypidd31=Pd/(1+Gpid31);
      Ypidr32=Gpid32/(1+Gpid32);
      Ypidd32=Pd/(1+Gpid32);

      Ypitot3=Ypir3+Ypid3;
      Ypidtot31=Ypidr31+Ypidd31;
      Ypidtot32=Ypidr32+Ypidd32;

      figure(3)

      subplot(1,2,1),step(Ypir3,Ypidr31,Ypidr32,t),title…
      (‘step response y(r) BCS”90’),…
      legend(‘PI’,’PID c1′,’PID c2′),axis([0,100,-0.5,1.5])
      subplot(1,2,2),step(Ypid3,Ypidd31,Ypidd32,t),title…
      (‘step response y(d) BCS”90’),…
      legend(‘PI’,’PID c1′,’PID c2′),axis([0,150,-1,2.5])

      figure(4)

      subplot(2,2,1),step(Ypid1,Ypid2,Ypid3,t),…
      legend(‘ZN’,’CC’,’BCS”90′),title(‘step response y(d) PI’)
      axis([0,150,-1,3])
      subplot(2,2,2),step(Ypidd1,Ypidd2,Ypidd31,t),…
      legend(‘ZN’,’CC’,’BCS”90 c1′)…
      ,title(‘step response y(d) PID’)
      axis([0,150,-1,3])
      subplot(2,2,3),step(Ypir1,Ypir2,Ypir3,t),…
      legend(‘ZN’,’CC’,’BCS”90′),…
      title(‘step response y(r) PI’),axis([0,100,-0.5,2])
      subplot(2,2,4),step(Ypidr1,Ypidr2,Ypidr31,t),…
      legend(‘ZN’,’CC’,’BCS”90 c1′)…
      ,title(‘step response y(r) PID’)
      axis([0,100,-0.5,2])

      %%%%%%%%%%%% STUDIO PARAMETRI Se, taur, taua %%%%%%%%%%%%%%

      parametri_Ypir1=stepinfo(Ypir1,t,1,…
      ‘SettlingTimeThreshold’,0.05,’RiseTimeLimits’,[0.0 1.0])
      parametri_Ypir2=stepinfo(Ypir2,t,1,…
      ‘SettlingTimeThreshold’,0.05,’RiseTimeLimits’,[0.0 1.0])
      parametri_Ypir3=stepinfo(Ypir3,t,1,…
      ‘SettlingTimeThreshold’,0.05,’RiseTimeLimits’,[0.0 1.0])

      %%%%%%% STUDIO INDICI IAE ISE ITAE su regolatore PI %%%%%%%

      %%% studio indici per Ypir1
      y1=step(Ypir1,t);
      y2=step(Ypir2,t);
      y3=step(Ypir3,t);

      y=y1;
      IAE=0;ITAE=0;ISE=0;
      for i=1:np1
      iae(i)=abs(1-y(i))*tfin/np1;
      itae(i)=iae(i)*t(i);
      ise(i)=((1-y(i))^2)*tfin/np1;
      IAE=IAE+iae(i);
      ITAE=ITAE+itae(i);
      ISE=ISE+ise(i);
      end
      IAE1=IAE;ISE1=ISE;ITAE1=ITAE;

      y=y2;
      IAE=0;ITAE=0;ISE=0;
      for i=1:np1
      iae(i)=abs(1-y(i))*tfin/np1;
      itae(i)=iae(i)*t(i);
      ise(i)=((1-y(i))^2)*tfin/np1;
      IAE=IAE+iae(i);
      ITAE=ITAE+itae(i);
      ISE=ISE+ise(i);
      end
      IAE2=IAE;ISE2=ISE;ITAE2=ITAE;

      y=y3;
      IAE=0;ITAE=0;ISE=0;
      for i=1:np1
      iae(i)=abs(1-y(i))*tfin/np1;
      itae(i)=iae(i)*t(i);
      ise(i)=((1-y(i))^2)*tfin/np1;
      IAE=IAE+iae(i);
      ITAE=ITAE+itae(i);
      ISE=ISE+ise(i);
      end
      IAE3=IAE;ISE3=ISE;ITAE3=ITAE;

      %risposta 1
      disp(‘risposta #1: IAE1, ITAE1, ISE1’)
      ris1=[IAE1,ITAE1,ISE1]
      % risposta 2
      disp(‘risposta #2: IAE2, ITAE2, ISE2’)
      ris2=[IAE2,ITAE2,ISE2]
      %risposta 3

      disp(‘risposta #3: IAE3, ITAE3, ISE3’)
      ris3=[IAE3,ITAE3,ISE3]

      %%%%%%%%% ANALISI AZIONE DI CONTROLLO %%%%%%%%%

      figure (5)
      Cr1=Cpi1/(1+P*Cpi1);
      Cr2=Cpi2/(1+P*Cpi2);
      Cr3=Cpi3/(1+P*Cpi3);
      subplot(1,2,1),step(Cr1,Cr2,Cr3,t),…
      title(‘step response azione di controllo y(r)’),…
      legend(‘ZN’,’CC’,’BCS”90′)

      Cd1=-Cpi1*Pd/(1+P*Cpi1);
      Cd2=-Cpi2*Pd/(1+P*Cpi2);
      Cd3=-Cpi3*Pd/(1+P*Cpi3);
      subplot(1,2,2),step(Cd1,Cd2,Cd3,t),…
      title(‘step response azione di controllo y(d)’),…
      legend(‘ZN’,’CC’,’BCS”90′)

      H=dcgain(Cd1)
      H1=dcgain(Cr1)

      %%%% PARTE OPZIONALE %%%

      figure(6)

      kc=[-0.4,-0.6,-0.7];
      tauI=[9,12,15];

      for i=1:3
      Cpi=kc(i)*(1+1/(tauI(i)*s));
      G=Cpi*P;
      Ypir=G/(G+1);
      step(Ypir,t);hold on
      parametri_Ypir=stepinfo(Ypir,t,-1,…
      ‘SettlingTimeThreshold’,0.05,…
      ‘RiseTimeLimits’,[0.0 1.0])
      end
      legend…
      (‘k_c=-0.4 ;\tau_I=9′,’k_c=-0.6;\tau_I=12′,’k_c=-0.7 ;\tau_I=15’)
      axis([0,100,-0.2,1.2])

      Attachments:
      You must be logged in to view attached files.
    • #91535
      Up
      0
      Down
      ::


      Aggiungi
      `\lstset{
      literate=%
      {à}{{\`a}}1
      {ì}{{\`i}}1
      {è}{{\`e}}1
      {é}{{\'e}}1
      {ò}{{\`o}}1
      {ù}{{\`u}}1
      }`
      E scrivi “perché”, non “perchè”

      Ciao
      Ivan

    • #91536
      Up
      0
      Down
      ::

      ivan” post=91085Aggiungi
      `\lstset{
      literate=%
      {à}{{\`a}}1
      {ì}{{\`i}}1
      {è}{{\`e}}1
      {é}{{\'e}}1
      {ò}{{\`o}}1
      {ù}{{\`u}}1
      }`
      E scrivi “perché”, non “perchè”

      Ciao
      Ivan

      Grazie del consiglio ma ci ho già provato e non mi funziona. Potresti dirmi di preciso dove dovrei metterlo? all’interno dell’lstset che ho già aperto o da un’altra parte?
      (non ho provato a cambiare l’accento del perché ma non penso sia quello il discriminante giusto?
      Io uso Texstudio è possibile che sia legato a questo il problema?
      Grazie mille dell’aiuto

    • #91537
      Up
      0
      Down
      ::


      Si, devi aggiungerlo al comando [tt]\lstset[/tt] che hai nel preambolo. Per quanto riguarda “perchè”, è scritto sbagliato, la forma corretta vuole l’accento “perché” (infatti il correttore automatico del forum mi sottolinea la prima forma ma non la seconda ;D).

    • #91538
      Up
      0
      Down
      ::


      Ci ho già provato ma non funziona 🙁

    • #91539
      Up
      0
      Down
      ::

      redbaron990″ post=91149Ci ho già provato ma non funziona 🙁

      Allora invia un nuovo documento minimale che crea problemi. Deve essere estremamente minimale.
      Questo per capire come mai il tuo precedente esempio a me funziona…

      Ciao
      Ivan

    • #91540
      Up
      0
      Down
      ::


      Penso che il problema sia il seguente.
      I file che scrive matlab .m sono dei normali file di testo codificati in codifica latin1.
      Per questo motivo devi dire a listing di leggere questi file in quella codifica, aggiungendo nelle impostazioni di listing il comando

      inputencoding=latin1

      ovviamente quando carichi il pacchetto inputenc devi includere anche latin1 tra le codifiche.

      In questo modo dovrebbe funzionare e non dovrebbe servire nemmeno il comando literate.

    • #91541
      Up
      0
      Down
      ::


      Allora ho provato a inserire il latin 1 come consigliato e ho fatto così, ditemi se ho sbagliato.

      \usepackage[utf8,latin1]{inputenc}

      però a questo ha problemi con gli accenti veri e propri del file latex che ho scritto invece con tastiera normale senza andare ad usate i comandi \ ecc… per ogni singola lettera accentata.

      Cosa intendete per File più minimale di quello che ho allegato? ho messo solo i pacchetti e il blocco di comandi per importare il matlab, il file matlab che sia uno o l’altro non fa alcuna differenza. Il file latex non so come semplificarlo ulteriormente.
      Scusate l’ignoranza mi rendo conto che è un po’ presto rispetto al mio livello di conoscenza del software per andare a smanettare con questo tipo di funzioni, però mi piaceva implementare il file matlab direttamente da latex senza andare a fare un file word a parte.

      Altre idee?

    • #91542
      Up
      0
      Down
      ::


      Il problema è sicuramente di codifica.
      Adesso se devo essere sincero quando io ho risolto lo stesso problema tuo non avevo fatto solo l’errore di codifica ma ce n’era anche un altro e quindi risolto quello non ho più approfondito e le cose funzionavano forse per un qualche scherzo del destino 🙂

      Il fatto è che tu hai scritto il tuo file con la codifica utf8 e poi gli hai dato in pasto un file in latin1. Tutti i caratteri speciali quindi sfarfallano (se non ti da errore).
      Quello che devi fare è lasciare utf8 in inputenc e poi quando carichi il file di matlab dire a listing che quel file è scritto in latin1.

      Quindi

      \usepackage[utf8]{inputenc}

      e poi nelle opzioni di listing

      \lstset{ tutte le altre opzioni,
      inputencoding=latin1
      }

      in questo modo penso che vada (o, almeno, a me funziona 😉 )

    • #91543
      Up
      0
      Down
      ::


      se non sbaglio l’ultima codifica è quella che usa il documento principale quindi metterei

      `\usepackage[latin1,utf8]{inputenc}`

      d’altro canto, se non ricordo male ma potrei sbagliarmi, utf8 carica da se quello che gli serve (quindi dovrebbe bastare caricare solo utf8…ma sicuro caricarlo per ultimo se il tuo .tex lo vuoi in utf8)

      il problema è che tu hai gia scritto il file codificato utf8…quindi se poi gli dici latin1 ovvio che ti incasina tutto…quindi o lo converti (una guida su come farlo la trovi tra la documentazione…e ti consiglio di leggerla comunque che è corta e illuminante!)..quindi dicevo..o converti tutto in latin1, richiami solo latin1, scrivi in latin1 importi in latin1 e tutto va a posto (soluzione che adottai anche io tempo fa nonostante sia un amante dell’utf8 perché non avevo ancora letto la guida di cui sopra e matlab faceva un sacco di casino) oppure vedi se funziona come ti ho abbiamo suggerito qui (caricando prima latin1, poi utf8…quindi continuando a leggere e scrivere in utf8 il documento…e caricando il file dicendo di leggerlo in latin1..)

      Ciao ciao

      Corrado.

    • #91544
      Up
      0
      Down
      ::


      Ho provato a mettere prima il latin1 e poi l’utf8 come da voi consigliato ma poi compilando il file mi da questo errore qui.

      File `latin1 frame.def’ not found. \lstinputlisting[language=Matlab]{es1.m}

      Ho sbagliato qualcosa?

      la sezione per il caricamento MATLAB è la seguente. Devo forse mettere l’encoding da un’altra parte?

      % LaTeX settings for MATLAB code listings
      % based on Ted Pavlic’s settings in http://links.tedpavlic.com/ascii/homework_new_tex.ascii
      \usepackage{listings}
      \usepackage[usenames,dvipsnames]{color}

      % This is the color used for MATLAB comments below
      \definecolor{MyDarkGreen}{rgb}{0.0,0.4,0.0}

      % For faster processing, load Matlab syntax for listings
      \lstloadlanguages{Matlab}%

      \lstset{language=Matlab,
      inputencoding=latin1
      % Use MATLAB
      frame=single, % Single frame around code
      basicstyle=\small\ttfamily, % Use small true type font
      keywordstyle=[1]\color{Blue}\bfseries, % MATLAB functions bold and blue
      keywordstyle=[2]\color{Purple}, % MATLAB function arguments purple
      keywordstyle=[3]\color{Blue}\underbar, % User functions underlined and blue
      identifierstyle=, % Nothing special about identifiers
      % Comments small dark green courier
      commentstyle=\usefont{T1}{pcr}{m}{sl}\color{MyDarkGreen}\small,
      stringstyle=\color{Purple}, % Strings are purple
      showstringspaces=false, % Don’t put marks in string spaces
      tabsize=5, % 5 spaces per tab
      %
      %%% Put standard MATLAB functions not included in the default
      %%% language here
      morekeywords={xlim,ylim,var,alpha,factorial,poissrnd,normpdf,normcdf},
      %
      %%% Put MATLAB function parameters here
      morekeywords=[2]{on, off, interp},
      %
      %%% Put user defined functions here
      morekeywords=[3]{FindESS, homework_example},
      %
      morecomment=[l][\color{Blue}]{…}, % Line continuation (…) like blue comment
      numbers=left, % Line numbers on left
      firstnumber=1, % Line numbers start with line 1
      numberstyle=\tiny\color{Blue}, % Line numbers are blue
      stepnumber=5 % Line numbers go in steps of 5
      }

    • #91545
      Up
      0
      Down
      ::


      ti manca la virgola dopo latin1…ti legge tutto un comando con la riga sotto a quella commentata

    • #91546
      Up
      0
      Down
      ::

      Dork” post=91176ti manca la virgola dopo latin1…ti legge tutto un comando con la riga sotto a quella commentata

      Grazie mille ora funziona tutto 🙂

      Non so veramente come ringraziarvi.
      E’ sempre bello trovare un forum in cui le persone sono così disponibili e attente nell’aiutare gli altri.
      Grazie infinite

Visualizzazione 13 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top