1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > MATLAB求解非线性方程组(牛顿拉夫逊方法)

MATLAB求解非线性方程组(牛顿拉夫逊方法)

时间:2018-07-04 06:05:08

相关推荐

MATLAB求解非线性方程组(牛顿拉夫逊方法)

文章目录

MATLAB求解非线性方程组(牛顿拉夫逊方法)Equation.m 函数牛顿拉夫逊方法迭代求解

MATLAB求解非线性方程组(牛顿拉夫逊方法)

Equation.m 函数

这个函数用来写非线性方程组,注意整理成标准形式

function [f,variable]=Equation(~) %定义非线性方程组,方程组右端项为0 syms x1 x2 x3 x4 %x5 x6 x7 x8 x9 x10 x11 x12f1=x1+x1*x2+x3-8*x4-8;f2=x3+x2+x1*x3+x4*x1+x4;f3=x1*x1+x3*x4-5+x3+x4;f4=x2+x4+x3*x4;%f5=x6*x5*x4;%f6=%f=[f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ];f=[f1 f2 f3 f4];variable=[x1 x2 x3 x4];end

牛顿拉夫逊方法迭代求解

clear[f,variable]=Equation()N=5;%迭代次数[row,size]=size(variable);x0=zeros(size,1); %初值for i =1:N%delta_y=zeros(size,1)-double(subs(Equation(),...%{'x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'x7' 'x8' 'x9' 'x10' 'x11' 'x12'},...%{x0(1) x0(2) x0(3) x0(4) x0(5) x0(6) x0(7) x0(8) x0(9) x0(10) x0(11) x0(12)})); %J=double(subs(jacobian(f,variable);...% {'x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'x7' 'x8' 'x9' 'x10' 'x11' 'x12'},...%{x0(1) x0(2) x0(3) x0(4) x0(5) x0(6) x0(7) x0(8) x0(9) x0(10) x0(11) x0(12)})); delta_y=zeros(size,1)-double(subs(Equation(), ...{'x1' 'x2' 'x3' 'x4' }, ...{x0(1) x0(2) x0(3) x0(4)}))'; J=double(subs(jacobian(f,variable), ...{'x1' 'x2' 'x3' 'x4' }, ...{x0(1) x0(2) x0(3) x0(4)}));delta_x=J\delta_yx0=x0+delta_x;if(norm(delta_y,"inf")<0.5)%判定收敛disp(i);disp(x0);break;endend

本例运行结果输出:

[x1 + x3 - 8*x4 + x1*x2 - 8, x2 + x3 + x4 + x1*x3 + x1*x4, x1^2 + x3 + x4 + x3*x4 - 5, x2 + x4 + x3*x4][x1, x2, x3, x4]delta_x = 4×1 48-505delta_x = 4×1 -23.97282.5888-0.0210-2.4835delta_x = 4×1 -11.92241.5449-0.2289-1.0432delta_x = 4×1 -4.923710.1295-12.811511.3410delta_x = 4×1 -1.91971.86965.1976-6.3692delta_x = 4×1 -0.7955-2.13952.5462-2.7440delta_x = 4×1 -0.3771-1.58591.1497-0.9999delta_x = 4×1 -0.1128-0.46650.3133-0.2430delta_x = 4×1 -0.0095-0.03760.0249-0.018493.96656.9032-3.82972.4397

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。