Upload
teofila-cortese
View
219
Download
0
Embed Size (px)
Citation preview
33aa-4-4aa lezione di laboratorio lezione di laboratorio
Laurea Specialisticain
Ingegneria Matematica
Laurea Specialisticain
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
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
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
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 .
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
– 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
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»
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).
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!!!!
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
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
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
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>>
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
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)
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>>
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.
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
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.
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
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.
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.
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
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
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.
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
» 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
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
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
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
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.
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)
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.
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.
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
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.
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.
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.
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