matlab使用解N元方程组

上传人:痛*** 文档编号:111698286 上传时间:2022-06-21 格式:DOC 页数:20 大小:86.50KB
收藏 版权申诉 举报 下载
matlab使用解N元方程组_第1页
第1页 / 共20页
matlab使用解N元方程组_第2页
第2页 / 共20页
matlab使用解N元方程组_第3页
第3页 / 共20页
资源描述:

《matlab使用解N元方程组》由会员分享,可在线阅读,更多相关《matlab使用解N元方程组(20页珍藏版)》请在装配图网上搜索。

1、试着用C语言编程解N元方程组*include *define M 10 float fdel(float *p,int n) int i; float sum=0; for(i=0;isum+=*(p+i); sum/=n; return (fabs(sum); void chu(float *p) int i; for(i=0;i*(p+i)=999; return ; void print(float *p,int n) int i; for(i=0;iprintf(*%d=%f ,i+1,*(p+i); return ; /*void scan(float *p,int n) int i

2、,j; for(i=0;ifor(j=0;jprintf( a%d%d=,i+1,j+1); scanf(%f,*(p+i)+j); return ;*/ void den(float *a,float *b,int n) int i; for(i=0;i*(a+i)=*(b+i); return ; void jie(float *p0,float aMM,float *p,float *b,int n) float sum=0; int i,j; for(i=0;i for(j=0;jif(i!=j) sum=sum+aij*p0j; else n=aij;continue; *(p+i)

3、=*(b+i)-sum/n; main() float *0M,*iMM,bM,*M; int i,j,n; chu(*0); chu(b); chu(*); for(i=0;iprintf(*0=%f ,*0i); printf(b=%f ,bi); printf(*=%f ,*i); for(i=0;ifor(j=0;j*iij=0; printf(shu ru wuizhishu geshu n=); scanf(%d,&n); printf( shu ru fangchengzu gege *ishu aij= ); for(i=0;ifor(j=0;j printf( a%d%d=,

4、i+1,j+1); scanf(%f,&*iij); printf(*11=%f,*i11); for(i=0;iprint(*(*i+i),n); for(i=0;iprintf( abs=%f,fdel(*(*i+i),n); *include doublef(double*) doubley; y=2*-9*+12*-3; return(y); intmain() doublet,a=0,b=1,tmp; t=(a+b)/2; while(f(b)-f(a)1e-8) t=(a+b)/2; tmp=f(t); if(tmp=0) break; elseif(tmp0) a=t; else

5、 b=t; printf(该方程在(0,1)之间的根是%.8f,f(%.8f)=%.8fn,t,t,f(t); return0; 牛顿迭代法Newtons method又称为牛顿-拉夫逊方法Newton-Raphson method,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求准确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(*)的泰勒级数的前面几项来寻找方程f(*) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(*) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另

6、外该方法广泛用于计算机编程中。设r是f(*) = 0的根,选取*0作为r初始近似值,过点*0,f(*0)做曲线y = f(*)的切线L,L的方程为y = f(*0)+f(*0)(*-*0),求出L与*轴交点的横坐标 *1 = *0-f(*0)/f(*0),称*1为r的一次近似值。过点*1,f(*1)做曲线y = f(*)的切线,并求该切线与*轴交点的横坐标 *2 = *1-f(*1)/f(*1),称*2为r的二次近似值。重复以上过程,得r的近似值序列,其中*(n+1)=*(n)f(*(n)/f(*(n),称为r的n+1次近似值,上式称为牛顿迭代公式。解非线性方程f(*)=0的牛顿法是把非线性方

7、程线性化的一种近似方法。把f(*)在*0点附近展开成泰勒级数 f(*) = f(*0)+(*0)f(*0)+(*0)2*f(*0)/2! + 取其线性局部,作为非线性方程f(*) = 0的近似方程,即泰勒展开的前两项,则有f(*0)+f(*0)(*0)=f(*)=0 设f(*0)0则其解为*1=*0f(*0)/f(*0) 这样,得到牛顿法的一个迭代序列:*(n+1)=*(n)f(*(n)/f(*(n)。对于做应用的来说,更关心的是怎么实现。找了一下算法,发现主要是MATLAB编程语言和C语言。这个是我首先找到的MATLAB的代码-%牛顿迭代法 解方程y=*.2-*-1*=1.5;format

8、long;*1=*-func2_1(*)/func2_1_1(*);if(abs(*1)1e-6|abs(func2_1(*)1e-6) *=*1; *1=*-func2_1(*)/func2_1_1(*); if(abs(*1)1.5) delt=abs(*1-*); else delt=abs(*1-*)/*1); end if func2_1(*1)=0 break end enddisp(解方程y=*.2-*-1,牛顿迭代法结果)*1%编辑函数function y=func2_1(*)y=*.2-*-1;function y=func2_1_1(*)y=2*-1-没用过MATLAB,但

9、是语言是相通的,修改一下即可。呵呵,还是vb简单以下是VB代码Sub p1()牛顿迭代法n = 0* = 2* = 4设定初值*1 = * - func2_1(*) / func2_1_1(*)If Abs(*1) 0.000001 or Abs(func2_1(*) 0.000001) n = n + 1 * = *1 *1 = * - func2_1(*) / func2_1_1(*) If (Abs(*1) *) Then delt = Abs(*1 - *) Debug.Print *1, delt, 1 Else delt = Abs(*1 - *) / *1) Debug.Prin

10、t *1, delt, 2 End If If func2_1(*1) = 0 Then E*it Do End IfLoopDebug.Print 牛顿迭代法结果, *1, 迭代次数 & nEnd SubPrivate Function func2_1(ByVal * As Double) As Double原方程func2_1 =* 2 - * - 1End FunctionPrivate Function func2_1_1(ByVal * As Double) As Double原方程的求导后func2_1_1 = 2 * * - 1If func2_1_1 = 0 Then func

11、2_1_1 = 0.00000001防止因为以0做除数而溢出End Function-等等,没装vb怎么办?那你不会没有装office吧?里面有一个vba。好好利用哦。翻开e*cel,ALT+F11,OK!看见编辑器了吧以下是c语言-*include *include *include *define MA*_DIEDAI_TIME 200main()int n=0;double *=0;double jingdu=1e-6;double function(double *);double d2function(double *);double newton_diedai(double *0,

12、int *n,double jingdu);system(cls);*=newton_diedai(*,&n,jingdu);printf(*=%.7lfty=%.7lfn,*,function(*);getch();return 0;/*=想要求解的方程的表达式=*/double function(double *)return e*p(*)+10*-3;/*=想要求解的方程的表达式的导数=*/double d2function(double *)return e*p(*)+10;/*=牛顿迭代法解方程组的解 *0为迭代的初值,n为迭代次数,jingdu为精度function为求根代数式,d

13、2functoin为其导数返回最终符合一定精度的根 */double newton_diedai(double *0,int *n,double jingdu)double *,temp;temp=d2function(*0);if (fabs(temp)1e-10) /*防止除数为0*/ *=*0-function(*0)/temp; printf(n=%dt*=%.5lfn,*n,*); else printf(error:div 0:nPress any key to e*it:); getch(); e*it(1); if (+(*n)MA*_DIEDAI_TIME) printf(d

14、iedai time:%d MA*_DIEDAI_TIME:nPress any key to e*it:,*n); getch(); e*it(1); temp=function(*);if (fabs(temp)jingdu) return *;else return newton_diedai(*,n,jingdu);-好了,到现在位置,牛顿迭代法解一元方程的三种语言的算法是ok了,不过MATLAB的语言我没有验证过,是网上copy的。注:c语言和其他两个算法计算的不是一个方程c语言牛顿迭代法解 y=*三次方减去4倍的*的平方减去10等于0在1.0和-5附近的解要求误差小于10的-3次方

15、悬赏分:10| 解决时间:2008-1-22 14:39 | 提问者:zhangyi12150请各位高手尽快解决 后天俺们就交上去了最正确答案 / 下面是方法和例子,自己去搞定。牛顿迭代法,是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(*)=0,用*种数学方法导出等价的形式 *(n+1) = g(*(n) = *(n)f(*(n)/f(*(n).然后按以下步骤执行:(1) 选一个方程的近似根,赋给变量*1;(2) 将*0的值保存于变量*1,然后计算g(*1),并将结果存于变量*0;(3) 当*0与*1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。假设方程有根,并且

16、用上述方法计算出来的近似根序列收敛,则按上述方法求得的*0就认为是方程的根。例1:f(*) = cos(*) - *。 *的初值为3.14159/4,用牛顿法求解方程f(*)=0的近似值,要求准确到10E6。算法分析:f(*)的Newton代法构造方程为:*(n+1) = *n - (cos(*n)-*n) / (-sin(*n)-1)。*includedouble F1(double *); /要求解的函数double F2(double *); /要求解的函数的一阶导数函数 double Newton(double *0, double e);/通用Newton迭代子程序int main(

17、) double *0 = 3.14159/4; double e = 10E-6; printf(* = %fn, Newton(*0, e); getchar(); return 0; double F1(double *) /要求解的函数 return cos(*) - *; double F2(double *) /要求解的函数的一阶导数函数 return -sin(*) - 1; double Newton(double *0, double e)/通用Newton迭代子程序 double *1; do *1 = *0; *0 = *1 - F1(*1) / F2(*1); whil

18、e (fabs(*0 - *1) e); return *0; /假设返回*0和*1的平均值则更佳 例2:用牛顿迭代法求方程*2 - 5* + 6 = 0,要求准确到10E6。 算法分析:取*0 = 100; 和 *0 = -100; f(*)的Newton代法构造方程为: *(n+1) = *n - (*n*n 5*n + 6) / (2*n - 5) *includedouble F1(double *); /要求解的函数double F2(double *); /要求解的函数的一阶导数函数 double Newton(double *0, double e);/通用Newton迭代子程序

19、int main() double *0; double e = 10E-6; *0 = 100; printf(* = %fn, Newton(*0, e); *0 = -100; printf(* = %fn, Newton(*0, e); getchar(); return 0; double F1(double *) /要求解的函数 return * * * - 5 * * + 6; double F2(double *) /要求解的函数的一阶导数函数 return 2 * * - 5; double Newton(double *0, double e)/通用Newton迭代子程序

20、double *1; do *1 = *0; *0 = *1 - F1(*1) / F2(*1); while (fabs(*0 - *1) e); return (*0 + *1) * 0.5; 具体使用迭代法求根时应注意以下两种可能发生的情况: (1) 如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制; (2) 方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。选初值时应使:|df(*)/d*|1,|df(*)/d*|越小收敛速度越快!概述solve是用来求代数方程的

21、符号解析解。注意可能得到的只是局部的结果,并不是全部解。 编辑本段Matlab中的用法solve(eq) solve(eq, var) solve(eq1, eq2, ., eqn) g = solve(eq1, eq2, ., eqn, var1, var2, ., varn) 其中,eq代表一个符号表达式或字符串,var代表一个变量名称 详细的解释: g=solve(eq)函数求代数方程的符号解析解。参量eq表示符号表达式或字符串。假设eq是一符号表达式或一没有等号的字符串,则函数对方程的默认变量求解方程eq=0,默认变量由命令findsym(eq)确定。假设输出参量g为单一变量,则对于有

22、多重解的非线性方程,g为一行向量。 g=solve(eq,var)用法同上,eq为指定变量。即对符号表达式或没有等号的字符串eq中指定的变量var求解方程eq(var)=0。 g=solve(eq1,eq2,eqn)函数求代数方程的符号解析解。参量eq1,eq2,eqn表示符号表达式或字符串。函数对方程组eq1,eq2,eqn中由命令findsym确定的n个变量如*1,*2,*n求解。假设g为一单个变量,则g为一包含n个解的构造;假设g为有n个变量的向量,则分别返回结果给相应的变量。 Matlab中文论坛 g=solve(eq1,eq2,eqn,var1,var2,varn)用法同上,var1

23、,var2,varn为指定变量,即对方程组eq1,eq2,eqn中指定的n个变量var1,var2,varn求解。 解单个方程syms a b c *; solve(a*2 + b* + c)结果: ans = -(b + (b2 - 4*a*c)(1/2)/(2*a) -(b - (b2 - 4*a*c)(1/2)/(2*a)如果以b为变量: syms a b c *; solve(a*2 + b* + c,b)结果: ans = -(a*2 + c)/* 解方程组syms *; S = solve(* + y = 1,* - 11*y = 5); S = S.* S.y结果: S = 4/

24、3, -1/3 编辑本段Mupad中的solvesolve(eq, *, ) 单个方程,指定变量 solve(eq, * = a . b, ) 单个方程,指定区间 solve(eq, vars, ) 方程组 solve(eq, ) solve(system, *, ) solve(system, vars, ) solve(system, )solve(ODE) solve(REC) 解多项式方程solve(*7 + *2 + *, *)解多项式方程solve(* + y + z = 3, * + y = 2, *, y, z) 或 solve(* + y + z = 3, * + y = 2

25、, *, y, z) * = 2 - z1, y = z1, z = 1 方程组可以用前面介绍的集合,序列的方式混合 也即 和 穿插使用 代数符号方程 S := solve(a*2 + b* + c, *) 解差分方程R:=rec(eq, y(n), );solve(R) 参数: eq:方程或表达式y:未知函数n:索引号cond:初始值或边界集合解差分方程由此可见,Rec主要是返回多项式的结果表达式,对于复杂问题,有直接法,for多重循环,滤波器法,Z变换法 解常微分方程ode:solve(o, , )solve(o, , ) o: 常微分方程 Type = OdeType 方程类型Abel,

26、 Bernoulli, Chini, Clairaut, E*actFirstOrder, E*actSecondOrder, Homogeneous, Lagrange, Riccati. Opts 与解法有关选项 例子o:= ode(y(*) = y(*)2, y(*);solve(o)o:= ode(y(*) = a*y(*)2, y(a) = ln(a), y(*):solve(o)matlab里solve如何使用,是否有别的函数可以代替它.悬赏分:0| 解决时间:2006-5-3 09:00 | 提问者:panda0002matlab里我解y=9/17*e*p(-1/2*t)*17(

27、1/2)*sin(1/2*17(1/2)*t)=0这样的方程为什么只得到0这一个解,如何可以的到1/2*17(1/2)*t=n*(pi)这样一族解最正确答案 在matlab里面solve命令主要是用来求解代数方程即多项式的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。(该问题给出的方程就是典型的超越方程,非代数方程)从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在*点附近的解。matlab也不例外,它也只能给出任意非代数方程在*点附近的解,函数有两个:fzero和fsolv

28、e,具体用法请用help或doc命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令有:fminbnd, fminsearch, fmincon等等。一个matlab解方程的问题2007-03-25 20:10我用solve函数解一个方程比方syms *;solve(*-b=0)我的b是别的函数求出的值,怎么将别的函数求出的b的值传给solve(*-b=0)函数方程中的b啊,syms *;b= ;solve(*-b)解方程时,有引号的表达式,外部的值是不能传递的。一般不加引号就可以了。同时不要用“=0形式。2.为什么用t=solve(cos

29、1=cos2):解不出来结果,给出 t=cos2,而用 t=solve(0.9349=5*t),确能解出来结果,其中cos1 =0.9349,cos2 =t*5,详细命令如下: cos1 =0.9349 cos1 = 0.9349 cos2 =t*5 cos2 = 5*t t=solve(cos1=cos2) t = cos2 t=solve(0.9349=5*t) t = .0000在t=solve(cos1=cos2)中,cos1=cos2被认为是一个表达式,里面的变量由solve函数自己负责解析出来,和变量cos1,cos2的值没有关系,而且solve函数在部决定哪一个是用来求解的“未知

30、数,这里cos1被认为是“未知数,所以“解就是:cos2. solve函数部由调用findsym的结果来决定哪一个是“未知数。 如果是给cos1,cos2都赋了值,未知数也不是cos1,cos2的话,在调用solve函数的时候,不要加单引号,也不要用带等号的表达式,把等号换成减号,比方 cos1 =0.9349; cos2=5*t; t=solve(cos1-cos2) t = 9349/50000Re:【求助】matlab能直接解方程吗?我看一本电子书上解非线性方程用的函数是fzero,;比方: fun=*3-2*2+5 z=fzero(fun,2)这里的2是指*的初始估计值你只是不想麻烦的

31、话,这样不就可以了:function y = mysolve(a,b)syms *y = solve(*3+a*2-b) ;end保存你自定义的求解m文件。嘿嘿。然后你输入 mysolve(2,3)原创MATLAB的Mupad应用之以数值方法解方程 同时发表在.matlabsky.论坛.matlabsky./thread-10944-1-1.html使用Mupad可以非常方便的求解非线性方程的数值解,简化输入的步骤,同时添加各种限制只要有一下几个函数numeric:linsolve, numeric:polyroots, numeric:polysysroots, numeric:realro

32、ot, numeric:realroots, numeric:solve注意:以下例子均在Mupad环境进展,如需在mand Window 运行,请作如下处理M=代码result = evalin(symengine,M)%这样调用也是有缺点的,就是少数命令不支持.主要有以下几个方面容,呵呵 做个目录 float 对结果求近似值 numeric:solve numeric:fsolve numeric:linsolve numeric:polyroots numeric:polysysroots numeric:realroot numeric:realroots 注意:在数值解法里,将会忽略

33、assume及assuming对未知数的条件限制,例如*0将不可以用assume(*0)表示 可以在区间里限定*=0.infinitefloat 对结果求近似值这个很根本的,类似double, 用法 float(object, n) 1. float(solve(*3 + *2 + 2* = y, y2 = *2, *, y) numeric:solve先说一下用法numeric:solve(方程(组), , ),有必要解释一下:方程(组):方程组必须使用或,对应变量列表也是,可以穿插使用,即numeric:solve(.,.)或numeric:solve(.,.)变量列表:有三种形式*,*=

34、a(指定猜想值) , *=a.b(指定求解区间),这个非常重要参数列表:AllRealRoots: 求所有实根,这个只针对单个方程有用,否则报错Multiple: 针对多项式方程(组),与AllRealRootsFi*edPrecision:针对一元多项式的快速搜索RestrictedSearch:对非多项式方程只在指定区间求解UnrestrictedSearch:数值搜索可能会返回在搜索围之外的结果MultiSolutions:允许所有区间求解Multiple:对多项式方程知名重根个数Random:随机返回一个满足条件的解 numeric:fsolvenumeric:fsolve的用法与nu

35、meric:solve类似,只是可用参数少了几个,只用于非线性系统numeric:fsolve(方程(组), 变量表, )用法和意义均与numeric:solve一致,参数只有这4个RestrictedSearch,UnrestrictedSearch,MultiSolutions,Random3 天前 上传下载(5.75 KB)numeric:linsolve用法:numeric:linsolve(eqs, , ) 解线性方程组 可以复杂的线性问题考虑 比方 1. n := 500: *0 := 0: *n + 1 := 0: 2. eqs := *i-1 - 2*i + *i+1 = 1

36、$ i = 1.n: 3. vars := *i $ i = 1.n: 4. numeric:linsolve(eqs, vars) numeric:polyrootnumeric:polysysroots多项式方程求根numeric:realroot 求*个区间实根numeric:realroots 求根的区间从实数和复数中提取实数,我好似发过贴:用isreal【】matlab解方程的根本实验 国庆节前要解一个比拟复杂的方程,用手工算很麻烦。于是不得已求助于matlab,之前对这个软件根本上没有什么了解。几天下来积累了一些最简单的使用技巧主要是解方程方面的,贴在这里备忘。=例1:求一元三次方

37、程*3-a3*2+2*a2*-5*a1=0的解析解,其中*是未知量q=solve(*3-a3*2+2*a2*-5*a1=0,*)q = 1/6*(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)-6*(2/3*a2-1/9*a32)/(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)+1/3*a3-1/12*(-72*a2*a3+540*a1+8

38、*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)+3*(2/3*a2-1/9*a32)/(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)+1/3*a3+1/2*i*3(1/2)*(1/6*(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)+6*(2/3*a

39、2-1/9*a32)/(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)-1/12*(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)+3*(2/3*a2-1/9*a32)/(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3

40、)+1/3*a3-1/2*i*3(1/2)*(1/6*(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)+6*(2/3*a2-1/9*a32)/(-72*a2*a3+540*a1+8*a33+12*(96*a23-12*a22*a32-540*a2*a3*a1+2025*a12+60*a1*a33)(1/2)(1/3)其中红色局部的解为实数解,另外两个为复数解。=例2:求方程组实验,其中*和y是未知数,a和b是常量 q=solve(*+y=a,*-y=b,*,y)q =

41、 *: 1*1 symy: 1*1 sym q.*ans =1/2*a+1/2*b q.yans =1/2*a-1/2*b=例3:求方程组的数值解下面是一个求解方程组数值解的例子,使用了fsolve命令。由于fsolve对初始值比拟依赖,因此这里采用了循环设置初值的方式,如果得到了适宜结果,则翻开一个文件,将容写入其中。如果未得到适宜结果,则翻开另一个文件,并将结果记录在其中。下面例子中的方程本身可能不一定有解,实际遍历初值求解时也未得到适宜的数值解,但由于该例子中有不少matlab的m文件编程方面的语法应用,因此也贴在下面,以备未来用到时查询:function Testclccleara0=

42、input(请输入a0的数值:)m=input(请输入m的数值:)a1=input(请输入a1的数值:)u=input(请输入u的数值:)fc=input(请输入fc频率,单位Hz的数值:)C=input(请输入C电容,单位pF的数值:)b0 = a1*(a02+m2); b1 = a02+m2+2*a0*a1; b2 = 2*a0+a1; k = 1.0/(2*pi*fc*C*(10(-12);fprintf(输入的参数: a0=%f, m=%f, a1=%f, u=%d, fc=%d, C=%dn,a0,m,a1,u,fc,C)fprintf(经过计算的中间参数: b0=%f, b1=%f

43、, b2=%f, k=%fn,b0,b1,b2,k)*01_init = 0.01; *02_init = 0.1; *03_init = 0.1;%初值的起始值success_num = 0; %已成功找到并写入文件的结果个数*01_step = 0.01; %R1的步长step = 0.2;%初值的步长options=optimset(Display,off)options.TolFun=1e-28; %加上这两句options.Tol*=1e-17; options.Ma*Iter=1e100000 %迭代次数for i = 0:100for j = 0:50for k = 0:50*0

44、=*01_init+i*01_step;*02_init+j*step;*03_init+k*step;%*0=0.4;0.4;0.4; %初值*,fval,e*itflag=fsolve(myfunc,*0,options);fid_PRO=fopen(E:GS2PRO.t*t,ad);%翻开文件 。wt,t可是任意字符,为文本写入;w为二进制写入;ad,d可是任意字符,为文本追加;a为二制追加。fprintf(fid_PRO,i=%d,j=%d,k=%d,当前初值:【%.2f;%.2f;%.2f】,已成功找到%d个结果。n,i,j,k,*01_init+i*01_step,*02_init

45、+j*step,*03_init+k*step,success_num);fclose(fid_PRO);%关闭文件fprintf(e*itflag=%d ,e*itflag);fprintf(i=%d,j=%d,k=%d,当前初值:【%.2f;%.2f;%.2f】,已成功找到%d个结果。,i,j,k,*01_init+i*01_step,*02_init+j*step,*03_init+k*step,success_num);fprintf(方程1验证:fval(1)=%f,fval(1);fprintf(方程2验证:fval(2)=%f,fval(2);fprintf(方程3验证:fval

46、(3)=%fn,fval(3);if abs(fval(1)0.001 & abs(fval(2)0.001 & abs(fval(3)0.001fid_n=fopen(E:GS2DATA.t*t,ad);%翻开文件 。wt,t可是任意字符,为文本写入;w为二进制写入;ad,d可是任意字符,为文本追加;a为二制追加。fprintf(fid_n,方程1验证:fval(1)=%f,fval(1);fprintf(fid_n,方程2验证:fval(2)=%f,fval(2);fprintf(fid_n,方程3验证:fval(3)=%fn,fval(3);fprintf(fid_n,*n);fprin

47、tf(fid_n,真正的R1为%f(k),真正的R2为%f(k),真正的R3为%f(k)。n,*(1)*k/1000,*(2)*k/1000,*(3)*k/1000)fprintf(fid_n,*nn);fclose(fid_n);%关闭文件success_num = success_num+1;endendendendfunction F=myfunc(*)a0 = 0.61547;m = 0.7702872;a1 = 0.6290759;b0 = a1*(a02+m2);b1 = a02+m2+2*a0*a1;b2 = 2*a0+a1;u = 6;F = 1.0/(*(1)*(2)*(3)-b0;1.0/(*(1)*(2)+(2-u)/(*(1)*(3)+(3-u)/(*(2)*(3)-b1;1.0/*(2)+(2-u)/*(3)+1.0/*(1)+1.0/*(2)-b2; 用solve解方程,解既有实数又有复数,如何只保存实数解? 解决方案假设你的方程根保存在value里程序如下:*=size(value);t=1;for i=1:* if isreal(value(i)=1 basis(t)=value(i); t=t+1; endend

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!