[Matlab] Metodo di Newton per funzioni a valori vettoriali

Dalfi1
Salve ragazzi, sapreste dirmi come procedere per implementare in Matlab tale metodo? Non so come comportarmi con le funzioni a valori vettoriali. Per quelle scalari, grazie alla function "inline" potevo inserire la funzione direttamente in input mettendola tra due apici ma qui non so proprio come fare :(. Al posto della funzione in input dovrei dare un vettore?

Risposte
apatriarca
Non esiste alcuna differenza tra funzioni con input scalari e vettoriali da questo punto di vista.

Dalfi1
Quindi, dato che prima ad esempio per $f(x)=x^2-1$ scrivevo newton('$x^2-1$',ecc) ora come dovreo comportarmi ad esempio per $f(x,y)=(x-y,2x-y)$ (esempio a caso)? Cioè cosa dovrei dare in input? Scusate ma non capisco :(

apatriarca
Ma hai provato a dare una occhiata alla sempre molto ricca documentazione di matlab?

Puoi usare inline come hai sempre fatto
f = inline("[x - y, 2*x - y]", "x", "y")

oppure puoi usare le funzioni anonime
f = @(x, y) [x - y, 2*x - y]

Dalfi1
Grazie infinite :)
Hai ragione, errore mio, mi ero fermato alla prima parte dell'help di inline :(

EDIT: Ecco l'algoritmo. Sembra funzionare bene. Secondo voi può andare? Posso ridurre qualche riga di codice?

function [ x0,iter ] = newtonvect( f1,x0,tol,imax )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here

f2=sym(f1);
t=symvar(f2);
j=jacobian(f1,t);
r=symvar(j);
val=subs(f1,t,x0);
m=length(r);
iter=0;
while norm(val)>tol & iter<imax
    x1=x0(1:m);
    jac=subs(j,r,x1);
    z=Gausselpiv(jac,-val);
    x0=x0+z';
    iter=iter+1;
    val=subs(f1,t,x0);
end


end

Dalfi1
Ragazzi ho un problema. Supponiamo di avere la funzione $f(x,y)=(x-y,x+y^2)$. Lo jacobiano che calcola Matlab è $((1,-1),(1,2y))$. Come faccio allora in questo caso a valutarlo ad esempio in $(0,0)$ se la prima variabile non compare?

apatriarca
Anche se \(x\) non compare, Lo Jacobiano dovrebbe comunque essere una funzione da \(\mathbb R^2\) a \(GL(2)\) e dovrebbe quindi essere possibile passare due argomenti alla funzione. Ma non ho mai lavorato con gli strumenti di calcolo simbolico di matlab per cui non ti so dare molti consigli su questa cosa.

Dalfi1
Ho risolto creando a parte una function che calcola Lo jacobiano sfruttando proprio la sua definizione :)

Raptorista1
[xdom="Raptorista"]Sposto nella sezione più appropriata! :evil:[/xdom]

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.