怎样用MATLAB求 x./(x+386).*0.9994.^(x+386) 在x=662处的3阶泰勒展开式常用公式

当前位置: >>
matlab使用
用 C 语言编程解 N 元方程组 #include #define M 10 float fdel(float *p,int n) { float sum=0; for(i=0;i sum+=*(p+i); sum/=n; return (fabs(sum)); } void chu(float *p) { for(i=0;i *(p+i)=999; r
} void print(float *p,int n) { for(i=0;i printf(&x%d=%f &,i+1,*(p+i));} /**void scan(float **p,int n) {int i,j; for(i=0;i for(j=0;j {printf(& a%d%d=&,i+1,j+1); scanf(&%f&,*(p+i)+j);}}**/ void den(float *a,float *b,int n) { for(i=0;i *(a+i)=*(b+i);} void jie(float *p0,float a[M][M],float *p,float *b,int n) {float sum=0; int i,j; for(i=0;i { for(j=0;j {if(i!=j) sum=sum+a[i][j]*p0[j]; else {n=a[i][j];} } *(p+i)=*(b+i)-sum/n;} } main() { float x0[M],xi[M][M],b[M],x[M]; int i,j,n; chu(x0); chu(b); chu(x); for(i=0;i {printf(&x0=%f &,x0[i]); printf(&b=%f &,b[i]); printf(&x=%f &,x[i]);} for(i=0;i for(j=0;j xi[i][j]=0; printf(&shu ru wuizhishu geshu n=&); scanf(&%d&,&n); printf( & shu ru fangchengzu gege xishu a[i][j]= &); for(i=0;i for(j=0;j { printf(& a%d%d=&,i+1,j+1); scanf(&%f&,&xi[i][j]); } printf(&x[1][1]=%f&,xi[1][1]); for(i=0;i print(*(xi+i),n); for(i=0;i printf(& abs=%f&,fdel(*(xi+i),n)); }#include &stdio.h& double f(double x) { y=2*x*x*x-9*x*x+12*x-3; return(y); }int main() { double t,a=0,b=1, t=(a+b)/2; while((f(b)-f(a))&1e-8) { t=(a+b)/2; tmp=f(t); if(tmp==0) else if(tmp&0) a=t; else b=t; } printf(&该方程在(0,1)之间的根是%.8f,f(%.8f)=%.8f\n&,t,t,f(t)); return 0; }牛顿迭代法( 拉夫逊方法( ),它是牛顿在 17 世纪提出的一种在实数域和复数域上近似求解 牛顿迭代法(Newton's method)又称为牛顿 拉夫逊方法(Newton-Raphson method), )又称为牛顿-拉夫逊方法 ),方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数 f(x)的泰勒级数的前面几项来寻找方程 f(x) = 0 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 f(x) = 0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。设 r 是 f(x) = 0 的根,选取 x0 作为 r 初始近似值,过点(x0,f(x0))做曲线 y = f(x)的切线 L,L 的方程为 y = f(x0)+f'(x0)(x-x0),求出 L 与 x 轴交点的横坐标x1 = x0-f(x0)/f'(x0),称 x1 为 r 的一次近似值。过点(x1,f(x1))做曲线 y = f(x)的切线,并求该切线与 x 轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称 x2 为 r 的二次近似值。重复以上过程,得 r 的近似值序列,其中 x(n+1)=x(n)-f(x(n))/f'(x(n)),称为 r 的 n+1 次近似值,上式称为牛顿迭代公式。解非线性方程 f(x)=0 的牛顿法是把非线性方程线性化的一种近似方法。把 f(x)在 x0 点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2!+… 取其线性部分,作为非线性方程 f(x) = 0 的近似方程,即泰勒展开的前两项,则有 f(x0)+f'(x0)(x-x0)=f(x)=0 设 f'(x0)≠0 则其解为 x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。对于做应用的来说,更关心的是怎么实现。找了一下算法,发现主要是 MATLAB 编程语言和 C 语言。这个是我首先找到的 MATLAB 的代码--------------------------------- %牛顿迭代法 解方程 y=x.^2-x-1x=1.5;x1=x-func2_1(x)/func2_1_1(x);if(abs(x1)&1.5)delt=abs(x1-x);elsedelt=abs((x1-x)/x1);endwhile(delt&1e-6|abs(func2_1(x))&1e-6)x=x1; x1=x-func2_1(x)/func2_1_1(x);if(abs(x1)&1.5)delt=abs(x1-x);elsedelt=abs((x1-x)/x1);endif func2_1(x1)==0breakendenddisp('解方程 y=x.^2-x-1,牛顿迭代法结果')x1%编辑函数function y=func2_1(x)y=x.^2-x-1;function y=func2_1_1(x)y=2*x-1 --------------------------没用过 MATLAB,但是语言是相通的,修改一下即可。呵呵,还是 vb 简单以下是 VB 代码Sub p1()'牛顿迭代法n=0xx = 2x = 4 '设定初值x1 = x - func2_1(x) / func2_1_1(x)If Abs(x1) & xx Thendelt = Abs(x1 - x)Elsedelt = Abs((x1 - x) / x1)End IfDo While (delt & 0.000001 or Abs(func2_1(x)) & 0.000001)n=n+1x = x1x1 = x - func2_1(x) / func2_1_1(x)If (Abs(x1) & xx) Thendelt = Abs(x1 - x)Debug.Print x1, delt, &1&Elsedelt = Abs((x1 - x) / x1)Debug.Print x1, delt, &2&End IfIf func2_1(x1) = 0 ThenExit DoEnd IfLoop Debug.Print &牛顿迭代法结果&, x1, &迭代次数& & nEnd SubPrivate Function func2_1(ByVal x As Double) As Double'原方程func2_1 =x ^ 2 - x - 1End FunctionPrivate Function func2_1_1(ByVal x As Double) As Double'原方程的求导后func2_1_1 = 2 * x - 1If func2_1_1 = 0 Then func2_1_1 = 0. '避免因为以 0 做除数而溢出End Function--------------------等等,没装 vb 怎么办?那你不会没有装 office 吧?里面有一个 vba。好好利用哦。打开 excel,ALT+F11,OK!看见编辑器了吧……以下是 c 语言-------------------#include &stdio.h&#include &conio.h&#include &math.h&#define MAX_DIEDAI_TIME 200main(){int n=0;double x=0;double jingdu=1e-6;double function(double x); double d2function(double x);double newton_diedai(double x0,int *n,double jingdu);system(&cls&);x=newton_diedai(x,&n,jingdu);printf(&x=%.7lf\ty=%.7lf\n&,x,function(x));getch();return 0;}/*====================想要求解的方程的表达式======================*/double function(double x){return exp(x)+10*x-3;}/*===========================想要求解的方程的表达式的导数=============================*/double d2function(double x){return exp(x)+10;}/*=============================================牛顿迭代法解方程组的解x0 为迭代的初值,n 为迭代次数,jingdu 为精度 function 为求根代数式,d2functoin 为其导数返回最终符合一定精度的根*/double newton_diedai(double x0,int *n,double jingdu){double x,temp=d2function(x0);if (fabs(temp)&1e-10)/*防止除数为 0*/{x=x0-function(x0)/printf(&n=%d\tx=%.5lf\n&,*n,x);}else{printf(&error:div 0:\nPress any key to exit:&);getch();exit(1);}if (++(*n)&MAX_DIEDAI_TIME){printf(&diedai time:%d & MAX_DIEDAI_TIME:\nPress any key to exit:&,*n);getch();exit(1);}temp=function(x);if (fabs(temp)&jingdu)elsereturn newton_diedai(x,n,jingdu);} ------------------好了,到现在位置,牛顿迭代法解一元方程的三种语言的算法是 ok 了,不过 MATLAB 的语言我没有验证过,是网上 copy 的。(注:c 语言和其他两个算法计算的不是一个方程)c 语言牛顿迭代法解 y=x 三次方减去 4 倍的 x 的平方减去 10 等于 0 在 1.0 和-5 附近的解要求误差小于 10 的-3 次方悬赏分:10 | 解决时间: 14:39 | 提问者:zhangyi12150请各位高手尽快解决 后天俺们就交上去了 最佳答案 // 下面是方法和例子,自己去搞定。 牛顿迭代法,是用于求方程或方程组近似根的一种常用的算法设计方法。设方程 为 f(x)=0,用某种数学方法导出等价的形式 x(n+1) = g(x(n)) = x(n)Cf(x(n))/f‘(x(n)).然后按以下步骤执行: (1) 选一个方程的近似根,赋给变量 x1; (2) 将 x0 的值保存于变量 x1,然后计算 g(x1),并将结果存于变量 x0; (3) 当 x0 与 x1 的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的 x0 就 认为是方程的根。 例 1:已知 f(x) = cos(x) - x。 x 的初值为 3.14159/4,用牛顿法求解方程 f(x)=0 的近似值,要求精确到 10E-6。 算法分析:f(x)的 Newton 代法构造方程为:x(n+1) = xn - (cos(xn)-xn) / (-sin(xn)-1)。 #include&stdio.h& double F1(double x); //要求解的函数 double F2(double x); //要求解的函数的一阶导数函数 double Newton(double x0, double e);//通用 Newton 迭代子程序 int main() { double x0 = 3.14159/4; double e = 10E-6; printf(&x = %f\n&, Newton(x0, e)); getchar(); return 0; } double F1(double x) //要求解的函数 { return cos(x) - } double F2(double x) //要求解的函数的一阶导数函数 { return -sin(x) - 1; } double Newton(double x0, double e)//通用 Newton 迭代子程序 { double x1; do { x1 = x0; x0 = x1 - F1(x1) / F2(x1); } while (fabs(x0 - x1) & e); return x0; //若返回 x0 和 x1 的平均值则更佳} 例 2:用牛顿迭代法求方程 x^2 - 5x + 6 = 0,要求精确到 10E-6。 算法分析:取 x0 = 100; 和 x0 = -100; f(x)的 Newton 代法构造方程为: x(n+1) = xn - (xn*xn C 5*xn + 6) / (2*xn - 5) #include&stdio.h& double F1(double x); //要求解的函数 double F2(double x); //要求解的函数的一阶导数函数 double Newton(double x0, double e);//通用 Newton 迭代子程序 int main() { double x0; double e = 10E-6; x0 = 100; printf(&x = %f\n&, Newton(x0, e)); x0 = -100; printf(&x = %f\n&, Newton(x0, e)); getchar(); return 0; } double F1(double x) //要求解的函数 { return x * x - 5 * x + 6; } double F2(double x) //要求解的函数的一阶导数函数 { return 2 * x - 5; } double Newton(double x0, double e)//通用 Newton 迭代子程序 { double x1; do { x1 = x0; x0 = x1 - F1(x1) / F2(x1); } while (fabs(x0 - x1) & e); return (x0 + x1) * 0.5; } 具体使用迭代法求根时应注意以下两种可能发生的情况: (1) 如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循 环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给 予限制; (2) 方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理, 也会导 致迭代失败。选初值时应使:|df(x)/dx|&1,|df(x)/dx|越小收敛速度越快! 概述solve 是用来求代数方程的符号解析解。注意可能得到的 只是部分的结果 , 并不是 只是部分的结果, 全部解 。编辑本段 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 为单一变量,则对于有多重解的非线性方程,g 为 一行向量。 g=solve(eq,var) 用法同上,eq 为指定变量。即对符号表达式或没有等号的字符串 eq 中指定的变量 var 求解方程 eq(var)=0。 g=solve(eq1,eq2,…,eqn) 函数求代数方程的符号解析解。参量 eq1,eq2,…,eqn 表示符号表达式或字符串。函 数对方程组 eq1,eq2,…,eqn 中由命令 findsym 确定的 n 个变量如 x1,x2,…,xn 求解。若 g 为一单个变量,则 g 为一包含 n 个解的结构;若 g 为有 n 个变量的向量,则分别返回结 果给相应的变量。 Matlab 中文论坛 g=solve(eq1,eq2,…,eqn,var1,var2,…,varn) 用法同上,var1,var2,…,varn 为指定变量,即对方程组 eq1,eq2,…,eqn 中指定的 n 个 变量 var1,var2,…,varn 求解。解单个方程 solve('a*x^2 + b*x + c')结果: ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a)如果以 b 为变量: solve('a*x^2 + b*x + c','b')结果: ans = -(a*x^2 + c)/x解方程组 S = solve('x + y = 1','x - 11*y = 5'); S = [S.x S.y]结果: S =[ 4/3, -1/3]编辑本段 Mupad 中的 solvesolve(eq, x, &Options&) 单个方程,指定变量 solve(eq, x = a .. b, &Options&) 单个方程,指定区间 solve(eq, vars, &Options&) 方程组 solve(eq, &Options&) solve(system, x, &Options&) solve(system, vars, &Options&) solve(system, &Options&) solve(ODE) solve(REC)解多项式方程solve(x^7 + x^2 + x, x)解多项式方程solve({x + y + z = 3, x + y = 2}, {x, y, z}) 或 solve({x + y + z = 3, x + y = 2}, [x, y, z]) {[x = 2 - z1, y = z1, z = 1]} 方程组可以用前面介绍的集合,序列的方式混合 也即{ }和[ ] 交叉使用 代数符号方程 S := solve(a*x^2 + b*x + c, x) 解差分方程R:=rec(eq, y(n), &cond&);solve(R) 参数:eq: y: n: cond:方程或表达式 未知函数 索引号 初始值或边界集合解差分方程由此可见,Rec 主要是返回多项式的结果表达式,对于复杂问题,有直接法,for 多重循 环,滤波器法,Z 变换法解常微分方程ode::solve(o, &Type = OdeType&, &Opts&)solve(o, &Type = OdeType&, &Opts&) o: 常微分方程 Type = OdeType 方 程 类 型 Abel, Bernoulli, Chini, Clairaut, ExactFirstOrder, ExactSecondOrder, Homogeneous, Lagrange, Riccati. Opts 与解法有关选项 例子 o:= ode(y'(x) = y(x)^2, y(x));solve(o)o:= ode({y'(x) = a*y(x)^2, y(a) = ln(a)}, y(x)):solve(o)如何使用,是否有别的函数可以代替它. matlab 里 solve 如何使用,是否有别的函数可以代替它.悬赏分:0 | 解决时间: 09:00 | 提问者:panda0002matlab 里我解 y=9/17*exp(-1/2*t)*17^(1/2)*sin(1/2*17^(1/2)*t)=0 这样的方程为 什么只得到 0 这一个解,如何可以的到 1/2*17^(1/2)*t=n*(pi)这样一族解 最佳答案 在 matlab 里面 solve 命令主要是用来求解代数方程(即多项式)的解,但是也不 是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给 出很特殊的实数解。(该问题给出的方程就是典型的超越方程,非代数方程) 从计算机的编程实现角度讲, 如今的任何算法都无法准确的给出任意非代数方程 的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。matlab 也 不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:fzero 和 fsolve,具体用法请用 help 或 doc 命令查询吧。如果还是不行,你还可以将问题 转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令有: fminbnd, fminsearch, fmincon 等等。一个 matlab 解方程的问题
20:10 我用 solve 函数解一个方程 比如 solve('x-b=0') 我的 b 是别的函数求出的值, 怎么将别的函数求出的 b 的值传给 solve('x-b=0')函数方程中的 b 啊, b= ;solve(x-b) 解方程时,有引号的表达式,外部的值是不能传递的。一般不加引号就可以了。同时不要用“=0”形式。2.为什么用 t=solve('cos1=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= . 在 t=solve('cos1=cos2')中,'cos1=cos2'被认为是一个表达式,里面的变量由 solve 函数自己负责解析出来,和变量 cos1,cos2 的值没有关系,而且 solve 函数在 内部决定哪一个是用来求解的“未知数”,这里'cos1'被认为是“未知数”,所以“解”就是:cos2. solve 函数内部由调用 findsym 的结果来决定哪一个是“未知数”。 如果是给 cos1,cos2 都赋了值,&未知数&也不是 cos1,cos2 的话,在调用 solve 函数的时候,不要加单引号,也不要用带等号的表达式,把等号换成减号,比如 && cos1 =0.9349; && cos2=5*t; && t=solve(cos1-cos2)t=
Re:【求助】matlab 能直接解方程吗? 我看一本电子书上解非线性方程用的函数是fzero(,); 比如: &&fun='x^3-2*x^2+5' &&z=fzero(fun,2) 这里的 2 是指 x 的初始估计值 你只是不想麻烦的话,这样不就可以了: function y = mysolve(a,b) syms x y = solve(x^3+a*x^2-b) ; end 保存你自定义的求解 m 文件。 嘿嘿。 然后你输入 mysolve(2,3)[原创 原创]MATLAB 的 Mupad 应用之以数值方法解方程 原创 同时发表在
论坛~/thread-.html 使用 Mupad 可以非常方便的求解非线性方程的数值解,简化输入的步骤,同时添加各种限制~只要有一下几个函数 numeric::linsolve, numeric::polyroots, numeric::polysysroots, numeric::realroot, numeric::realroots, numeric::solve注意:以下例子均在 Mupad 环境进行,如需在 Command Window 运行, 请作如下处理M='代码' result = evalin(symengine,M) %这样调用也是有缺点的,就是少数命令不支持...主要有以下几个方面内容,呵呵 做个目录? ? ? ? ? ? ? ?float对结果求近似值numeric::solve numeric::fsolve numeric::linsolve numeric::polyroots numeric::polysysroots numeric::realroot numeric::realroots注意:在数值解法里,将会忽略 assume 及 assuming 对未知数的条件限制,例如 x&0 将不可以用 assume(x&0)表示 可以在区间里限定 x=0..infinitefloat对结果求近似值这个很基本的,类似 double, 用法 float(object, n) 1. float(solve([x^3 + x^2 + 2*x = y, y^2 = x^2], [x, y])) numeric::solve 先说一下用法 numeric::solve(方程(组), &变量列表&, &参数列表&),有必要解释一下: 方程(组):方程组必须使用[]或{},对应变量列表也是,可以交叉使用,即 numeric::solve([..],{..})或 numeric::solve({..},[...]) 变量列表:有三种形式 x,x=a(指定猜测值) , x=a..b(指定求解区间),这个非常重要 这个非常重要 参数列表: AllRealRoots: 求所有实根,这个只针对单个方程有用,否则报错 Multiple: 针对多项式方程(组),与 AllRealRoots FixedPrecision:针对一元多项式的快速搜索 RestrictedSearch:对非多项式方程只在指定区间内求解 UnrestrictedSearch:数值搜索可能会返回在搜索范围之外的结果 MultiSolutions:允许所有区间内求解 Multiple:对多项式方程知名重根个数 Random:随机返回一个满足条件的解 numeric::fsolve numeric::fsolve 的用法与 numeric::solve 类似,只是可用参数少了几个,只用于非线性系统 只用于非线性系统 numeric::fsolve(方程(组), [变量表], &参数&) 用法和意义均与 numeric::solve 一致,参数只有这 4 个 RestrictedSearch,UnrestrictedSearch,MultiSolutions,Random numeric::linsolve 用法:numeric::linsolve(eqs, &vars&, &Options&) 解线性方程组 可以复杂的线性问题考虑 比如 1. 2. 3. 4. n := 500: x[0] := 0: x[n + 1] := 0: eqs := [x[i-1] - 2*x[i] + x[i+1] = 1 $ i = 1..n]: vars := [x[i] $ i = 1..n]: numeric::linsolve(eqs, vars)numeric::polyroot numeric::polysysroots 多项式方程求根numeric::realroot 求某个区间实根 numeric::realroots 求根的区间从实数和复数中提取实数,我好像发过贴: 用 isreal【09.10.09】matlab 解方程的基本实验 】 国庆节前要解一个比较复杂的方程,用手工算很麻烦。于是不得已求助于 matlab,之前对这个软件基本上没有什么了解。几天下来积累 了一些最简单的使用技巧(主要是解方程方面的),贴在这里备忘。================================================ 例 1: 求一元三次方程 x^3-a3*x^2+2*a2*x-5*a1=0 的解析解,其中 x 是未知量q=solve('x^3-a3*x^2+2*a2*x-5*a1=0','x')q = 1/6*(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)-6*(2/3*a2-1/9*a3^2)/(-72*a2*a3+540*a1+8 *a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+1/3*a3 -1/12*(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+3*(2/3*a2-1/9*a3^ 2)/(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+1/3*a3+1/2*i*3^(1/2)* (1/6*(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+6*(2/3*a2-1/9*a3^2 )/(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)) -1/12*(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+3*(2/3*a2-1/9*a3^ 2)/(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+1/3*a3-1/2*i*3^(1/2)*( 1/6*(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3)+6*(2/3*a2-1/9*a3^2) /(-72*a2*a3+540*a1+8*a3^3+12*(96*a2^3-12*a2^2*a3^2-540*a2*a3*a1++60*a1*a3^3)^(1/2))^(1/3))其中红色部分的解为实数解,另外两个为复数解。 ================================================ 例 2:求方程组实验,其中 x 和 y 是未知数,a 和 b 是常量&& q=solve('x+y=a','x-y=b','x,y')q=x: [1x1 sym] y: [1x1 sym]&& q.xans =1/2*a+1/2*b&& q.yans =1/2*a-1/2*b================================================例 3:求方程组的数值解下面是一个求解方程组数值解的例子,使用了 fsolve 命令。由于 fsolve 对初始值比较依赖,因此这里采用了循环设置初值的方式,如果 得到了合适结果,则打开一个文件,将内容写入其中。如果未得到合适结果,则打开另一个文件,并将结果记录在其中。下面例子中的方程本身可能不一定有解,实际遍历初值求解时也未得到合适的数值解,但由于该例子中有不少 matlab 的 m 文件编程方 面的语法应用,因此也贴在下面,以备未来用到时查询:function Test clc cleara0=input('请输入 a0 的数值:') m=input('请输入 m 的数值:') a1=input('请输入 a1 的数值:') u=input('请输入 u 的数值:') fc=input('请输入 fc(频率,单位 Hz)的数值:') C=input('请输入 C(电容,单位 pF)的数值:') b0 = a1*(a0^2+m^2); b1 = a0^2+m^2+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=%d\n',a0,m,a1,u,fc,C)fprintf('经过计算的中间参数: b0=%f, b1=%f, b2=%f, k=%f\n',b0,b1,b2,k)x01_init = 0.01; x02_init = 0.1; x03_init = 0.1;%初值的起始值 success_num = 0; %已成功找到并写入文件的结果个数x01_step = 0.01; %R1 的步长 step = 0.2;%初值的步长options=optimset('Display','off') options.TolFun=1e-28; options.TolX=1e-17; options.MaxIter=1e100000 %迭代次数 %加上这两句for i = 0:100 for j = 0:50 for k = 0:50 x0=[x01_init+i*x01_x02_init+j*x03_init+k*]; %x0=[0.4;0.4;0.4]; [x,fval,exitflag]= %初值fsolve(@myfunc,x0,options);fid_PRO=fopen('E:\GS2PRO.txt','ad');%打开文件 。wt,t 可是任意字符,为文本写入;w 为二进制写入;ad,d 可是任意字符,为文本追 加;a 为二制追加。 fprintf(fid_PRO,'i=%d,j=%d,k=%d,当前初值:【%.2f;%.2f;%.2f】,已成功找到%d 个结果。 \n',i,j,k,x01_init+i*x01_step,x02_init+j*step,x03_init+k*step,success_num); fclose(fid_PRO);%关闭文件 fprintf('exitflag=%d ',exitflag); fprintf('i=%d,j=%d,k=%d,当前初值:【%.2f;%.2f;%.2f】,已成功找到%d 个结果。 ',i,j,k,x01_init+i*x01_step,x02_init+j*step,x03_init+k*step,success_num); fprintf('方程 1 验证:fval(1)=%f',fval(1)); fprintf('方程 2 验证:fval(2)=%f',fval(2)); fprintf('方程 3 验证:fval(3)=%f\n',fval(3)); if abs(fval(1))&0.001 & abs(fval(2))&0.001 & abs(fval(3))&0.001 fid_n=fopen('E:\GS2DATA.txt','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)=%f\n',fval(3));fprintf(fid_n,'*****************************************************************************************\n'); fprintf(fid_n,'真正的 R1 为%f(k ),真正的 R2 为%f(k ),真正的 R3 为%f(k )。\n',x(1)*k/1000,x(2)*k/1000,x(3)*k/1000) fprintf(fid_n,'*****************************************************************************************\n\n'); fclose(fid_n);%关闭文件 success_num = success_num+1; end end end endfunction F=myfunc(x) a0 = 0.61547;m = 0. = 0.6290759; b0 = a1*(a0^2+m^2);b1 = a0^2+m^2+2*a0*a1;b2 = 2*a0+a1;u = 6; F = [1.0/(x(1)*x(2)*x(3))-b0;1.0/(x(1)*x(2))+(2-u)/(x(1)*x(3))+(3-u)/(x(2)*x(3))-b1;1.0/x(2)+(2-u)/x(3)+1.0/x(1)+1.0/x(2)-b2];解方程,解既有实数又有复数,如何只保留实数解? 用 solve 解方程,解既有实数又有复数,如何只保留实数解? 解决方案假如你的方程根保存在 value 里程序如下: x=size(value);t=1; for i=1:x if isreal(value(i))==1 basis(t)=value(i); t=t+1; end end
Matlab 使用方法和简介绪 论 Matlab 是“Matrix Laboratory”的缩写,意为“矩阵实验室”,是当今美国很流行的科 学计算软件. 信息技术、 计算机技术发展到今天, ...MATLAB基本使用方法_计算机软件及应用_IT/计算机_专业资料。MATLAB基本使用方法MATLAB 基本的使用方法 1. 读取图像:用 imread 函数读取图像文件,文件格式可以是 TIFF、...如何使用 MATLAB 创建一个最简单的程序网上很多有关于 MATLAB 的介绍, 都是在讲 MATLAB 有这样那样的功能, 但就是没有人讲用如何用 MATLAB 创建一个最简单的...另外 MATLAB 有些永久常数(Permanent constants) ,虽然在工作空 间中看不 到,但使用者可直接取用,例如: pi ans = 3.1416 下表即为 MATLAB 常用到的永久常数...在设计中使用 MATLAB 数据的方法在 Simulink 环境中进行设计时, 常常要用到一些特殊的信号作为仿真的激励信号, 如 FSK 调制信号或是符合某种特征的噪声信号。 此时...Matlab的使用方法_物理_自然科学_专业资料。Matlab 的使用方法内容摘要:如今,Matlab 不但可以用于处理代数问题和信号问题,而且还具有强大的图像处理以及仿真模拟等功能...Matlab使用技巧_工学_高等教育_教育专区。Matlab-scope 示波器菜单调用命令 set(0,'ShowHiddenHandles','on'); set(gcf,'menubar','figure'); 一般的测量检测模...矩阵及其基本运算 第1章 矩阵及其基本运算 MATLAB,即&矩阵实验室& ,它是以矩阵为基本运算单元.因此,本书从最基本的运 算单元出发,介绍 MATLAB 的命令及其用法....MATLAB使用入门 使用入门 使用 凯里学院潘万鹏收藏 MATLAB是MATrix LABoratory(矩阵实验室)的缩写,是由美国MathWorks公司1980年代初开发 的一套以矩阵计算为基础的科学...(’maple 中多项式的运算命令’) 如何用 matlab 进行分式运算 发现 matlab 只有一条处理分式问题的命令,其使用格式如下: [n,d]=numden(f) 把符号表达式 f ...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 泰勒级数展开公式 的文章

 

随机推荐