其他分享
首页 > 其他分享> > 科学思维与科学方法论--Matlab大作业 1.三次多项式逼近sinx问题;2、卫星运动轨迹;3、RLC振荡电路simulink

科学思维与科学方法论--Matlab大作业 1.三次多项式逼近sinx问题;2、卫星运动轨迹;3、RLC振荡电路simulink

作者:互联网

题目

在这里插入图片描述
在这里插入图片描述

1、三次多项式逼近sinx问题

1)题目分析:

用一个三次多项式在区间**[0,2π]内逼近函数sinx(在给定区间内,均匀选择20个采样点),求出三次多项式表达式,并画出三次多项式与sinx的比较曲线”,知主要内容如下:
①sin(x) 在[0,2π]均匀选取
20个采样点;
②三次多项式逼近,也即
多项式拟合**问题;
③画出曲线;
在本课程中,我们已经学过了polyfit函数多项式拟合的方法其中函数原型为: p=polyfit(x,y,n)
x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。在求出p之后。可利用poly2sym§生成多项式函数,也可利用polyval(p,x)函数进行多项式求值。
对于两条曲线图形绘制而言,只需使用plot函数第三或第四种表达形式即可:
plot(X,Y) plot(X,Y,LineSpec) plot(X1,Y1,...,Xn,Yn) plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)
在此格式中,每对x,y必须符合plot(x,y)中的要求,不同对之间没有影响,命令将对每一对x,y绘制曲线。plot是绘制一维曲线的基本函数,但在使用此函数之前,须先定义曲线上每一点的x以及y坐标。同时可以利用LineSpec - 线型、标记和颜色进行区分。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)代码实现:

通过以上分析,可写出代码如下:

syms x y;
y = sin(x);
a = 0 : 2pi/20 : 2pi; % 在[0:2pi]均匀取20个点
b = sin(a); % 对应sinx值
p = polyfit(a,b,3) % 对这20个点进行三次多项式进行线性拟合
y = poly2sym§ % 生成多项式函数
x1 = linspace(0,2
pi); % [0:2*pi]
y1 = sin(x1);
y2 = polyval(p,x1); % 拟合曲线
plot(x1,y1,‘b’,x1,y2,‘r’) % 画图
title(‘sinx及其三次多项式拟合曲线’)
ylabel(‘y’)
xlabel(‘x’)

运行结果如下:

p =

 0.0886   -0.8347    1.7861   -0.1192
y =

(1595403964975287*x^3)/18014398509481984- (3759082031905793*x^2)/4503599627370496+ (8043829737606779*x)/4503599627370496- 8586688527312135/72057594037927936

其中蓝色的为sin(x),红色的为三次多项式拟合曲线,看出有少许偏移,拟合效果还不错;
在这里插入图片描述

2、卫星运动轨迹求解问题

1)题目分析

易知本题为微分方程求解问题,且初值等条件已给出,我们只需求出数值解并画出轨迹图。考虑使用ode45函数求解非刚性微分方程,函数如下:
[t,y] = ode45(odefun,tspan,y0,options)
其中,tspan = [t0 tf])求微分方程组 y′=f(t,y) 从 t0 到 tf 的积分,初始条件为 y0。解数组 y 中的每一行都与列向量 t 中返回的值相对应。使用由 options(使用 odeset 函数创建的参数)定义的积分设置。例如,使用 AbsTol 和 RelTol 选项指定绝对误差容限和相对误差容限,或者使用 Mass 选项提供质量矩阵。

2)代码实现

首先编写m文件,代码如下:
function dx = homework2(t , x)
% x1 : x
% x2 : dx
% x3 : y
% x4 : dy
u1 = 1 / 82.45;
u2 = 1 - u1;
r1 = sqrt((x(1) + u1)^2 + x(3)^2);
r2 = sqrt((x(1) - u2)^2 + x(3)^2);
dx = [x(2)
2x(4) + x(1) - u2(x(1) + u1)/r1^3 - u1*(x(1) - u2)/r2^3
x(4)
-2x(2) + x(3) - u2x(3)/r1^3 - u1*x(3)/r2^3]
end
如注释所示,x1为x,x2为dx,x3为y,x4为dy;

命令行代码为:

x0=[1.2;0;0;-1.0493575]; % 初始条件
% opts = odeset(‘RelTol’,1e-6,‘AbsTol’,1e-6);

[t , x]=ode45(@homework2,[0,24],x0); % 求解
% [t , x]=ode45(@homework2,[0,24],x0,opts);

plot(x(:,1),x(:,3))
title(‘阿波罗卫星运动轨迹’)
xlabel(‘x’)
ylabel(‘y’)
save(‘homework2.mat’)

首先进行不进行options赋值,运行结果如左图下,赋值如右图:

请添加图片描述请添加图片描述

3、RLC振荡电路simulink仿真

1)题目分析

如图所示,电路模型及其参数已经给出,我们只需在simulink中搭建模型即可。
本次仿真模型用到的有电容(Capacitor),电阻(Resistor),电感(Inductor)、开关(Circuit Breaker)、直流电流源(DC Current Source)、示波器(Scope)、Solver Configuration、Current Sensor、Pulse Generator、Simulink-PS Converter、PS-Simulink
Converter、To Workspace等。

2)模型搭建

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
最终模型如图所示,
在这里插入图片描述

ConditionBlock BehaviorResistance Parameter Used
vT < ThresholdThe breaker is closed. Port 1 connects to port 2.Closed Resistance
vT ≥ ThresholdWhen the current in port 1 goes through zero, the phase disconnects from port 2. The breaker is open.Open Conductance

因此,设置Pulse Generator如下:
在这里插入图片描述
下面是脉冲信号示意图:
在这里插入图片描述
在这里插入图片描述
下图即为仿真结果,很容易和上图对照:
在这里插入图片描述
然后利用To Workspace导入工作区保存文件,
在这里插入图片描述
代码如下:>> save(‘homework3mat’)
读出数据稳定结果为0.0248A

标签:plot,simulink,函数,sinx,多项式,拟合,振荡电路,x1
来源: https://blog.csdn.net/qq_20702449/article/details/119040794