1.1病态问题
1.1算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题是指问题本身对扰动敏感,反之属于好问题。本实验通过对一个高次多项式方程的求解,初步认识病态问题。
**1.1实验内容
**考虑一个高次的代数多项式
(E.1.1)
显然该多项式的全部根为1,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。现考虑该多项式的一个扰动, (E.1.2)
其中,ε是一个非常小的数。这相当于是对方程(E.1.1)中的系数作一个小的扰动。比较方程(E.1.1)和方程(E.1.2)根的差别,从而分析方程(E.1.1)的解对扰动的敏感性。
实验要求:
1.选择充分小的ε反复进行上述实验, 记录结果的变化并进行分析.
2.将扰动项改成或者其他, 实验中又会有怎么样的现象出现?
1.1程序代码:****
%数值实验1.1病态问题
%输入:[0,20]之间的的扰动项及小的扰动常数
%输出:加扰动后得到的全部根
result = inputdlg({'请选择被扰动项:[0,20]之间的整数:'},'charpt1_1',1,{'19'});%inputdlg函数:创建收集用户输入的对话框
Numb = str2num(char(result)); %定义一个numb变量//str2num将字符数组或字符串转换为数值数组
if((Numb > 20) || (Numb < 0)) %if判断语句
errordlg('请选择正确的扰动项:[0,20]之间的整数:'); %errordlg函数:创建错误对话框
return; %返回上一步
end %if语句结束
result = inputdlg({'请输入(0,1)之间的扰动常数:'},'charpt1_1',1,{'0.00001'});
ess = str2num(char(result)); %#ok<*ST2NM>
ve = zeros(1,21); %zeros函数:创建全零数组
ve(21 - Numb) = ess;
root = roots(poly(1:20)+ve); %多项式的根,求根公式
plot(root,'*'); %plot二维线图,制作出根的函数图像
disp(['对第',num2str(Numb),'加扰动',num2str(ess),',得到的全部根为:']);
disp(num2str(root)); %disp函数:显示变量的值