Borrar filtros
Borrar filtros

handles for functions of several variables

12 visualizaciones (últimos 30 días)
Stina Ravdna Lorås
Stina Ravdna Lorås el 18 de Mzo. de 2021
Comentada: Stina Ravdna Lorås el 19 de Mzo. de 2021
Im trying to make function handles that make it possible to calculate functions with different values for x1 and x2, but I cannot make it work. Please help?
(This is not the entire code, and it is split into two files)
syms x1 x2
x0 = [-1; -1];
f = @f_function;
J = @J_function;
X = NewtonsMethod(f, J, x0, lim, N)
function f = f_function(x)
f=[(x1*x2-2);
((x1.^4/4) + (x2.^3/3) -1)];
end
function J = J_function(x)
J = jacobian(f, [x1,x2]);
end
File:NewtonsMethod
xn = x0; % initial estimate
n = 1; % iteration number
fn = f(xn); % save calculation
iterate = norm(fn,Inf) > tol;
while iterate
xn = xn - J(xn)\fn;
n = n+1;
X(:,n) = xn;
fn = f(xn);

Respuesta aceptada

Walter Roberson
Walter Roberson el 19 de Mzo. de 2021
syms x1 x2
x0 = [-1; -1];
fsym = f_function(x1,x2);
f = matlabFunction(fsym, 'vars', {[x1, x2]})
f = function_handle with value:
@(in1)[in1(:,1).*in1(:,2)-2.0;in1(:,1).^4./4.0+in1(:,2).^3./3.0-1.0]
J = matlabFunction(jacobian(fsym), 'vars', {[x1, x2]})
J = function_handle with value:
@(in1)reshape([in1(:,2),in1(:,1).^3,in1(:,1),in1(:,2).^2],[2,2])
X = NewtonsMethod(f, J, x0, lim, N)
Unrecognized function or variable 'lim'.
function f = f_function(x1,x2)
f=[(x1*x2-2);
((x1.^4/4) + (x2.^3/3) -1)];
end

Más respuestas (1)

Jan
Jan el 18 de Mzo. de 2021
Editada: Jan el 18 de Mzo. de 2021
Do you get an error message?
What is x1 and x2 in your functions "f_function" and "J_function"? Do you mean: x(1) and x(2) ?
Be careful with the unary minus in vectors:
f=[(x1*x2-2);
((x1.^4/4) + (x2.^3/3) -1)];
% ^
This can confuse the parser. See:
[1 1] % [1, -1]
[1 -1] % [1, -1]
[1 - 1] % [2]
  2 comentarios
Stina Ravdna Lorås
Stina Ravdna Lorås el 19 de Mzo. de 2021
x1 and x2 is x(1) and x(2) = x.
I used parathesis to avoid the misunderstanding between row or function.
I've now changed my handles into this:
f = @(x)[(x(1)*x(2)-2);
((x(1).^4/4)+(x(2).^3/3)-1)];
J = @(x)jacobian(f, x);
But it is still wrong...
Stina Ravdna Lorås
Stina Ravdna Lorås el 19 de Mzo. de 2021
Thank you for answering though! :)

Iniciar sesión para comentar.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by