利用BP神经网络求解非线性方程组

利用BP神经网络求解非线性方程组

待求解问题:

在这里插入图片描述

思路

在这里插入图片描述

我们将坐标 ( x 1 , x 2 , x 3 ) (x_1,x_2,x_3) (x1,x2,x3)对应的函数值 [ u ( x 1 , x 2 , x 3 ) , v ( x 1 , x 2 , x 3 ) , w ( x 1 , x 2 , x 3 ) ] [u(x_1,x_2,x_3),v(x_1,x_2,x_3),w(x_1,x_2,x_3)] [u(x1,x2,x3),v(x1,x2,x3),w(x1,x2,x3)]作为输入向量,而将坐标 ( x 1 , x 2 , x 3 ) (x_1,x_2,x_3) (x1,x2,x3)作为目标向量,去初值点 x 0 x_0 x0附近多个坐标对应的函数值向量作为输入,训练神经网络。

[ 0 , 0 , 0 ] [0,0,0] [0,0,0]作为输入输入到训练好的神经网络中,就可以得到该线性方程组的一个近似解 x 1 ∗ , x 2 ∗ , x 3 ∗ x_1^*,x_2^*,x_3^* x1,x2,x3

matlab代码

  • u ( x 1 , x 2 , x 3 ) u(x_1,x_2,x_3) u(x1,x2,x3)
function u=u(x)
u = 3*x(1)-cos(x(2)*x(3))-0.5;
  • v ( x 1 , x 2 , x 3 ) v(x_1,x_2,x_3) v(x1,x2,x3)
function v=v(x)
v = x(1)^2 -81 * (x(2)+0.1)^2+sin(x(3))+1.06;
  • w ( x 1 , x 2 , x 3 ) w(x_1,x_2,x_3) w(x1,x2,x3)
function w=w(x)
w = exp(-x(1)*x(2))+20*x(3)+(10*pi - 3) / 3;
  • 主程序
% ----------------------------------
% 使用 神经网络求解非线性方程组
% 以坐标(x,y,z)为目标向量
% 坐标(x,y,z)对应的各个非线性函数的值(u(x,y,z), v(x,y,z), w(x,y,z))为输入向量
% 训练网络后,输入(0,0,0)对应的输出即非线性方程组的一个近似解
% -----------------------------------
x0 = [0.1 0.1 -0.1]; %初值

x = ones(200,3); % 根据初值得到200个点
for i = 1:200
    x(i,:) = x0 + (i - 100) * 0.01;
end
P = zeros(3,200); % 输入样本矩阵,每列为一个样本
for i = 1:200
    P(:,i) = [u(x(i,:)) v(x(i,:)) w(x(i,:))];
end
T = x'; % 目标矩阵,每列为一个目标向量

net = newff([-100,100; -100,100; -100,100;],[3 3],{'tansig','logsig'},'traingd'); % 输入3,输出3!!!!(注意网络输入与目标向量的维数对应)
net.trainParam.epochs = 15000; % 迭代15000次
net.trainParam.goal = 0.01; % 误差
LP.lr = 0.1; % 学习率

% 训练网络
net = train(net, P, T);

% 给出非线性方程的近似解
res = sim(net, [0;0;0]) 

求解结果为:利用BP神经网络求解非线性方程组_第1张图片

此时,解和真实解还是有误差,可以调整输入样本来得到更好的近似解。

参考文献:用人工神经网络求解非线性方程组的一种方法

你可能感兴趣的:(利用BP神经网络求解非线性方程组)