非线性方程组求解Matlab实现 (多元牛顿方法、Broyden方法、Broyden方法2)
生活随笔
收集整理的這篇文章主要介紹了
非线性方程组求解Matlab实现 (多元牛顿方法、Broyden方法、Broyden方法2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
三元牛頓方法(非線性方程中三個未知數(shù))
function jie = multvarnewton3(g1,g2,g3,c) e=[inf,inf,inf]; syms x y z k1=g1(x,y,z);k2=g2(x,y,z);k3=g3(x,y,z); while(norm((e-c),inf)>0.5*10^-6) f1=diff(k1,x); f2=diff(k1,y); f3=diff(k1,z); f4=diff(k2,x); f5=diff(k2,y); f6=diff(k2,z); f7=diff(k3,x); f8=diff(k3,y); f9=diff(k3,z); d(1)=subs(subs(subs(k1,x,c(1)),y,c(2)),z,c(3)); d(2)=subs(subs(subs(k2,x,c(1)),y,c(2)),z,c(3)); d(3)=subs(subs(subs(k3,x,c(1)),y,c(2)),z,c(3)); a(1,1)=subs(subs(subs(f1,x,c(1)),y,c(2)),z,c(3)); a(1,2)=subs(subs(subs(f2,x,c(1)),y,c(2)),z,c(3)); a(1,3)=subs(subs(subs(f3,x,c(1)),y,c(2)),z,c(3)); a(2,1)=subs(subs(subs(f4,x,c(1)),y,c(2)),z,c(3)); a(2,2)=subs(subs(subs(f5,x,c(1)),y,c(2)),z,c(3)); a(2,3)=subs(subs(subs(f6,x,c(1)),y,c(2)),z,c(3)); a(3,1)=subs(subs(subs(f7,x,c(1)),y,c(2)),z,c(3)); a(3,2)=subs(subs(subs(f8,x,c(1)),y,c(2)),z,c(3)); a(3,3)=subs(subs(subs(f9,x,c(1)),y,c(2)),z,c(3)); a=double(a); d=double(d); e=c; s=a\d';c=(c'-s)'; jie=c; end end說明:輸入中g(shù)1,g2,g3為三個方程,c為初始估計
二元牛頓方法(非線性方程中二個未知數(shù))
function jie= multvarnewton(g1,g2,c) e=[inf,inf]; syms x y k1=g1(x,y);k2=g2(x,y); while(norm((e-c),inf)>0.5*10^-6) f1=diff(k1,x); f2=diff(k1,y); f3=diff(k2,x); f4=diff(k2,y); d(1)=subs(subs(k1,x,c(1)),y,c(2)); d(2)=subs(subs(k2,x,c(1)),y,c(2)); a(1,1)=subs(subs(f1,x,c(1)),y,c(2)); a(1,2)=subs(subs(f2,x,c(1)),y,c(2)); a(2,1)=subs(subs(f3,x,c(1)),y,c(2)); a(2,2)=subs(subs(f4,x,c(1)),y,c(2)); a=double(a); d=double(d); e=c; s=a\d';c=(c'-s)'; jie=c; end end說明:輸入中g(shù)1,g2為三個方程,c為初始估計
Broyden方法
function jie = Broyden(f,tol,x0) [m,n]=size(x0); a=eye(n); x=x0-a\f(x0); while(norm((x-x0),inf)>tol)k1=f(x)-f(x0);k2=x-x0;a=a+(k1-a*k2)*k2'/(k2'*k2);x0=x;x=x-a\f(x); end jie=x; end說明:輸入中f為多個方程組成的列矩陣,x0為初始估計(以列向量表示),tol為控制精度,以向量的無窮范數(shù)表示。如控制在小數(shù)點后六位則tol=0.5*10^-6。
Broyden方法2
function jie= Broyden2(f,tol,x0) [m,n]=size(x0); a=eye(n); x=x0-a*f(x0); while(norm((x-x0),inf)>tol)k1=f(x)-f(x0);k2=x-x0;a=a+((k2-a*k1)*k2'*a)/(k2'*a*k1);x0=x;x=x-a*f(x); end jie=x; end說明:輸入中f為多個方程組成的列矩陣,x0為初始估計(以列向量表示),tol為控制精度,以向量的無窮范數(shù)表示。如控制在小數(shù)點后六位則tol=0.5*10^-6。
總結(jié)
以上是生活随笔為你收集整理的非线性方程组求解Matlab实现 (多元牛顿方法、Broyden方法、Broyden方法2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方程组求解matlab实现(朴素高斯求解
- 下一篇: 插值MATLAB实现(牛顿差商、插值误差