看看下一个程序是如何改变大眼白猫迭代法求解后,现实的矩阵奇怪,跪求温暖的草丛
————————————————————————————————
%首先创建函数fun
%storage方程被编程为将fun.m保存到工作路径中,如下所示:
functionf=fun(x;
%定义的非线性方程如下
%变量x1 x2 x3
%函数f1 f2 f3
syms x1 x2 x3 x4 x5 x6 x7
f1=10*(348.51-269.62 )-x1* ) 275.74-x2 );
f2=10*(669.98-348.51 )-x1 * (x3-275.74 );
f3=10*(682.43-669.98 )-x1* ) 418.53-x3 );
f4=10*(x4-627.85 )-X5 * (X6-100.11 );
f5=10*(627.85-271.39 )-x5* ) 100.11-x7 );
f6=10*(271.39-268.93 )-x5* ) x7-104.29 );
F7=x4-682.43-0.8 * (682.43-648.38 );
f=[f1 f2 f3 f4 f5 f6 f7];
————————————————————————————————
创建%函数dfun
用于求%方程式的雅可比矩阵将dfun.m保存在工作路径中:
functiondf=dfun(x;
用于求解%方程式的雅可比矩阵被存储在dfun中
f=fun(x;
df=[diff(f,' x1 ' ); DIFF(f,) x2 ); DIFF(f,) x3 ); DIFF(f,) x4 ); DIFF(f,) x5 ); DIFF(f,) x6 ); diff(f,) x7 ) );
df=conj(df ';
————————————————————————————————
编程%大眼白猫法求解非线性方程将newton.m保存在工作路径中:
functionx=Newton(x0,eps,n );
con=0;
%这里,x0是迭代初始值eps是精度,n需要用最大迭代步骤数con记录结果是否收敛
for i=1:N;
f=subs(fun ) x0 )、) x1 ) x2 ) x3 ) x4 ) x5 ) x6 ) x7 )、) x0 ) x0(2) x0 )3) x0 )4) x0 ) x0 )5) )。
df=subs(dfun(x0 )、(x1 ) (x2 ) ) x3 ) (x4 ) (x5 ) ) x6 ) }、(x0 ) x0 )2) x0 )3) x0 )5) x0 ) x0 )5)
x=x0-f/df;
forj=1:长度(x0;
il(I,j )=x ) j;
结束
ifnorm(x-x0 ) )。
con=1;
布雷克;
结束
x0=x;
结束
%以下为将迭代过程写入txt文档文件名iteration.txt
FID=fopen(iteration.txt ),) w );
frintf(FID,' iteration ' );
forj=1:length(x0 ) )
frintf(FID,' x%d ',j );
结束
for j=1:i
frintf(FID,'nm ',j );
fork=1:length(x0 ) )
frintf(FID,'.6f ',il ) ) j,k );
结束
结束
if con==1
fprintf(FID,'n计算结果收敛!' );
结束
if con==0
frintf(FID,'n重复步骤数过多,可能无法收敛!' );
结束
fclose(FID;
————————————————————————————————
运行%程序
在matlab中输入以下内容
Newton (0. 10.10.10.10.10.1 )、0.000001、20 ) )。
[ img ] file ://c :/users/administrator.PPT v3-2012 08 30l/appdata/roaming/Tencent/users/310498102 /
————————————————————————————————