40
3 3 a a -4 -4 a a lezione di lezione di laboratorio laboratorio Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Embed Size (px)

Citation preview

Page 1: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

33aa-4-4aa lezione di laboratorio lezione di laboratorio

Laurea Specialisticain

Ingegneria Matematica

Laurea Specialisticain

Ingegneria Matematica

a.a. 2006-2007

Page 2: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

m-filem-fileFile di testo contenente codici MATLAB. Consente dimemorizzare ed organizzare istruzioni e comandi MATLAB

script

function

m-file

Page 3: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

m-file m-file scriptscript

•Standard ASCII file di testo

•Esegue una serie di comandi MATLAB sul workspace base

Il carattere “ % “ è usato per:

• scrivere commenti all’interno di M-file

•definire il formato di stampa

% eps1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1EPS=EPS/2;num=num+1;tab(num,:)=[num EPS];fprintf('%3d %30.16e\n',... tab(num,:));endEPS=tab(end-1,2)

% eps1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1EPS=EPS/2;num=num+1;tab(num,:)=[num EPS];fprintf('%3d %30.16e\n',... tab(num,:));endEPS=tab(end-1,2)

N.B. Lo script non accetta argomenti di input e di output

Page 4: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Salvare e richiamare un m-script Salvare e richiamare un m-script

Richiamare: Si richiama digitando solo il nome con cui è stato memorizzato il file

eps1

N.B. Lo script opera sul Workspace base.

Salvare un m-script:Dopo avere digitato le istruzioni nella finestra dell’editor di testo, si salva selezionando sulla barra la voce file e scegliendo nel menu : Save as. Assegnare un nome: eps1

Page 5: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Risultati del file eps1.mRisultati del file eps1.m

% eps1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1 EPS=EPS/2; num=num+1; tab(num,:)=[num EPS]; fprintf('%3d %30.16e \n',... tab(num,:));endEPS=tab(end-1,2)

% eps1.m - m-file per % calcolare la precisione di% macchina num=0;EPS=1;while (1+EPS)>1 EPS=EPS/2; num=num+1; tab(num,:)=[num EPS]; fprintf('%3d %30.16e \n',... tab(num,:));endEPS=tab(end-1,2)

» eps1 1 5.0000000000000000e-001 2 2.5000000000000000e-001 3 1.2500000000000000e-001 ………………… 52 2.2204460492503131e-016 53 1.1102230246251565e-016 »

» eps1 1 5.0000000000000000e-001 2 2.5000000000000000e-001 3 1.2500000000000000e-001 ………………… 52 2.2204460492503131e-016 53 1.1102230246251565e-016 »

La variabile EPS è stata scelta con letteremaiuscole per differenziarla dalla variabileeps del Matlab .

Page 6: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

m-file m-file functionfunction

function s = fatt(c)%%fatt calcola il fattoriale di c.%s=1;if c>=1 for i=1:c s=s*i; endend

Help Online

Codice

Argomento di output Nome della funzione

Argom. di input

function [out1,out2,out3] = nome_fun(in1,in2)

Caso generale

Page 7: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

– Si salva in modo analogo ad un m-script: nome_fun

– Si richiama digitando un’uguaglianza del tipo:[out1,out2,out3] = nome_fun(in1,in2)– out1,out2,out3 sono i parametri in uscita, – in1,in2 sono i parametri in input valore=fatt(5)N.B. La function

• accetta argomenti di input e di output• opera su un’area di memoria distinta dal Workspace

base (variabili locali)

Salvare e Richiamare Salvare e Richiamare una m-una m-functionfunction

Page 8: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

function s = fatt(c)%% fatt calcola il fattoriale del numero c usando la definizione.%s=1;if c>=1 for i=1:c s=s*i; endend

function s = fatt(c)%% fatt calcola il fattoriale del numero c usando la definizione.%s=1;if c>=1 for i=1:c s=s*i; endend

Risultati della function fatt.mRisultati della function fatt.m» numero =5;» valore=fatt(numero)valore = 120»

» numero =5;» valore=fatt(numero)valore = 120»

Osservazione: Esiste inoltre la function factorial di Matlab che restituisce il fattoriale di un numero (si faccia l’help).

Usando la function prod del Matlab, si può anche calcolare il fattorialedi un numero:» valore=prod(1:5)valore = 120»

Usando la function prod del Matlab, si può anche calcolare il fattorialedi un numero:» valore=prod(1:5)valore = 120»

