MATLAB牛顿法求解非线性方程组2

%% 牛顿法主程序
clear;clc
format;
x0=[0 0];   % 迭代初始值
eps = 0.00001;  % 定位精度要求
for i = 1:10
    f = double(subs(fun(x0),{'x1' 'x2'},{x0(1) x0(2)}));
    df = double(subs(dfun(x0),{'x1' 'x2'},{x0(1) x0(2)}));  % 得到雅克比矩阵
    x = x0 - f/df;
    if(abs(x-x0) < eps)
        break;
    end
    x0 = x; % 更新迭代结果
end
disp('定位坐标:');
x
disp('迭代次数:');
i
%% 定义非线性方程组
function f=fun(x);
%定义非线性方程组如下
%变量x1 x2
%函数f1 f2
syms x1 x2
f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);
f2 = sqrt(x1^2 + (x2-4)^2)-5;
f=[f1 f2];
end
%% 定义雅克比矩阵
function df=dfun(x);
f=fun(x);
df=[diff(f,'x1');diff(f,'x2')]; %雅克比矩阵
end

运行结果如下:

定位坐标:

x =

    0.0000   -1.0000

迭代次数:

i =

     4

发布了59 篇原创文章 · 获赞 4 · 访问量 3190

猜你喜欢

转载自blog.csdn.net/weixin_41639107/article/details/102330705
今日推荐