Problem in evaluating the value of the derivative of multivariable function
Show older comments
I'm triyng to make a function that uses the Newton - Raphson method to solve a system of 2 equation
function [x_final, y_final, f1_final, f2_final, iter, errs, arrs] = Sys_equa_newton(f1, f2, x0, y0, err, max_iter)
%newton_sys - Description
%
% Syntax: y = newton_sys(input)
%
% Long description
% f1: first funtion of 2 variables
% f2: second funtion of 2 variables
% x0: initial value of x
% y0: initial value of y
% err: threshold value of error to stop
% max_iter: maximum iteration to stop
cur_err = 1;
iter = 0;
syms x y;
df1_x = matlabFunction(diff(f1, x));
df1_y = matlabFunction(diff(f1, y));
df2_x = matlabFunction(diff(f2, x));
df2_y = matlabFunction(diff(f2, y));
x = x0;
y = y0;
X_n = f1(x, y) * (df2_y(x, y)) - f2(x, y) * (df1_y(x, y));
Y_n = f2(x, y) * (df1_x(x, y)) - f1(x, y) * (df2_x(x, y));
Deno = df1_x(x, y) * df2_y(x, y) - df1_y(x, y) * df2_x(x, y);
arrs = zeros(2,max_iter);
errs = zeros(2,max_iter);
while ((cur_err > err) && (iter <= max_iter))
x_old = x;
x = x_old - X_n / Deno;
y_old = y;
y = y_old - Y_n / Deno;
err_x = abs(x - x_old) / x;
err_y = abs(y - y_old) / y;
arrs(:,iter+1) = [x; y];
errs(:,iter+1) = [err_x; err_y];
iter = iter+1;
cur_err = err_x + err_y;
end
x_final = x;
y_final = y;
f1_final = f1(x_final,y_final);
f2_final = f2(x_final,y_final);
end
But if I enter a function that only has the first power of x or y or both x and y are in first power, when i calculate the derivatrive (df1_x for example) then the new function only have 1 argument or 0 argument if both x and y are in first power.
So is there anyway to solve this problem, I'm trying to make a general function that can work with all 2 system of equation
Accepted Answer
More Answers (0)
Categories
Find more on Biological and Health Sciences in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!