电子科技大学数学实验4:数值计算实验

数值计算实验

基础训练

1.方程求根

编程调用fzero求解方程 2 x 3 − 3 x 2 + 4 x − 5 = 0 2x^3-3x^2+4x-5=0 2x33x2+4x5=0,并将所求根赋给变量xp,编写一个函数调用fzero,并返回xp。

解:

function xp=myfun

f=@(x)(2*x.^3-3*x.^2+4*x-5);

xp=fzero(f,0);
ans =

  1.3711

2. 求解二阶微分方程

d 2 x d t 2 = 20 ( 1 − x 2 ) d x / d t + 0.5 x x ( 0 ) = 2 ; x ′ ( 0 ) = 0 \frac{d^2x}{dt^2}=20(1-x^2)dx/dt+0.5x\\ x(0)=2; x'(0)=0 dt2d2x=20(1x2)dx/dt+0.5xx(0)=2;x(0)=0

编写函数调用ode工具箱函数返回x在点0:0.1:5处的函数值,用列向量存储这些函数值。此列向量为double型数组.

解:

function z=test

y0=[2;0];

tn=[0:0.1:5];

[t,y]=ode23(@myfun1,tn,y0);

z=y(:,1);

function f=myfun1(t,x)

f=[x(2);20*(1-x(1).^2)*x(2)+0.5*x(1)];
ans =

 

  2.0000

  2.0014

  2.0031

  2.0047

  2.0064

  2.0080

  2.0097

  2.0113

  2.0130

  2.0146

  2.0163

  2.0179

  2.0196

  2.0212

  2.0228

  2.0245

  2.0261

  2.0277

  2.0294

  2.0310

  2.0326

  2.0342

  2.0359

  2.0375

  2.0391

  2.0407

  2.0423

  2.0439

  2.0455

  2.0471

  2.0487

  2.0503

  2.0519

  2.0535

  2.0551

  2.0567

  2.0583

  2.0599

  2.0615

  2.0631

  2.0647

  2.0662

  2.0678

  2.0694

  2.0710

  2.0726

  2.0741

  2.0757

  2.0773

  2.0788

  2.0804

3. 二次多项式拟合

某种产品在生产过程中的性能指标y与它所含的某种材料的含量x有关,现将试验所得16组数据记录列于下表。

x20.0522.0924.1326.2428.1130.2932.0934.23
y26.510.462.753.5311.6729.9852.2687.19
x36.2338.240.2742.2744.0746.0548.4750.08
y128.11176.24235.17300.25365.66445.1552.84631

要求拟合y与x的函数关系。用多项式拟合函数polyfit进行二次多项式拟合。编写函数文件返回2个参数:

第1个返回参数为二次多项式系数组成的行向量p(元素由高次到低次排列);

第2个返回参数为拟合函数在点x=25:0.4:60处的函数值(用1个行向量表示)。

程序文件第1行参考格式如下:

function [p,v]= myfun

解:

function [p,v]=myfun

x=[20.05  22.09  24.13  26.24  28.11  30.29  32.09  34.23 36.23 38.2  40.27  42.27  44.07  46.05  48.47  50.08];

y=[26.5 10.46  2.75  3.53  11.67  29.98  52.26  87.19 128.11  176.24 235.17 300.25 365.66 445.1  552.84 631];

p=polyfit(x,y,2);

v=polyval(p,[25:0.4:60]);
P=1.0000 -49.9995 626.9857

V=1.0e+03 *[0.0020  0.0022  0.0026  0.0034  0.0046...1.1580  1.1854  1.2130]

综合训练

一.实验任务

请用Euler法和Matlab函数ode23求解下列微分方程:
d y d t = 0.02 ( 1 − 0.001 y ) y y ( 0 ) = 10 \frac{dy}{dt} = 0.02(1-0.001y)y\\ y(0)=10 dtdy=0.02(10.001y)yy(0)=10

并将Euler求解结果与Matlab的ode23函数求解结果対比(精确解),并绘图。(t:[0,300])

二. 实验目的

认识Euler法。熟悉Matlab解微分方程数值解的函数.

三.实验过程

function test

%此处令h=1

h=1;

y=10;

Y1=[10];

for i=0:h:299

  y=y+h*myfun1(i,y);

  Y1=[Y1;y];

end

%下面是ode求解

[a,Y2]=ode23(@myfun1,[0:h:300],10);

%合并两种运算的结果求误差并输出

wc=abs(Y1-Y2);

all=[a,Y1,Y2,wc];

fprintf('    t   y_Euler y_exact  error\n')

disp(all)

%绘图

plot(a,Y1,'r',a,Y2,'b')

function f=myfun1(t,y)

f=0.02*(1-0.001*y).*y;

这里我们令的是h=1 输出的误差是二者的绝对值

我们展示前后的结果
在这里插入图片描述

在这里插入图片描述

四. 实验自评与改进方向

总体完成情况还算可以,达到了题目的要求。但欧拉法和化二次微分方程为一次微分方程组的过程还是不熟悉。课下要着重的了解这一部分。同时也要了解龙格库塔等原理,才能更好的使用函数命令。

实验的函数交互不好,应设置输入变量,人为的规定h的值。达到更好的效果。

五. 实验体会,收获及建议

题目主要涉及的是微分方程的相关知识,个人认为这是目前为止比较难的内容。还有待加强。

在编程中遇到的一些意想不到的问题也让我意识到,要在平时多加练习,不能眼高手低。不能仅仅掌握课堂上的函数命令,在课余时间多去看一些编程,丰富自己的函数储备,并且学习思路,从而让自己的编程更加容易。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值