[MatLab] Errore inline expression
Ho scritto il seguente codice MatLab:
Ma quando lo eseguo mi da l'errore:
Non riesco a capire a cosa sia dovuto, mi dareste una dritta?
Grazie
%FILE: newton
function [x,flag]=newton(x0,tol,max_it,f,df)
flag=1;
x=x0;
for i=1:max_it
x_old=x;
fx=feval(f,x_old);
dfx=feval(df,x_old);
if dfx==0
flag=1;
return;
end
step=-fx/dfx;
x=x_old+step;
if (abs(step)<tol)
flag=0;
return;
end
end
%FILE: stiff_newton
x_0=1;
x_max=100;
h=1/4;
max_it=10^3;
tol=10^(-5);
N=x_max/h;
y=zeros(N+1,1);
y(1)=1;
for i=1:N
sf=strcat('x*(1+15*',h,')-',y(i),'');
f=inline(sf);
sdf=strcat('1+15*',h,'');
df=inline(sdf);
[y,flag]=newton(x_0,tol,max_it,f,df);
if flag==1
return;
end
y(i+1)=y;
end
Ma quando lo eseguo mi da l'errore:
??? Error using ==> inlineeval at 15
Error in inline expression ==> x*(1+15*
Error in ==> inline.feval at 36
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Error in ==> newton at 6
fx=feval(f,x_old);
Error in ==> stiff_newton at 14
[y,flag]=newton(x_0,tol,max_it,f,df);
Non riesco a capire a cosa sia dovuto, mi dareste una dritta?
Risposte
[RANT]Io non ho mai capito perché tutti i professori che insegnano matlab nelle università italiane insegnano inline al posto delle anonymous functions. Sono incredibilmente più facili da definire e usare e non hanno alcuna limitazione se comparate con le funzioni definite attraverso inline. In un ormai lontanissimo passato erano forse una novità, ma conosco Matlab da probabilmente 5 anni e qualsiasi versione che io abbia mai usato supportava le funzioni anonime. Tralaltro, guardando la documentazione ufficiale di inline si legge che tale funzione è considerata deprecata e verrà eliminata in future versioni.. Se il vostro codice non funzionerà su future versioni, vi avevo avvisato..[/RANT]
Venendo alla tua funzione.. Ti invito a stampare a video il risultato di
Non fa quello che ti immagini..
Venendo alla tua funzione.. Ti invito a stampare a video il risultato di
sf=strcat('x*(1+15*',h,')-',y(i),'');
Non fa quello che ti immagini..
x*(1+15* )-
Lascia degli spazi bianchi al posto dei valori di $h$ e $y(i)$...come mai?
Grazie! 
Comunque ho appena risolto usando
prima della strcat
Comunque ho appena risolto usando
sh=num2str(h); sy=num2str(y(i));
prima della strcat