zoukankan      html  css  js  c++  java
  • Matlab——数值计算——单个代数方程 代数方程组

    方程求解

    求解单个代数方程

    MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等 号),则在求解之前函数solve将表达式置成等于0。 

    >> syms a
    syms b
    syms c
    syms x
    >> 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)

    结果是符号向量,其元素是方程的两个解。如果想对非缺省值x变量求解,solve必须指定变量

    >> solve('a*x^2+b*x+c','b')
     
    ans =
     
    -(a*x^2 + c)/x

    带有等号的符号方程也可以求解:

    >> f = solve('cos(x) = sin(x)')
     
    f =
     
    pi/4
     
    >> t = solve('tan(2*x) = sin(x)')
     
    t =
     
    0

    >> x = solve('exp(x) = tan(x)')
    警告: Cannot solve symbolically. Returning a numeric
    approximation instead. %不能用符号来解决。返回数字是近似值。
     
    x =
     
    -226.19467105846511316931032359612

     代数方程组求解

     

    >> eq1 = 'x-3 =4';
    eq2 = 'x*2-x-6=0';
    eq3 = 'x^2+2*x+4=0';
    eq4 = '3*x+2*y-z=10';
    eq5 = '-x+3*y+2*z=5';
    eq6='x-y-z=-1';
    >> solve(eq1)
     
    ans =
     
    7
     
    >> solve(eq2)
     
    ans =
     
    6
     
    >> solve(eq3)
     
    ans =
     
     - 3^(1/2)*i - 1
       3^(1/2)*i - 1
     
    >> solve(eq4,eq5,eq6)
    
    ans = 
    
        x: [1x1 sym]
        y: [1x1 sym]
        z: [1x1 sym]

    这里,solve(eq4,eq5,eq6)是一个结构数组,其中每个元素为一符号类型的量

    >> ff = solve(eq4,eq5,eq6);
    >> ff.x
     
    ans =
     
    -2
     
    >> ff.y
     
    ans =
     
    5
     
    >> ff.z
     
    ans =
     
    -6

    也可以:

    >> [a,b,c] = solve(eq4,eq5,eq6)
     
    a =
     
    -2
     
     
    b =
     
    5
     
     
    c =
     
    -6

    例题:

     解题思路:

    首先,根据以上给出的信息列出一组线性方程,假如p,n,d和q分别表示1美分,5美分,10美分,和25美分的硬币数

    >> syms d
    >> syms p
    >> syms n
    >> syms q
    >> a = 'd+(n+p)/2=q';
    >> b = 'p=n+d+q-10';
    >> c = 'q+d = p+n/4';
    >> d = 'q+p = n+8*d-1';
    >> [pennise,nickles,dimes,quarters] = solve(a,b,c,d,'p,n,d,q')
    警告: Do not specify equations and variables as character
    strings. Instead, create symbolic variables with syms. 
    %不要将公式和变量指定为字符串。相反,使用syms创建符号变量。
     
    pennise =
     
    16
     
     
    nickles =
     
    8
     
     
    dimes =
     
    3
     
     
    quarters =
     
    15

    >> money = .01*16+.05*8+.10*3+.25*15
    
    money =
    
        4.6100

     例题:

    【0】从三维坐标初步观察两函数图形相交情况

    x=-2:0.05:2;y=x;[X,Y]=meshgrid(x,y); %产生x-y平面上网点坐标
    F1=sin(X-Y);F2=cos(X+Y);
    F0=zeros(size(X));
    surf(X,Y,F1),
    xlabel('x'),ylabel('y'),
    61
    view([-31,62]),hold on,
    surf(X,Y,F2),surf(X,Y,F0),
    shading interp,
    hold off

    【1】在某区域观察两函数0等位线的交点情况

    x=-2:0.5:2;y=x;[X,Y]=meshgrid(x,y); %产生x-y平面上网点坐标
    F1=sin(X-Y);F2=cos(X+Y);
    v=[-0.2, 0, 0.2]; %指定三个等位值,是为了更可靠地判断0等位线的存在。
    contour(X,Y,F1,v) %画F1的三条等位线。
    hold on,contour(X,Y,F2,v),hold off %画F2的三条等位线。

    【2】从图形获取零点的初始近似值

    ginput 获取两个函数0 等位线(即三线组中间那条线)交点的坐标。

    [x0,y0]=ginput(2); %在图上取两个点的坐标
    disp([x0,y0])

    【3】利用 fsolve 求精确解(以求(0.7926,7843)附近的解为例。)

    本例直接用字符串表达被解函数。注意:在此,自变量必须写成x(1), x(2)。
    假如写成xy(1), xy(2),指令运行将出错。

    fun='[sin(x(1)-x(2)),cos(x(1)+x(2))]'; %<12>
    xy=fsolve(fun,[x0(2),y0(2)])
    %<13>

    xy =

    0.7854 0.7854

     【4】检验

    fxy1=sin(xy(1)-xy(2));fxy2=cos(xy(1)+xy(2));disp([fxy1,fxy2])

  • 相关阅读:
    django 登入,注册,密码重置
    Django 通过 admin 操作 MySQL数据库 ,审核功能加储存记录
    Python Django 循环插入到 MongoDB数据库中
    运行Django找不到Windows“http://127.0.0.1:8000/”的问题
    大数据 ----- Linux(基础命令)
    大数据 ----- 虚拟机与SXhell6 的链接
    大数据 ----- 在Xshell6 安装Hadoop与JDK以及环境变量
    java day14第十四课 IO(输入、输出)流和JAVA目录操作(重中之重)
    13弹;集合中的工具类Collections和Arrays
    第3弹;流程控制
  • 原文地址:https://www.cnblogs.com/expedition/p/10889150.html
Copyright © 2011-2022 走看看