Page 9: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Un secondo esempio di file functionUn secondo esempio di file functionfunction m = media(v)%% MEDIA calcola la media % aritmetica di n numeri % memorizzati nel vettore v.%n=length(v);m=0;for i=1:n m=m+v(i);endm=m/n;

function m = media(v)%% MEDIA calcola la media % aritmetica di n numeri % memorizzati nel vettore v.%n=length(v);m=0;for i=1:n m=m+v(i);endm=m/n;

» v =[-3 0 4 5 6];» media_ar=media(v)media_ar = 2.4000»

» v =[-3 0 4 5 6];» media_ar=media(v)media_ar = 2.4000»

Usando la function sumdi Matlab si ottiene anche lamedia :» v =[-3 0 4 5 6];» media_ar=sum(v)/length(v)media_ar = 2.4000»

Usando la function sumdi Matlab si ottiene anche lamedia :» v =[-3 0 4 5 6];» media_ar=sum(v)/length(v)media_ar = 2.4000»

Osservazione: Esiste la function meandi Matlab che restituisce la media di n Numeri (si faccia l’help).

Page 10: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Per utilizzare i file functionPer utilizzare i file functionsui PC del laboratoriosui PC del laboratorio

1. Sul PC o sul floppy sono presenti le cartelle: Sis_lin, Eq_non_lin, Approx, ecc. che non devono essere modificate per alcun motivo.

2. Copiare perciò dalla cartella relativa al problema, la function che si vuole utilizzare nella directory di lavoro:

C:\Documents and Settings\studente\Documenti3. Scegliere, in Current Directory del Matlab, il percorso: C:\Documents and Settings\studente\Documenti Il file che si sta creando nell’ editor e che talvolta contiene idati per l’input della function che si vuole utilizzare, dovrà essere salvato nella directory C:\Documents and Settings\studente\Documenti Buon lavoro!!!!

Page 11: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Funzioni matematiche elementariFunzioni matematiche elementari

round(x) Arrotonda all’intero più vicino

fix(x) Arrotonda all’intero più vicino verso 0

floor(x) Arrotonda all’intero più vicino verso -

ceil(x) Arrotonda all’intero più vicino verso

sign(x) -1 se x è negativo, 1 se positivo

rem(x,y) Resto della divisione x/y

abs(x) Modulo o valore assoluto

sqrt(x) Radice quadrata

exp(x) Esponenziale

log(x) Logaritmo naturale

log10(x) Logaritmo in base 10

log2(x) Logaritmo in base 2

round(x) Arrotonda all’intero più vicino

fix(x) Arrotonda all’intero più vicino verso 0

floor(x) Arrotonda all’intero più vicino verso -

ceil(x) Arrotonda all’intero più vicino verso

sign(x) -1 se x è negativo, 1 se positivo

rem(x,y) Resto della divisione x/y

abs(x) Modulo o valore assoluto

sqrt(x) Radice quadrata

exp(x) Esponenziale

log(x) Logaritmo naturale

log10(x) Logaritmo in base 10

log2(x) Logaritmo in base 2

» x=[-1.9 -0.2 3.4 5.6 7.0]

» round(x)ans = -2 0 3 6 7» fix(x)ans = -1 0 3 5 7» floor(x)ans = -2 -1 3 5 7» ceil(x)ans = -1 0 4 6 7

» x=[-1.9 -0.2 3.4 5.6 7.0]

» round(x)ans = -2 0 3 6 7» fix(x)ans = -1 0 3 5 7» floor(x)ans = -2 -1 3 5 7» ceil(x)ans = -1 0 4 6 7

Page 12: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Funzioni trigonometricheFunzioni trigonometriche

» x=[0:0.2:1]';» y=sin(x);» [x y]ans = 0 0 0.2000 0.1987 0.4000 0.3894 0.6000 0.5646 0.8000 0.7174 1.0000 0.8415

» x=[0:0.2:1]';» y=sin(x);» [x y]ans = 0 0 0.2000 0.1987 0.4000 0.3894 0.6000 0.5646 0.8000 0.7174 1.0000 0.8415

L’angolo x deve essere espresso in radianti!!!Esistono anche funzioni trigonometriche che agiscono su angoli misurati in gradi.

sin(x) Seno

cos(x) Coseno

tan(x) Tangente

cot(x) Cotangente

asin(x) Arcseno

acos(x) Arccoseno

atan(x) Arctangente

acot(x) Arccotangente

