⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mtlab程序.txt

📁 牛顿法解非线性方程
💻 TXT
字号:
function[p1,err,k,y]=newton(f,df,p0,delta,max1)
%f是非线性函数
%df是f的微商
%p0是初始值
%delta是给定允许误差
%max1是迭代的最大次数
%p1是牛顿法求得的方程的近似值
%err是p0的误差估计
%k是迭代次数
%y=f(p1)
p0,feval('f',p0)
for k=1:max1
    p1=p0-feval('f',p0)/feval('df',p0);
    err=abs(p1-p0);
    p0=p1;
    p1,err,k,y=feval('f',p1)
    if(err<delta)|(y==0),
        break,end
    p1,err,k,y=feval('f',p1)
end



function y=f(x)
y=x^3-3*x+2;

function y=df(x)
y=3*x^2-3;

newton('f','df',1.2,10^(-6),10)




牛顿法解非线性方程组
function snow_whzh
syms x1 y1 fi1 x2 y2 fi2 x3 y3 fi3 t ti;
q=[x1;y1;fi1;x2;y2;fi2;x3;y3;fi3];  %变量列表
Q=[fi1-pi*t-pi/4;
   x1-cos(fi1);   %fi1是已知变量,初值为pi/4
   y1-sin(fi1);
   x2-2*cos(fi2)-2*x1;
   y2-2*sin(fi2);
   y1-y2;
   x3-x2-2*cos(fi2);
   y3;
   fi3;];   %Q是约束方程——非线性方程组
tn=input('过程分析的最大时间量tn=');
J=snow_jacobi(Q,q);
disp(q');
for ti=0:tn/10:tn
    Q=subs(Q,t,ti)      
    q=snow_NR(Q,J,q);
    disp(q');
end

function x=snow_NR(Q,J,x)
%用N-R法求解非线性方程组
%其中Q是约束方程向量,J是约束方程雅可比,%X是各个变量组成的向量
m=length(x);
for i=1:m
    x0(i)=1-1/i;
end
x0=x0';
N=200; %最大迭代次数
k=1;
while k<N
    xx=x0;
    QQ=subs(Q,x(1),x0(1));
    for i=2:m
        QQ=subs(QQ,x(i),x0(i));
    end
    %disp(QQ);
    %QQ=numeric(QQ);
    JJ=subs(J,x(1),x0(1));
    for i=2:m
        JJ=subs(JJ,x(i),x0(i));
    end
    %JJ=numeric(JJ);
    if abs(det(JJ))<eps %JACOBI矩阵奇异时停止计算
        break ;
    end
    x0=x0-JJ\QQ;
    x0=numeric(x0);
    if norm(x0-xx)<eps  %范数 
        break;
    end
    k=k+1;
end
x=x0;

function A=snow_jacobi(B,q)
%求约束方程的雅可比矩阵
n=length(B);
m=length(q);
for i=1:n
    for j=1:m
        A(i,j)=diff(B(i),q(j));
    end
end






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -