科学思维与科学方法论--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,2pi); % [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)模型搭建
最终模型如图所示,
Condition | Block Behavior | Resistance Parameter Used |
---|---|---|
vT < Threshold | The breaker is closed. Port 1 connects to port 2. | Closed Resistance |
vT ≥ Threshold | When 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