ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:32.25KB ,
资源ID:29185137      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29185137.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数值计算常见编程汇总20教材.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数值计算常见编程汇总20教材.docx

1、数值计算常见编程汇总20教材1. 秦九韶法利用秦九韶算法求多项式p(x)=x5-3x4+4x2-x+1在x=3时的值。x=input(请输入x:);n=input(请输入多项式最高幂数n:);a=input(请按照升幂顺序写出系数矩阵:);v0=a(n+1);for k=1:n v1=v0*x+a(n+1-k); v0=v1;endv=v0请输入x:3请输入多项式最高幂数n:5请按照升幂顺序写出系数矩阵:1 -1 4 0 -3 1v =342. 二分法用二分法求方程x3-x-1=0在1,2内的近似根,要求误差不超过10-3a=1;b=2;fa=a3-a-1;fb=b3-b-1;c=(a+b)/

2、2;fc=c3-c-1;if fa*fb0 ,break ,end while abs(fc)0.001 c=(a+b)/2; fc=c3-c-1; if fa*fc0; b=c; fb=fc; else a=c; fa=fc; endendformat longfx=fc, x=cfx = -4.659488331526518e-05x = 1.3247070312500003. 拉格朗日差值法:已知点(1 0)、(2 7)、(3 16)求x=4的值。x=input(以行向量形式输入x的取值);y=input(以行向量形式输入y的取值);n=input(多项式的次数);x1=input(计算

3、在x处的函数值,x1=);for k=1:(n+1) l(k)=1;endfor k=1:(n+1) for i=1:k-1 l(k)=l(k)*(x1-x(i)/(x(k)-x(i); end for i=(k+1):(n+1) l(k)=l(k)*(x1-x(i)/(x(k)-x(i); endendp=0;for k=1:n+1 p=p+l(k)*y(k);enddisp(p);以行向量形式输入x的取值1 2 3以行向量形式输入y的取值0 7 16多项式的次数2 计算在x处的函数值,x1=4274. 分段插值法:已知点(0 0.9)、(4 3.4)、(6 5.8)(8 8.9)(10 1

4、2)求x=7.5的值。x = 0 4 6 8 10;y = 0.9 3.4 5.8 8.9 12;n = length(x);x0=input(输入待求x0的值:);for i=1:n-1 if x0 x(n) disp(不符合条件,无法进行分段插值); break; end if x(i) = x0 & x0 x(i+1) f = y(i) + ( y(i+1) - y(i) / ( x(i+1)-x(i) ) * ( x0 - x(i) ); endendF输入待求x0的值:7.5f =8.12505. 牛顿差值已知点(2 3),(3 7),(5 9),(8 12)求x=7的值x0=2;x

5、1=3;x2=5;x3=8;y0=3;y1=7;y2=9;y3=12;x=7;f11=(y1-y0)/(x1-x0);f12=(y2-y0)/(x2-x0);f13=(y3-y0)/(x3-x0);f22=(f12-f11)/(x2-x1);f23=(f13-f11)/(x3-x1);f33=(f23-f22)/(x3-x2);N=y0+f11*(x-x0)+f22*(x-x1)*(x-x0)+f33*(x-x2)*(x-x1)*(x-x0);p=Np = 9.66676. 分段三次插值:已知:p(0)=0,p(1)=3,p(2)=12,p(3)=33,p,(0)=2,p,(1)=5,p,(2

6、)=14,p,(3)=29,用分段三次插值法求解p(1.2)clc;x=input(已知x的取值);y=input(已知y的取值);yy=input(已知y的一阶导数的取值);n=input(请输入x值的个数:);x0=input(x0的取值);y0=0;for i=1:n-1 if(x0x(n) disp(输入的值不在所给范围内); break; end if(x(i)=x0&x0x(i+1) h=x(i+1)-x(i); t=(x0-x(i)/h; y0=(t-1)2*(2*t+1)*y(i)+t2*(3-2*t)*y(i+1)+h*t*(t-1)2*yy(i)+h*t2*(t-1)*yy

7、(i+1); endenddisp(y0);已知x的取值0,1,2,3已知y的取值0,3,12,33已知y的一阶导数的取值2,5,14,29请输入x值的个数:4x0的取值1.2 4.12807. 牛顿插值公式已知:p(0)=0,p(1)=3,p(2)=12,p(3)=33, 用牛顿插值法求解p(1.2)clc;t=input(以行向量形式输入x的取值); y=input(以行向量形式输入y的取值);n=input(多项式的次数); x=input(计算在x处的函数值,x=);for k=2:(n+1)f(k)=0;endfor k=2:(n+1)for i=1:ku=1; for j=1:(i

8、-1)u=u*(t(i)-t(j); end for j=(i+1):ku=u*(t(i)-t(j);endf(k)=f(k)+y(i)/u; ,endendp=y(1);for k=2:(n+1)v=1;for i=1:(k-1) v=v*(x-t(i);end p=p+f(k)*v;enddisp(p);以行向量形式输入x的取值0,1,2,3;以行向量形式输入y的取值0,3,12,33多项式的次数3计算在x处的函数值,x=1.2 4.12808. 复化梯形积分公式已知f(x)=3x2+2*x,将区间0,3划分为3段,用复化梯形积分公式求函数f(x)在区间0,3积分。方法1clc;f=inp

9、ut(请输入函数形式,s);f=inline(f);a=input(积分下限a:);b=input(积分上限b:);n=input(需要划分的段数:);h=(b-a)/n;x(1)=a;x(n+1)=b;s=f(x(1)+f(x(n+1);for i=2:n x(i)=x(i-1)+h; s=s+2*f(x(i);ends=s*h/2;disp(s);请输入函数形式3*x2+2*x积分下限a:0积分上限b:3需要划分的段数:3 37.5000方法2 clc;a=input(积分下限a:);b=input(积分上限b:);n=input(需要划分的段数:);h=(b-a)/n;x(1)=a;x(

10、n+1)=b;for i=1:n+1 x(i)=x(1)+(i-1)*h; f(i)=3*x(i)2+2*x(i) ;ends=f(1)+f(n+1);for i=2:ns=s+2*f(i);ends=s*h/2;disp(s);积分下限a:0积分上限b:3需要划分的段数:3 37.50009. 复化辛普生积分公式已知f(x)=3x2+2*x,将区间0,3划分为3段,用复化辛普生积分公式求函数f(x)在区间0,3积分。方法1clc;f=input(请输入函数形式,s);f=inline(f);a=input(积分下限a:);b=input(积分上限b:);n=input(需要划分的段数:);h

11、=(b-a)/n;x(1)=a;x(n+1)=b;s=f(x(1)+f(x(n+1);for i=2:n x(i)=x(i-1)+h; s=s+4*f(x(i-1)+x(i)/2)+2*f(x(i);ends=s+4*f(x(n)+x(n+1)/2);s=s*h/6;disp(s);请输入函数形式3*x2+2*x积分下限a:0积分上限b:3需要划分的段数:336方法2clc;a=input(积分下限a:);b=input(积分上限b:);n=input(需要划分的段数:);h=(b-a)/n;x(1)=a;x(n+1)=b;for i=1:n+1 x(i)=x(1)+(i-1)*h; f(i)

12、=3*x(i)2+2*x(i) ;endfor i=1:n y(i)=(x(i)+x(i+1)/2 l(i)=3*y(i)2+2*y(i) ;end s= f(n+1)-f(1);for i=1:n s=s+4*l(i)+2*f(i);ends=s*h/6;disp(s);积分下限a:0积分上限b:3需要划分的段数:3 3610. 两点高斯公式已知f(x)=3x2+2*x,将区间0,3划分为3段,用两点高斯积分公式求函数f(x)在区间0,3积分。clc;f=input(请输入函数形式,s);f=inline(f);a=input(积分下限a:);b=input(积分上限b:);n=input(

13、需要划分的段数n:);h=(b-a)/n;t=2*30.5;x(1)=a;s=0;for i=2:n+1 x(i)=x(i-1)+h; c=(x(i)+x(i-1)/2; s=s+f(c-h/t)+f(c+h/t);ends=s*h/2;disp(s);请输入函数形式3*x2+2*x积分下限a:0积分上限b:3需要划分的段数n:3 3611. 复化高斯公式已知f(x)=3x2+2*x,将区间0,3划分为3段,用两点高斯积分公式求函数f(x)在区间0,3积分.程序clc;f=input(请输入函数形式,s);f=inline(f);a=input(积分下限a:);b=input(积分上限b:);

14、n=input(需要划分的段数n:);h=(b-a)/n;x(1)=a;x(n+1)=b;s=0;for i=2:nx(i)=x(i-1)+h;endfor k=1:ns=s+f(x(k)+h/2+h/(2*30.5)+f(x(k)+h/2-h/(2*30.5);ends=s*h/2;disp(s);程序运行结果:请输入函数形式3*x2+2*x积分下限a:0积分上限b:3需要划分的段数n:3 3612. 导数公式已知:p(0)=0,p(1)=3,p(2)=12 ,分别用向前求导、中点求导、向后求导求p,(0)、p,(1)、 p,(2)clc;x0=input(请输入x0的值:);y0=inpu

15、t(请输入y0的值:);x1=input(请输入x1的值:);y1=input(请输入y1的值:);x2=input(请输入x2的值:);y2=input(请输入y2的值:);h=input(请输入h步长的值:);f=(y1 y0)/h;g=(y2-y0)/(2*h);k=(y2-y1)/h;disp(f);disp(g);disp(k);请输入x0的值:0请输入y0的值:0请输入x1的值:1请输入y1的值:3请输入x2的值:2请输入y2的值:12请输入h步长的值:1 3 6 913. 一步欧拉方法已知:y=x+xy,y(0)=1,h=0.2,用一步欧拉方法求解y(0.8)方法1、clear

16、all;clc;f=input(请输入导数的函数形式,s);f=inline(f);x0=input(x0的初始值);y0=input(y0的初始值);h=input(步长);x=input(x的值);while(x0x) x1=x0+h; y1=y0+h*f(x0,y0); x0=x1; y0=y1;enddisp(y0);请输入导数的函数形式x+x*yx0的初始值0y0的初始值1步长0.2x的值0.8 1.5160方法2、clear all;clc;x1=input(x1的初始值:);y1=input(y1的初始值:);h=input(步长:);x=input(x的值:);n=(x-x1)

17、/h;for i=1:n+1y(i)=1end for i=1:n x(i)=x1+(i-1)*h; y(i+1)=y(i)+h*(x(i)+x(i)*y(i); enddisp(y(5)x1的初始值:0y1的初始值:1步长:0.2x的值:0.8 1.516014. 二步欧拉方法已知:y=x+xy,y(0)=1,h=0.2,用二步欧拉方法求解y(0.8)方法1clear all;clc;f=input(请输入导数的函数形式,s);f=inline(f);x0=input(x0的初始值:);y0=input(y0的初始值:);h=input(步长h:);x=input(x的值:);x1=x0+h

18、;y1=y0+h*f(x0,y0);while(x1x) x2=x1+h; y2=y0+2*h*f(x1,y1); y0=y1;y1=y2; x0=x1;x1=x2;enddisp(y1);请输入导数的函数形式x+x*yx0的初始值:0y0的初始值:1步长h:0.2x的值:0.8 1.7229方法2:clear all;clc;x0=input(x0的初始值:);y0=input(y0的初始值:);h=input(步长h:);x=input(x的值:);n=(x-x0)/h;for i=1:n+1 y(i)=1;endy(2)=y0+h*(x0+x0*y0);for i=1:n-1 x(i+1

19、)=x0+i*h; y(i+2)=y(i)+2*h*(x(i+1)+x(i+1)*y(i+1);enddisp(y(5)x0的初始值:0y0的初始值:1步长h:0.2x的值:0.8 1.7229 15. 隐式欧拉方法及其改进方法已知:y=x+xy,y(0)=1,h=0.2,用二步欧拉方法求解y(0.8)clear all;clc;f=input(请输入导数的函数形式,s);f=inline(f);x0=input(x0的初始值:);y0=input(y0的初始值:);h=input(步长h:);xn=input(终值:);while(x0esp)x2=f(x1);x0=x1;x1=x2;end

20、format short ex1程序运行结果:x1 = 1.6892e-01方法2clear all;clc;n=input(请输入迭代次数:)x0=0;for i=1:nx1=0.2*exp(-x0);x0=x1;endformat short ex0请输入迭代次数:5x0 = 1.6894e-0118. 雅克比迭代法用雅克比迭代法求解方程a=input(输入加工后方程组的系数矩阵a);b=input(输入加工后b的取值);x=input(输入方程组的解的迭代初值);n=numel(b);N=input(输入迭代的次数);for i=1:N for j=1:n t(j)=b(j); for

21、k=1:n t(j)=t(j)+a(j,k)*x(k); end end x=t;enddisp(x);输入加工后方程组的系数矩阵a0 0 -0.1 0.5;-1/8 0 3/8 0;3/8 1/4 0 1/8;-1/7 2/7 -2/7 0输入加工后b的取值-0.7 11/8 -23/8 17/7输入方程组的解的迭代初值0 0 0 0输入迭代的次数15 1.0000 0.5000 -2.0000 3.000019. 高斯-塞德尔迭代法用高斯-赛德尔迭代法求解方程clear all;clc;a=input(输入加工后方程组的系数矩阵a);b=input(输入加工后b的取值);x=input(输

22、入方程组的解的迭代初值);n=numel(b);N=input(输入迭代的次数);for i=1:N for j=1:n x(j)=b(j); for k=1:n x(j)=x(j)+a(j,k)*x(k); end endenddisp(x);输入加工后方程组的系数矩阵a0 0 -0.1 0.5;-1/8 0 3/8 0;3/8 1/4 0 1/8;-1/7 2/7 -2/7 0输入加工后b的取值-0.7 11/8 -23/8 17/7输入方程组的解的迭代初值0 0 0 0输入迭代的次数10 1.0000 0.5000 -2.0000 3.000020. 追赶法用追赶法求解方程clear a

23、ll;clear all;a=input(输入方程组的系数a);b=input(输入方程组的系数 b);c=input(输入方程组的系数c);f=input(输入方程组的系数 f);n=input(输入方程组的未知数个数);u(1)=c(1)/b(1);y(1)=f(1)/b(1);for k=2:n u(k)=c(k)/(b(k)-u(k-1)*a(k); y(k)=(f(k)-y(k-1)*a(k)/(b(k)-u(k-1)*a(k);endx(n)=y(n);for i=1:n-1 x(n-i)=y(n-i)-u(n-i)*x(n-i+1);enddisp(x)输入方程组的系数a0 -1 -1 -3输入方程组的系数 b2 3 2 5输入方程组的系数c-1 -2 -4 0输入方程组的系数 f6 1 0 1输入方程组的未知数个数4 3 0 -2 -1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1