sinh(x) Seno iperbolico

cosh(x) Coseno iperbolico

tanh(x) Tangente iperbolica

sin(x) Seno

cos(x) Coseno

tan(x) Tangente

cot(x) Cotangente

asin(x) Arcseno

acos(x) Arccoseno

atan(x) Arctangente

acot(x) Arccotangente

sinh(x) Seno iperbolico

cosh(x) Coseno iperbolico

tanh(x) Tangente iperbolica

Page 13: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

ciclo forciclo for

• È simile a quello di altri linguaggi di programmazione

• Ripete le istruzioni molte volte

• Può essere annidato

% ESEMPION = 4; for I = 1:N for J = 1:N A(I,J) = 1/(I+J-1); end end

% ESEMPION = 4; for I = 1:N for J = 1:N A(I,J) = 1/(I+J-1); end end

Osservazione: le istruzioni del ciclo su scritto consentono di costruire la matrice di Hilbert 4x4 che si può ottenere chiamando la function hilb(N)

for espressione istruzioniend

Page 14: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

RisultatiRisultati

>> format rat>> AA = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 1/4 1/5 1/6 1/7>>

>> format rat>> AA = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 1/4 1/5 1/6 1/7>>

Page 15: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Esercizio 1: applicazione del Esercizio 1: applicazione del ciclo forciclo for

Scrivere un file script tale che, assegnate due matrici con n=3 e m=3,

A=[1:3; 4:6; 7:9], B=[5 -6 -9; 1 1 0; 24 1 0],

determini la matrice C delle stesse dimensioni, che ha l’elemento C(i,j) pari a:

C(i,j)=A(i,j)+cos((i+j)*pi/(n+m))*B(i,j).

N.B. Si salvi lo script col nome prova

mnRBA e

Page 16: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

File File prova.mprova.m

A=[1:3; 4:6; 7:9];B=[5 -6 -9; 1 1 0; 24 1 0];[n,m]=size(A);for i =1:n for j=1:m C(i,j)=A(i,j)+cos((i+j)*pi/(n+m))*B(i,j); endenddisp('Il risultato è')disp(C)

Page 17: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Risultati file Risultati file prova.mprova.m

>>provaIl risultato è 3.5000 2.0000 7.5000 4.0000 4.5000 6.0000 -5.0000 7.1340 9.0000>>

>>provaIl risultato è 3.5000 2.0000 7.5000 4.0000 4.5000 6.0000 -5.0000 7.1340 9.0000>>

Page 18: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Operatori relazionali e logiciOperatori relazionali e logici

& and

| or

~ not

& and

| or

~ not

Logici

< Minore

<= Minore o uguale

> Maggiore

>= Maggiore o uguale

== Uguale

~= Diverso

< Minore

<= Minore o uguale

> Maggiore

>= Maggiore o uguale

== Uguale

~= Diverso

Relazionali

Gli operatori relazionali precedono nell’ordine gli operatori logici.

Page 19: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

ciclo whileciclo while

Consente di ripetere le istruzioni sotto il controllo di una condizione logica

% ESEMPIOI=1; N=4; while I <= N J = 1; while J <= N A(I,J) =(I+J); J=J+1; end I=I+1; end

% ESEMPIOI=1; N=4; while I <= N J = 1; while J <= N A(I,J) =(I+J); J=J+1; end I=I+1; end

while condizione_logica istruzioniend

Page 20: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Risultati Risultati

>> AA = 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8>>

>> AA = 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8>>

Costruire con cicli while la matrice di Hilbert 4x4.

Page 21: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Costrutto Costrutto if - elseif - else• È una struttura

condizionale

• Se una condizione è verificata esegue le istruzioni associate

if condizione_logica_1 istruzionielseif condizione_logica_2

istruzioni…elseif condizione_logica_n

istruzionielse istruzioniend

N.B. La parola chiave elseif, nel costrutto qui presentato, va scritta senza spazio tra ‘else’ e ‘if ‘.

if condizione_logica istruzioniend

Page 22: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

EsempioEsempioN=4; for I=1:N for J=1:N if I == J A(I,J) = N^2; elseif I<J A(I,J) = J; else A(I,J) = I; end end end

N=4; for I=1:N for J=1:N if I == J A(I,J) = N^2; elseif I<J A(I,J) = J; else A(I,J) = I; end end end

Questo script consente di costruire una matrice simmetrica che ha tutti

4 ^2 sulla diagonale principale, il vettore

