实验报告
实验6: 数值计算(2)
该实验作业设计教会学生基本的数值计算方法。
一、实验目的:
1. 通过完成实验,掌握MATLAB的数值计算
2. 熟悉浮点数相等的判断方法、了解截断误差
3. 熟悉数值拟合的实际运用;
4. 熟悉牛顿法求方程的根。
二、实验内容
1. 1) 设 delta = 5 - 4.8; 用关系运算查看 delta 是否等于 0.2;利用format longE 查看delta究竟是多少,注意,由于计算机在浮点运算时,总存在舍入误差,故理想的判断相等的方法是
使用 eps,即 abs(delta - 0.2) < eps
2)尝试利用 roundn(delta,-5)四舍五入到小数点后面5位后,再利用关系运算查看其是否等于 0.2。注意拷贝时勿跳坑!
delta=5-4.8;%定义delta的值
if delta==0.2%判断delta是否等于0.2
    disp('yes')
end
format longE;%设置数值精度
delta
delta =
    2.000000000000002e-01
if abs(delta-0.2)<eps
    disp('yes')
end
yes
roundn(delta,-5)
ans =
    2.000000000000000e-01
%将delta四舍五入到小数点后面5位
if roundn(delta,-5)==0.2
    disp('yes')
end
2. 利用符号计算 taylor(f, x, 'Order', n) 对符号函数f进行n阶截断展开,绘图观察 对 分别进行3阶、8阶、12阶截断的泰勒展开,并利用fplot( [ 三阶截断, 8阶截断, 12阶截断, 真实值 ] ) 绘图,要求x轴限制在 -5 到 5,坐标轴紧贴图形,并显示如fplot中的图例以方便观察。查看不同截断阶数造成的误差。
clf;
syms f(t)
f(t)=exp(t);
format short;
y1=taylor(f,t,'Order',3);
%对符号函数f进行n阶截断展开
y2=taylor(f,t,'Order',8);
y3=taylor(f,t,'Order',12);
ax.XTick = [-5,5];
fplot (y1,'y-',[-5,5]);
axis 'tight'
hold on;
fplot (y2,'r-',[-5,5]);
hold on;
fplot (y3,'g-',[-5,5]);
hold on;
fplot (f,'bo-',[-5,5]);
xlim([-5,5])
%要求x轴限制在 -5 到 5
3. x = 0:5; 实验测得 y = [15, 10, 9, 6, 2, 0]; 请就y对x进行线性回归,说说其拟合的基本原理。
clf;
clear
x=0:5;
y1=[15,10,9,6,2,0];
p=polyfit(x,y1,1);
figure
y2=polyval(p,x)
y2 = 1×6
  14.2857  11.3714    8.4571    5.5429    2.6286  -0.2857
plot(x,y1,'o');
hold on
plot(x,y2)
hold off
4. 对于 利用牛顿法从某一初值求根。
因为
因为我们希望x,希望 ,故右式等于0,所以有 ,即如果我们初始猜测x的值为,我们可以由下式得到一个序列 {
现就 求根(从开始)。将下面文档取消最外层注释后存为函数.m文件。
% function x = mynewton (f,f1 ,x0 ,n)
% % Solves f(x) = 0 by doing n steps of Newton 's method starting at x0.
% % Inputs : f -- the function
% % f1 -- it 's derivative
% % f 和 f1 在主程序中可以设为匿名函数
% % x0 -- starting guess , a number
% % n -- the number of steps to do
% % Output : x -- the approximate solution
% x = x0; % set x equal to the initial guess x0
% for i = 1:n % Do n times
%    x = x - f(x)/ f1(x) % Newton 's formula , prints x too
% end
% end
并尝试用多项式求根计算求解其结果,对比两者实根的误差;再试试可以绘图法求根。
f=@(x)x.^3-4;
%定义f函数
f1=@(x)3*x^2;
x1=mynewton(f,f1,1,9)
x1 = 1.5874
%调用mynewton文件
syms t
eqn1=t.^3-4==0;
%所求表达式
X=eval(solve(eqn1,t))
X = 3×1 complex
  1.5874 + 0.0000i
  -0.7937 + 1.3747i
  -0.7937 - 1.3747i
X1=roots([1 0 0 -4])
X1 = 3×1 complex
  -0.7937 + 1.3747i
  -0.7937 - 1.3747i
  1.5874 + 0.0000i
%多项式求根得到的结果
x1=linspace(1,2,1000);
y1=4+zeros(1000,1);
y2=x1.^3;
plot(x1,y2,'r-');
hold on;
plot(x1,y1,'b-')
text(1.5874,4,'*',matlab求导'FontSize',20)
5. 对,按照下面两种算法计算定积分
算法1:利用递推公式 ,取
这里利用分部积分可得上面的递推公式
算法2:利用递推公式 ,注意到
从计算结果看,哪个算法是不稳定的,哪个算法是稳定的。