计算方法实验报告一.docx
- 文档编号:29832883
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:11
- 大小:152.51KB
计算方法实验报告一.docx
《计算方法实验报告一.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告一.docx(11页珍藏版)》请在冰豆网上搜索。
计算方法实验报告一
计算方法实验报告
(一)
(matlab语言编写)
班级:
软件03姓名:
裴磊学号:
10161041
(一)误差传播与算法稳定性
一.实验问题
(一).已知积分
=
具有递推关系:
试在4位十进制计算机上利用两种算法计算积分
算法
(1):
令
,计算
算法
(2):
令
,计算;
哪种算法准?
原因是什么?
(二).
设
问题的分析
问题一:
算法1:
令
=0.1542(≈ln7/6),计算
=
,i=1,2…7
算法2:
令
计算
=
(1-i
),i=11,10……1
问题二:
直接设计25项相加
三、程序设计
问题一:
(算法1)
clear;clc;
n=7;
i=0,I=0.1542;
fori=1:
n
I=1/i-6*I;
fprintf('i=%.0f,I=%.6f\n',i,I)
end
(算法2)clear;clc;
n=11;
i=11,I=0;
while(i)
i=i-1;
I=(1/(6*i))*(1-i*I);
fprintf('i=%.0f,I=%.6f\n',i,I)
end
问题二:
clear;clc;
n=24;
x=input('输入x的值:
');
S=1;
T=1;
fori=1:
n
T=T*x/i;
S=S+T;
end
ifx>0
s=1/S;
elses=S;
end
fprintf('s=%.10f\n',s);
四、计算结果
问题一:
(运行结果1)
i=1,I=0.074800
i=2,I=0.051200
i=3,I=0.026133
i=4,I=0.093200
i=5,I=-0.359200
i=6,I=2.321867
i=7,I=-13.788343
(运行结果2)
i=10,I=0.016667
i=9,I=0.015741
i=8,I=0.018210
i=7,I=0.020775
i=6,I=0.024315
i=5,I=0.029281
i=4,I=0.036787
i=3,I=0.049424
i=2,I=0.075096
i=1,I=0.154151
问题二:
x=5s=0.0067379470
x=-5s=0.0067379631
=0.0067379470
五、结果分析
问题一中算法2更准确,问题二中x=5时结果更准确
六、实验的总结与体会
两个问题说明为了减少计算误差,要避免小除数和大乘数,要防止溢出,应采用稳定算法,并减少计算次数。
(二)线性方程组的直接解法
一.实验问题
2-13用不选主元和选主元的高斯消去法求解下列方程组,并记下变换后的增广矩阵:
(1)
(3)
2-15用追赶法求解方程组
二.问题的分析(描述算法的步骤等)
不选主元时,直接高斯消去法:
对k=1~n-1做
对i=k+1~n做
令
对k=n-1~1令
(
)/
选主元时只需要在不选的基础上加上选择主元后交换即可,即:
对k=1
做
求
当p
时交换
的k,p行
追赶法时,
回代得
三.程序设计
(高斯消去法选主元或者不选主元)
clc
clearall
disp('用高斯消去法求解"[A][X]=[r]"')
t=input('是否选主元(1=是,0=否):
');
n=input('请输入行数n:
');
A=input('请输入系数矩阵[A]:
');
r=input('请输入列矩阵[r]:
');
B=[A,r];
fork=1:
n-1
ift==1
max=k;
fori=k+1:
n
ifB(i,k)>B(max,k)
max=i;
end
end
temp=B(max,:
);
B(max,:
)=B(k,:
);
B(k,:
)=temp;
end
fori=k+1:
n
c=B(i,k)/B(k,k);
B(i,k)=0;
forj=k+1:
n+1
B(i,j)=B(i,j)-c*B(k,j);
end
end
end
x(n,1)=B(n,n+1)/B(n,n);
fork=n-1:
-1:
1
s=0;
forj=k:
n-1
s=s+B(k,j+1)*x(j+1,1);
end
x(k,1)=(B(k,n+1)-s)/B(k,k);
end
disp('方程的解是:
');
disp(x)
disp('B变换后为:
')
disp(B)
(追赶法):
clear;clc;
disp('用追赶法求解三对角方程"[A][X]=[b]"')
n=input('请输入行数n:
');
A=input('请输入系数矩阵[A]:
');
b=input('请输入列矩阵[b]:
');
L=tril(A);
R=triu(A);
L(1,1)=A(1,1);
y(1,1)=b(1,1)/L(1,1);
fori=2:
n
R(i-1,i)=A(i-1,i)/L(i-1,i-1);
L(i,i)=A(i,i)-A(i,i-1)*R(i-1,i);
y(i,1)=(b(i,1)-A(i,i-1)*y(i-1,1))/L(i,i);
end
x(n,1)=y(n,1);
fori=n-1:
-1:
1
x(i,1)=y(i,1)-R(i,i+1)*x(i+1,1);
end
disp('方程的解为:
')
disp(x)
一、计算结果(截图)
问题一:
三个未知数的方程
问题二:
四个未知数的方程
问题三(追赶法):
二、结果分析
当计算机位数比较高时选不选主元得到的结果差异不大的,只是得到的变换后的增广矩阵不一样
六、实验的总结与体
根据方程的特点,选择合适的方法来计算,可以大大简化计算过程,使运算量大大降低,而且方法选择恰当时可以减小误差。
总的来说,学习了matlab感觉很有用,使用也很方便,关键是这里的语言简单,相对CC++来说,很多东西只要一两行代码就能搞定,而且用其能解决很多较为复杂的数学问题,个人觉得非常好,也非常喜欢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 实验 报告