[2 3 4] sulla prima codiagonale (inferiore e superiore), il vettore

[3 4] sulla seconda codiagonale (inferiore e superiore) e gli elementi A(1,4) e A(4,1) uguali a 4.

Page 23: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Risultati Risultati >> AA =

16 2 3 4 2 16 3 4 3 3 16 4 4 4 4 16>>

>> AA =

16 2 3 4 2 16 3 4 3 3 16 4 4 4 4 16>>

Lo studente verifichi che lo script precedente, per Ngenerico, costruisce una matrice simmetrica che ha N^2 su ogni elemento della diagonale principale e il vettore v=k+1: N sulla codiagonale k-esima (inferiore e superiore), k=1,…,N-1.

Page 24: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Comando di Comando di inputinputinput: inserimento di variabili numeriche da tastiera

» z=input(' Introduci il valore di z ') Introduci il valore di z -12z = -12

» z=input(' Introduci il valore di z ') Introduci il valore di z -12z = -12

» a=input(' Introduci la matrice a ') Introduci la matrice a [0 -1 0; 3:5; -2*ones(1,3)]a = 0 -1 0 3 4 5 -2 -2 -2

» a=input(' Introduci la matrice a ') Introduci la matrice a [0 -1 0; 3:5; -2*ones(1,3)]a = 0 -1 0 3 4 5 -2 -2 -2

Sintassi: nome_var=input(str)str: stringa che si vuole compaia sul prompt

Page 25: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Comando di Comando di inputinput

input: inserimento di stringhe da tastiera

» flag=input('Vuoi continuare? ')Vuoi continuare? 'Si'flag =Si» flag=input('Vuoi continuare? ', 's')Vuoi continuare? Siflag =Si

» flag=input('Vuoi continuare? ')Vuoi continuare? 'Si'flag =Si» flag=input('Vuoi continuare? ', 's')Vuoi continuare? Siflag =Si

Sintassi: var_str=input(str) oppure var_str=input(str, 's') str: stringa che compare sul prompt

Page 26: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Comandi di Comandi di outputoutputdisp consente di stampare linee di testo e valori di variabili.

» disp('valore della funzione') valore della funzione

» disp('valore della funzione') valore della funzione

num2str(x) converte lo scalare x in una stringa di caratteri

»x=sqrt(2);»disp(x) 1.4142

»x=sqrt(2);»disp(x) 1.4142

» disp(['Il valore di x è ',num2str(x)])Il valore di x è 1.4142

» disp(['Il valore di x è ',num2str(x)])Il valore di x è 1.4142

Sintassi: disp(str) str stringa o nome di una variabile numerica

che si vuole far comparire sul prompt.

