- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值计算方法上机实习题
设,
由递推公式,从I0=0.1824, 出发,计算;
,, 用,计算;
(1)由I0计算I20
递推子程序:
function f=fib(n,i)
if n>=1
f=fib(n-1,i)*(-5)+(1/(n));
elseif n==0
f=i;
end
计算和显示程序:
I=0.1824;
I1=0.1823;
fib1=fib(20,I);
fib2=fib(20,I1);
fprintf('I_0=0.1824时,I_20=%d\n',fib1);
fprintf('I_0=0.1823时,I_20=%d\n',fib2);
计算结果显示:
I_0=0.1824时,I_20=7.480927e+09
I_0=0.1823时,I_20=-2.055816e+09(2)由I20计算I0
程序:
n=21;
i1=0;
i2=10000;
f1=i1;
f2=i2;
while n~=0;
f1=f1*(-1/5)+(1/(5*n));
f2=f2*(-1/5)+(1/(5*n));
n=n-1;
end
fprintf('I_20=0 时,I_0=%4.8f\n',f1);
fprintf('I_20=10000时,I_0=%4.8f\n',f2);
计算结果显示:
I_20=0 时,I_0=0I_20=10000时,I_0=0
分析结果的可靠性及产生此现象的原因(重点分析原因)。
答:第一个算法可得出e0=I0-I0*
en=In-In*=5ne0
易知第一个算法每一步计算都把误差放大了5倍,n次计算后更是放大了5n倍,可靠性低。
第二个算法可得出
en=In-In*
e0=15nen
可以看出第二个算法每一步计算就把误差缩小5倍,n次后缩小了5n倍,可靠性高。
求方程的近似根,要求,并比较计算量。
在[0,1]上用二分法;
[0,1]上的二分法
二分法子程序:
function [root,n]=EFF3(f,x1,x2)
%第二题(1)二分法
f1=subs(f,symvar(f),x1);%函数在x=x1的值
f2=subs(f,symvar(f),x2);%x=x2
n=0;%步数
er=5*10^-4;%误差
if(f1==0)
root=x1;
return;
elseif(f2==0)
root=x2;
return;
elseif(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
while(abs(x1-x2)>er)%循环
x3=(x1+x2)/2;
f3=subs(f,symvar(f),x3);
n=n+1;
if(f3==0)
root=x3;
break;
elseif(f1*f3>0)
x1=x3;
else
x2=x3;
end
end
root=(x1+x2)/2;%while循环少一步需加上
end计算根与步数程序:
fplot(@(x) exp(x)+10*x-2,[0,1]);
grid on;
syms x;
f=exp(x)+10*x-2;
[root,n]=EFF3(f,0,1);
fprintf('root=%6.8f ,n=%d \n',root,n);
计算结果显示:
root=0,n=11
取初值,并用迭代;
初值x0=0迭代
迭代法子程序:
function [root,n]=DDF(g,x0,err,max) (接下页)
%root根,n+1步???,g函数,x0初值,err误差,max最大迭代次数
X(1)=x0;
for n=2:max
X(n)=subs(g,symvar(g),X(n-1));
c=abs(X(n)-X(n-1));
root=X(n);
if(c<err)
break;
end
if n==max
disp('超出预设迭代次数');
end
end
n=n-1;%步数减1计算根与步数程序:
syms x;
f=(2-exp(x))/10; (接下页)
x0=0;
err=5*10^(-4);
max=100;
[root,n]=DDF(f,x0,err,max);
f
文档评论(0)