zoukankan      html  css  js  c++  java
  • MATLAB的一些基础知识

     1.已知a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)))产生精准符号数字,请回答:以下产生的各种符号数哪些是精准的?若不精准,误差又是多少?能说出产生误差的原因吗?

    a2=sin(sym(pi/4)+exp(sym(0.7))*exp(sym(pi/3)))

    a3=sin(sym('pi/4')+exp(sym('0.7'))*exp(sym('pi/3')))

    a4=sin(sym('pi/4')+exp(sym('0.7+pi/3')))

    a5=sin(sym(pi/4)+exp(sym(0.7+pi/3)))

    a6=sin(sym(pi/4)+sym(exp(0.7+pi/3)))

    a7=sin(sym(pi/4+exp(0.7+pi/3)))

    a8=sym(sin(pi/4+exp(0.7+pi/3)))

    (提示:可用vpa观察误差;注意数位的设置)。

    解答:

    这里首先介绍一个函数vpa:

     1 %{
     2 一、要修改运算的精度,需要digits()函数和vpa()函数同时执行,单独使用digits函数不会改变运算精度!
     3 二、vpa()函数对函数内部的变量运算过程不修改精度
     4 %}
     5 clear,clc;
     6 format long; 
     7 %digits(m)  ,这里设置的vpa会使用digits设定的精度位数m
     8 digits(2),vpa(pi),vpa(2*pi)
     9 
    10 %vpa(pi,n)  n>=m才可以   
    11 vpa(pi,30)
    View Code

    执行结果为:

    这里面说明了vpa()函数的用法,本次实验保留位数为30.

    接着介绍一个函数sym.  

    S = sym(A)将非符号对象(如,数字,表达式,变量等)A转换为符号对象,并存储在符号变量S中.  但是需要注意的一点是:如果A是整数,那么sym('A')和sym(A)没有任何区别,但是如果不是整数,结果可能不一样:前者以字符串的形式传给符号运算内核,可以保留完整的精度;而后者经过浮点数运算之后再转换为符号类型,存在精度损失。

    测试代码如下:

    1 %整数
    2 sym('3')==sym(3)
    3 
    4 %非整数,前者以字符串的形式传给符号运算内核,可以保留完整的精度;
    5 %而后者经过浮点数运算之后再转换为符号类型,存在精度损失。
    6 sym('sqrt(2)-1')-sym(sqrt(2)-1) 
    View Code

    测试结果如下:

    本题测试代码如下:

     1 clear,clc;
     2 format long; 
     3 digits(2);
     4   
     5 a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)));
     6 a2=sin(sym(pi/4)+exp(sym(0.7))*exp(sym(pi/3)));
     7 a3=sin(sym('pi/4')+exp(sym('0.7'))*exp(sym('pi/3')));
     8 a4=sin(sym('pi/4')+exp(sym('0.7+pi/3')));
     9 a5=sin(sym(pi/4)+exp(sym(0.7+pi/3)));
    10 a6=sin(sym(pi/4)+sym(exp(0.7+pi/3)));
    11 a7=sin(sym(pi/4+exp(0.7+pi/3)));
    12 a8=sym(sin(pi/4+exp(0.7+pi/3)));
    13 
    14 %vpa(a1,30)
    15 da2 = vpa(a1-a2,30)
    16 da3 = vpa(a1-a3,30)
    17 da4 = vpa(a1-a4,30)
    18 da5 = vpa(a1-a5,30)
    19 da6 = vpa(a1-a6,30)
    20 da7 = vpa(a1-a7,30)
    21 da8 = vpa(a1-a8,30)
    测试代码

    执行结果如下:da2 =0.0    da3 =0.000000000526537778494579980984266569899      da4 =0.0000000000162197098301695333225327542401

    da5=0.000000000000000887482271695958461952368291362    da6=0.00000000000000148912212817656334175587101055

    da7=0.00000000000000151885559392782263589719125845     da8=0.00000000000000151859755909122793880745885451

    到这里可以看出除了第一个测试语句与标准语句结果相同外,其余皆有误差。误差原因:从结果可以看出sym(A)与sym('A')的误差差别对结果带来的影响。

    2. 请读者先运行以下指令

    a=0;b=pi;

    t1=a:pi/9:pi;

    t2=linspace(a,b,10);

    T=t1*t2';

    F=find(T<0);

    然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少?t1完全等于t2吗?为什么?

    a是单变量 ,t1是1*10的向量,T是单变量([1][10]  *  [10]*[1]  -->[1]*[1]),F=0.

    t1完全等于t2,因为t1是从0开始到pi,间隔为pi/9的序列,共10个数;而t2是0到pi之间的等间隔的十个数。 

    3. 对于指令A=reshape(1:18,3,6)产生的数组

    A =

         1     4     7    10    13    16

         2     5     8    11    14    17

         3     6     9    12    15    18

    先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。然后,再请你用一条指令,把A数组的第4、5两列元素都被重新赋值为Inf。

     A([2 4 8 16])=NaN

     A([10 11 12 13 14 15])=Inf

     执行结果如下图:

     

     

  • 相关阅读:
    Eclipse 的SVN 插件
    linux克隆后修配置
    SVN服务器端环境搭建步骤
    Linux安装 jdk、tomcat、eclipse、mysql
    Linux RPM和YUM
    linux进程管理
    day21
    day20
    day18 作业
    day 19
  • 原文地址:https://www.cnblogs.com/liugl7/p/5332608.html
Copyright © 2011-2022 走看看