| 
 
 《力学中的数学方法》第一节课布置的作业,用牛顿迭代法求解多变量非线性方程组,我用手算的方法算了很长时间,浪费了好多时间,后来一想可以用matlab几分钟就可以算完,所以我特别想记录一下。。。。。。。  
%%定义一个三元非线性方程组  clear;clc;close all  syms x y z ? ? ? ? ? ? ? ? % 定义符号变量x y z  f1=x*y-cos(x)+z*z-3.6; %方程1  f2=x*x-2*y*y+z-2.8; %方程2  f3=3*x+y*sin(z)-2.8; %方程3  f=[f1;f2;f3]; %三个方程组成方程组  %%计算雅可比行列式  J=[diff(f1,x) diff(f1,y) diff(f1,z);diff(f2,x) diff(f2,y) diff(f2,z);diff(f3,x) diff(f3,y) diff(f3,z);];  %%自定义牛顿迭代法,求方程组的解  n=1; ? ? ? ? ? ? ? ? ? ? ?%记录迭代次数  x0=[0;1;1]; ? ? ? ? ? ? ? %迭代初始值  E=1;  while E>1e-3 ? ? ? ? ? ? ?%如果精度不满足要求,则一直进行迭代,直到满足要求为止  ? ? x=x0(1); ? ? ? ? ? ? ?%给x赋初始值  ? ? y=x0(2); ? ? ? ? ? ? ?%给y赋初始值  ? ? z=x0(3); ? ? ? ? ? ? ?%给z赋初始值  ? ? x1=x0-inv(eval(J))*eval(f); ?%迭代计算,用x0迭代得到x1  ? ? E=max(abs((x1-x0)./x1)); ? ? ?%计算求解精度  ? ? x0=x1; ? ? ? ? ? ? ? ? ?%将当前得到的x1赋值给x0,作为下一次迭代的初始值  ? ? n=n+1; ? ? ? ? ? ? ? ? ?%迭代次数加1  end  %%显示方程组的解,并将求解结果代回方程组,验算求解结果  x=x1(1) %x的求解结果  y=x1(2) %y的求解结果  z=x1(3) %z的求解结果  eval(f) 
                
        
    
 
 |