数值分析-matlab 第一章

1.1  例题解答
例1.1 计算 , .
解:
创建符号函数: 
>> syms x; 
>>f=sym('sin(x)')
 f = 
sin(x)
展开至7阶泰勒级数:
>> h=taylor(f,8,0) 
h = 
x-1/6*x^3+1/120*x^5-1/5040*x^7
求泰勒级数在 处的函数值:
>> subs(h,x,0.5)  
ans =
   0.479425533234127
也可以通过内联函数来求解:
>>H=inline(h)  
H =
     Inline function:
     H(x) = x-1./6.*x.^3+1./120.*x.^5-1./5040.*x.^7  
>>feval(H,0.5)  
ans =
   0.479425533234127


例 1.2 计算积分值 .
解:
解法一:( 符号法):
>> I=int('1/(1+x)','x',0,1)
 I =
 log(2)


解法二 :(数值法):
>>x=0:0.2:1;  %将[0,1]等分为4等份
>>f=1./(1+x); %分别计算每一个等分点的函数值
>>I=0;
>>for i=1:5
    I=I+(f(i)+f(i+1))/2*0.2;  %将每一小曲边的梯形累加起来作为积分值
End
>> vpa(I,9)    %取结果的小数精度为9位小数
 ans =
 .695634921
例 1.3略
例 1.4 不用开平方根计算 的值.
解:
解法一(符号法):
>> A=sym('a');
>> sqrt(A)
 ans =
 a^(1/2)
解法二(数值法):
按以下迭代公式迭代计算近似值:
 
建立函数文件msqrt.m
function x=msqrt(x0,a)
%用迭代法近似计算平方根
%x0为初始迭代值,a为开平方数
 
format long;
x=zeros(20,1);
x(1)=x0;
for i=2:20
    x(i)=1/2*(x(i-1)+a/x(i-1));
end
disp(x);
用编写的函数计算 , :
>> msqrt(2,3);
   2.000000000000000
   1.750000000000000
   1.732142857142857
   1.732050810014727
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
   1.732050807568877
上述结果为迭代过程计算的中间结果,分析数据可知迭代收敛速度快,只需四次计算即可计算出较为准确的数值.


例 1.5 略.
例 1.6 计算 ,视已知数为精确数,用4位浮点数计算.
解:
直接在Matlab中输入式子:
>> 1/759-1/760
ans =
  1.7336e-006
若先转化为浮点数再运算可得:
>> a=1/759,b=1/760,a-b
a =
    0.0013
b =
    0.0013
ans =
  1.7336e-006
可见Matlba在计算时,数据结构都取为双精度而提高了运算准确度.若以符号运算计算之,有:
>> a=sym('1/759'),b=sym('1/760'),c=a-b
 a =
 1/759
 b =
 1/760
 c =
 1/576840
可见符号运算准确但耗费运算时间.


例 1.7 略.
例 1.8 解方程 .
解:
符号法解方程:
>> x=solve('x^2-18*x+1','x')
 x =
 9+4*5^(1/2)
 9-4*5^(1/2)
将结果保留小数点6位:
>> vpa(x,6)
 ans =
 
 17.9443
 .5572e-1
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页