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
例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