Page 27: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Comandi di Comandi di outputoutputfprintf consente di stampare linee di testo, valori numerici e matrici (tabelle) specificandone il formato.Sintassi: fprintf(' formato \n', tab' )

formato è una stringa contenente i formati scelti con la specifica f oppure e, per i formati virgola fissa o virgola mobile con la regola:%campo_totale.num_cifre_decimalitipo_formatoI formati devono essere in numero pari alle colonne della matrice tab; %campod è la scrittura per i numeri interi\n serve per andare a capo

Page 28: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

» temp=31;» fprintf('La temperatura è di %4.1f gradi C°\n',temp)La temperatura è di 31.0 gradi C°

» temp=31;» fprintf('La temperatura è di %4.1f gradi C°\n',temp)La temperatura è di 31.0 gradi C°

» fprintf(' %f\n',pi) 3.141593

» fprintf(' %f\n',pi) 3.141593

%f consente la stampa dei numeri in fixed point,

%e consente la stampa in floating point

» fprintf(’ %13.10f\n ',pi)3.1415926536» fprintf(’ %18.10e\n ',pi)3.1415926536e+000

» fprintf(’ %13.10f\n ',pi)3.1415926536» fprintf(’ %18.10e\n ',pi)3.1415926536e+000

Nei formati f ed e il numero alla sinistra del punto è il campo totale, quello alla destra indica quante cifre decimali devono essere stampate

Page 29: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Come visualizzare una tabellaCome visualizzare una tabella• Quesito: Perché è stato scritto tab'?

• Risposta: Per stampare nel formato scelto, la matrice tab, che è stata costruita per colonne, così come si visualizza sul Command quando si digita tab.

• N.B. Se la matrice tab fosse stata costruita per righe in fprintf sarebbe bastato porre semplicemente tab

Page 30: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Esercizio 2Esercizio 2• Calcolare la funzione f = e-xsin(x) nei punti

appartenenti all’intervallo [0,1] equispaziati con passo 0.2.

• Costruire una tabella contenente i valori di x e di

f e stamparla utilizzando:

• 3 cifre decimali in formato virgola fissa per x

• 8 cifre decimali in virgola fissa per f.

• N.B. Si memorizzi il file col nome funzione

Page 31: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Numero di formati pari alle righe della matrice tab;

File File funzione.m funzione.m e risultati e risultatix=[0:.2:1]; % vettore rigaf=exp(-x).*sin(x);tab=[x; f];%tab costruita per righefprintf(' x f\n')fprintf('%6.3f %12.8f\n',tab)

x=[0:.2:1]; % vettore rigaf=exp(-x).*sin(x);tab=[x; f];%tab costruita per righefprintf(' x f\n')fprintf('%6.3f %12.8f\n',tab)

x f 0.000 0.00000000 0.200 0.16265669 0.400 0.26103492 0.600 0.30988236 0.800 0.32232887 1.000 0.30955988

x f 0.000 0.00000000 0.200 0.16265669 0.400 0.26103492 0.600 0.30988236 0.800 0.32232887 1.000 0.30955988

Risultati

Page 32: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Esercizio 3Esercizio 3

• Costruire una stringa che mostri il valore di • con 6 cifre decimali; utilizzare poi un comando di

output per farlo stampare sul prompt.• Creare la stringa di input che consente di assegnare

alla variabile A una matrice generica.• Creare la stringa di input che consente di assegnare

alla variabile f la stringa

4ln(x)-7e-x.

Page 33: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Soluzioni esercizio 3Soluzioni esercizio 31. » str=[‘Il valore di pi greco è ‘, num2str(pi,7)]; % il secondo numero in % parentesi rappresenta il numero massimo di % cifre significative con cui si vuole % rappresentare pi » disp(str) Il valore di pi greco è 3.141593

2. » A=input('inserisci la matrice A = '); inserisci la matrice A = -3*ones(2,3) » 3. » f=input('inserisci la funzione ') inserisci la funzione '4*log(x)-7*exp(-x)' » f = 4*log(x)-7*exp(-x)

1. » str=[‘Il valore di pi greco è ‘, num2str(pi,7)]; % il secondo numero in % parentesi rappresenta il numero massimo di % cifre significative con cui si vuole % rappresentare pi » disp(str) Il valore di pi greco è 3.141593

2. » A=input('inserisci la matrice A = '); inserisci la matrice A = -3*ones(2,3) » 3. » f=input('inserisci la funzione ') inserisci la funzione '4*log(x)-7*exp(-x)' » f = 4*log(x)-7*exp(-x)

Page 34: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Presenza di un parametro in una stringaPresenza di un parametro in una stringa

k = 4.5051fs = x.^2+k*x-3

??? Error using ==> inline.fevalNot enough inputs to inline function.

Error in ==> fplot at 102x = xmin; y = feval(fun,x,args{4:end});

Error in ==> concatenaz_strin at 26fplot(fs,[-4 0])

k = 4.5051fs = x.^2+k*x-3

??? Error using ==> inline.fevalNot enough inputs to inline function.

Error in ==> fplot at 102x = xmin; y = feval(fun,x,args{4:end});

Error in ==> concatenaz_strin at 26fplot(fs,[-4 0])

clcclear all x=(-4:0.5:0)';k=4.50511fs='x.^2+k*x-3'fplot(fs,[-4 0])

La presenza di un parametro nella stringa fs produce errore nel comando fplot. Occorre trasformare il valore numerico di k in stringa e, di conseguenza, modificare la scrittura di fs.

La presenza di un parametro in una stringa può talvolta esserecausa di errore.

Page 35: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Espressione corretta della stringa Espressione corretta della stringa fsfsda utilizzareda utilizzare nel comando fplotnel comando fplot

ks=num2str(k)

% ks è la stringa '4.5051' (il valore di k è

% arrotondato con 4 decimali)

fs=['x.^2+',ks,'*x-3']

% fs è ottenuta come concatenazione di stringhe

fplot(fs,[-4 0])

Nota Bene: Il comando num2str(k) trasforma k in una stringa di cifre (le stesse cifre di k) con 4 cifre decimali.

Page 36: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

clcclear all x=(-4:0.5:0)';format longk=4.50511fs='x.^2+k*x-3'f=eval(fs); format short [x f]ks=num2str(k) % è un’approssimazione del valore a 4 % decimali!!!!!!fs=['x.^2+',ks,'*x-3'] f=eval(fs);[x f]

Programma stringhe:

In questo caso la stringaè valutata correttamente

Valutazione di stringaValutazione di stringa

Page 37: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Output del file Output del file stringhestringhe

k = 4.50511000000000fs = x.^2+k*x-3

ans =

-4.0000 -5.0204 -3.5000 -6.5179 -3.0000 -7.5153 -2.5000 -8.0128 -2.0000 -8.0102 -1.5000 -7.5077 -1.0000 -6.5051 -0.5000 -5.0026 0 -3.0000

k = 4.50511000000000fs = x.^2+k*x-3

ans =

-4.0000 -5.0204 -3.5000 -6.5179 -3.0000 -7.5153 -2.5000 -8.0128 -2.0000 -8.0102 -1.5000 -7.5077 -1.0000 -6.5051 -0.5000 -5.0026 0 -3.0000

ks = 4.5051fs = x.^2+4.5051*x-3

ans =

-4.0000 -5.0204 -3.5000 -6.5178 -3.0000 -7.5153 -2.5000 -8.0127 -2.0000 -8.0102 -1.5000 -7.5076 -1.0000 -6.5051 -0.5000 -5.0025 0 -3.0000

ks = 4.5051fs = x.^2+4.5051*x-3

ans =

-4.0000 -5.0204 -3.5000 -6.5178 -3.0000 -7.5153 -2.5000 -8.0127 -2.0000 -8.0102 -1.5000 -7.5076 -1.0000 -6.5051 -0.5000 -5.0025 0 -3.0000

ks è una stringa che ha solo 4 cifre decimali

L’utilizzo di un valore approssimato per il parametro ks, produce ovviamente valori approssimati sulla quarta cifra decimale.

Page 38: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

Presenza di un parametro in una Presenza di un parametro in una stringa: un altro caso di errore stringa: un altro caso di errore

clcclear all x=(-4:0.5:0)';k=4.50511;fs='x.^2+k*x-3';tab=tabella(x,fs)

function tab=tabella(x,fs)f=eval(fs);tab=[x f];

??? Error using ==> evalUndefined function or variable 'k'.

Error in ==> tabella at 2f=eval(fs)

Error in ==> concatenaz_strin at 26tab=tabella(x,fs)

??? Error using ==> evalUndefined function or variable 'k'.

Error in ==> tabella at 2f=eval(fs)

Error in ==> concatenaz_strin at 26tab=tabella(x,fs)

La funzione tabella nonha visibilità sul parametro k.

Page 39: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

function tab=tabella(x,fs)f=eval(fs);tab=[x f];

clcclear all x=(-4:0.5:0)';k= 4.50511;ks=num2str(k);fs=['x.^2+',ks,'*x-3'];tab=tabella(x,fs)

Un modo per eliminare il problema è ancora ricorrere all’utilizzodel comando num2str:

tab =

-4.0000 -5.0204 -3.5000 -6.5178 -3.0000 -7.5153 -2.5000 -8.0127 -2.0000 -8.0102 -1.5000 -7.5076 -1.0000 -6.5051 -0.5000 -5.0025 0 -3.0000

tab =

-4.0000 -5.0204 -3.5000 -6.5178 -3.0000 -7.5153 -2.5000 -8.0127 -2.0000 -8.0102 -1.5000 -7.5076 -1.0000 -6.5051 -0.5000 -5.0025 0 -3.0000

Con l’uso di num2str, la function non ha problemidi visibilità su k perché k nonè più un parametro numerico.

Page 40: 3 a -4 a lezione di laboratorio Laurea Specialistica in Ingegneria Matematica Laurea Specialistica in Ingegneria Matematica a.a. 2006-2007

function tab=tabella(x,fs)global kf=eval(fs);tab=[x f];

Altro modo di risolvere il problemaAltro modo di risolvere il problema

clcclear all global kx=(-4:0.5:0)';k= 4.50511;fs=['x.^2+k*x-3'];tab=tabella(x,fs)

tab =

-4.0000 -5.0204 -3.5000 -6.5179 -3.0000 -7.5153 -2.5000 -8.0128 -2.0000 -8.0102 -1.5000 -7.5077 -1.0000 -6.5051 -0.5000 -5.0026 0 -3.0000