MATLAB Newton Raphson Method with a vector function
7 views (last 30 days)
Show older comments
Hi! I am trying to use Newton Raphson Method to solve the following problem: Given a complex matrix $K$, let our vector variable be
, where
and
. Also, my function is
. I want to find a vector $p$ such that
. To do that I use the following Newton Raphson algorithm
, where the
is a Jacobian (if Jacobian is singular, I think we can use a Moore-Penrose). I tried to modify the code here: https://www.mathworks.com/matlabcentral/answers/753414-matlab-newton-raphson-method-with-a-function-with-array-matrix-variables?s_tid=mwa_osa_a
, where
. Also, my function is
. I want to find a vector $p$ such that
, where the Unfortunately, it is not working properly, even when
. Can you please help me to fix it?
K=2.*rand(2,2)-1*ones(2,2)+i*(2.*rand(2,2) -1*ones(2,2));
K1=K+K';
K2=K'*K;
I=eye(2,2);
f = @(x1,x2,x3,x4) [K1*[x1 x2]'-x3*K2*[x1 x2]'-x4*[x1 x2]'; [x1 x2]*K2*[x1 x2]'-1; [x1 x2]*[x1 x2]'-1];
df = @(x1,x2,x3,x4) [K1-x3*K2-x4*I -K2*[x1 x2]' -[x1 x2]'; [x1 x2]*K2 0 0; [x1 x2] 0 0];
n=10
for i= 1:n
x10 = 0.001;
x20 = 0.001;
x30 = 0.001;
x40 = 0.001;
y = newtonraphson(f, df, x10, x20, x30, x40, n);
fprintf('%.4f \n', y);
end
function y = newtonraphson(f, df, x10, x20, x30, x40, n)
rounding = 5*10^-(4);
for i=1:100
f0 = f(x10,x20,x30,x40);
f0_der=df(x10,x20,x30,x40);
y=[x10 x20 x30 x40]'-f0_der\f0;
err=abs(y-[x10 x20 x30 x40]');
if err<ones(4,1)*rounding
break;
end
x10=y(1);
x20=y(2);
x30=y(3);
x40=y(4);
end
fprintf('The Root is : %f \n',y);
fprintf('No. of Iterations : %d\n',i);
end
0 Comments
Accepted Answer
Torsten
on 19 Aug 2022
Edited: Torsten
on 19 Aug 2022
You have 7 equations for 4 unknowns. This won't give an exact solution, but only a solution in the least-squares sense.
K=2.*rand(2,2)-1*ones(2,2)+i*(2.*rand(2,2) -1*ones(2,2));
K1=K+K';
K2=K'*K;
x = lsqnonlin(@(x) fun(x(1),x(2),x(3),x(4),K1,K2),ones(4,1))
res = norm(fun(x(1),x(2),x(3),x(4),K1,K2))
function res = fun(x1,x2,x3,x4,K1,K2);
res = zeros(7,1);
res(1:2) = real(K1*[x1 x2]'-x3*K2*[x1 x2]'-x4*[x1 x2]');
res(3:4) = imag(K1*[x1 x2]'-x3*K2*[x1 x2]'-x4*[x1 x2]');
res(5) = real([x1 x2]*K2*[x1 x2]'-1);
res(6) = imag([x1 x2]*K2*[x1 x2]'-1);
res(7) = [x1 x2]*[x1 x2]'-1;
end
1 Comment
Torsten
on 19 Aug 2022
That's an optimization problem, not a root-finding problem.
Use MATLAB's "fmincon" to solve.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!