正弦函数在matlab中实现

发布时间 2023-09-30 09:07:21作者: 静楷
%正弦函数在MATLAB中如何实现
%1.sin(45°)注意:参数值需要用“弧度”去定义
>>x=sin(45*pi/180);
%2.MATLAB中注意:开方-sqrt(x),指数函数-exp(x)
>>y=sqrt(2*exp(x+0.5)+1);
 
%3.MATLAB中几元几次方程的写法: 2x+3y-z=2
% 8x+2y+3z=4
% 45x+3y+9z=23
<<A=[2,3,-1;8,2,3;45,3,9];%建立系数矩阵
>>b=[2;4;23];%建立列向量b
>>B=[2,4,23]'%等价与b
>>x=inv(A)*b%对矩阵求逆。如果A是非奇异方阵,则B/A = B*inv(A),A\B = inv(A)*B。/表示右除,\表示左除。
 
%注意:使用inv时,必须对象为方阵。 (A左除B=A的逆乘以B):那边除那边为分母
%(1).可以借助符号计算解方程:
>>syms x y z %matlab中syms意思是定义多个变量
>>[x,y,z]=solve(2*x+3*y-z-2,8*x+2*y+3*z-4,45*x+3*y+9*z-23);%MATLAB中solve()主要是用来求解代数方程(多项式方程)的符号解析解。
%4.MATLAB中多项式的表示:
%(1).p(x)=x^4+3x^3+2x+1;
>>a=[1,3,0,0,2,1];%幂次从高到底,零系数和系数为0的幂次方不能省略
%(2).求方程2x^5-3x^3+71x^2-9x+13=0的全部根:
>>p=[2,0,-3,71,-9,13];%建立多项式系数向量
>>x=roots(p);%求根函数
>>x =
 
-3.4914
1.6863 + 2.6947i
1.6863 - 2.6947i
0.0594 + 0.4251i
0.0594 - 0.4251i %一个实根,三个虚根
%%%5.算术运算:
x=[1,2,3;4,5,6;7,8,9]; c=x^2;
x = 1 2 3 c =30 36 42
4 5 6 66 81 96
7 8 9 102 126 150
d=x.^2;
d = 1 4 9
16 25 36
49 64 81
乘:* 矩阵乘法
点乘: .* 相应元素相乘
幂: ^ 矩阵幂运算
点幂: ^ 相应元素进行幂运算
%6.近似计算和精确计算:
>>F=quad('x.*log(1+x)',0,1,0.001,1);
%1. F=quad('fname',a,b,tol,trace) Simpson数值积分法.
%2. F=quad8('fname',a,b,tol,trace) Newton-Cotes数值积分法.
其中(1).%fname是被积函数表达式或函数名
%(2).a,b分别是上下限,
%(3).tol可以控制积分精度,省略则取0.001;
%(4).trace=1则用图形表示积分过程,trace=0,没有图形
>> syms x
>> F=int(x*log(1+x),x,0,1);
%F=int(函数式子,表示哪个未知数的区间,上限(可以是函数),下限);
>>Y=subs(F,x,t);%将F表达式中的x(自变量)由t替换成1,并赋值给Y
subs()函数 表示将符号表达式中的某些符号变量替换为指定的新的变量
>>disp(Y);%类似于printf输出
>>syms x y z %定义符号变量
>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) %可以套娃!
%7.线性规划问题的编程:max 5x1+4x2+6x3
s.t.:x1-x2+x3<=20
3x1+2x2+4x3<=42
3x1+2x2<=30
0<=x1,0<=x2,0<=x3
>>F=[-5,-4,-6];%目标函数向量
>>A=[1,-2,2;3,2,4;3,2,0]; %Ax=b:不等式约束
>>b=[20,42,30];
>>Ib=zeros(3,1);%约束变量的下限向量
>>x=linprog(F,A,b,[],[],Ib,[]);%规划向量求解
>>fval=F*x;%目标函数最小值
%(1).linprog函数主要用来求线型规划中的最小值问题
%(2).针对约束条件为Ax=b或Ax≤b的问题
%(3).Aeq*x=beq:存在等式约束
%(4).linprog函数常用形式为:x=linprog(f,A,b,Aep,beq,lb,ub);
%8.MATLAB中保存和加载命令:
save 文件名 %将所有变量存入指定文件:
load 文件名 %载入数据文件中的所有变量:
%9.变量和数据类型,显示形式:
short(默认):2位整数,4位小数
long:16位十进制数:23.66666666666666
short g:5位十进制数
bank :两位小数
rat :分数
%9.运算符:
(1).续行符:” …“ %续行符前留一个空格
(2).操作符:”:“ %表示所有,数组和矩阵中也表示公差(公比)
(3).“rand(m,n)”%表示生成m到n个[0,1]之间的随机数
(4).关系运算符: “==”:等于 ”~=“:不等于>>
>> a=[1,2,3;4,5,6];
>> b=[4,5,6;7,8,6];
>> a==b
ans =0 0 0
0 0 1
(5).
(6).
(7).
(8).
(9).
%10.行向量、列向量的创建:
(1).利用linspace函数:
%x=linspace(x1,x2,n);
X=linspace(5,100,20)
X = 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
%这和X=[5:5:100]的效果是一样的。
(2).利用reshape函数:
%语法是 A = reshape(A,m,n); 或者 A = reshape(A,[m,n]);
%矩阵中元素个数不变,函数可以重新调整 矩阵 的行数、列数、 维数
注意:reshape函数所创建的新矩阵元素(m*n)必须旧矩阵元素的个数。
%%%11.向量、矩阵、数组
x=linspace(x1,x2,n);
x(n);%表示数组中第n个元素
x(n1,n3);%表示数组中第n1到n2的元素
%find()函数是查找数组中为0的下标,也可以进行约束查找符合元素的下标。
 
矩阵的特征值于特征向量:eig()函数
A=[1,2;3,4];
l=eig(A);%求A的特征值,返回一个列向量(这里就是eig这个函数返回的一个特征值)
[l,d]=eig(A);%矩阵A的全部变量,构成对角矩阵d
%矩阵A特征向量构成向量l
绘图
%%%1.运算符:
(1).% mean() -->平均值
1.对于一个数组,mean(数组名)则返回均值
2.对于一个矩阵,mean(数组名,1或2) 1代表返回矩阵每列的平均值
2代表返回矩阵每行的平均值
(2).% std() -->标准差
(3).% sort() -->排序 sort(索引值)
1.对于一个数组,则按照升序排列
2.对于一个矩阵,将每一列视为向量,对每一列进行排序
(4).% median() -->1.求矩阵的中间值 2.求数组的中位数 median(M,1或2)
1.按每列返回一个值,为该列从大到小排列的中间值,
2.按每行返回一个值,为该行从大到小排列的中间值.
(5).% diff() -->相邻元素的差(用于求导数和差分的) 差分:第二列减第一列
diff(参数变量,差分阶数,((1行)(2列)差分)
1.diff(参数变量,1,1)%上下行相邻之差
2.diff(参数变量,1,2)%左右列差分运算
3.diff(参数变量,2,2)%左右列2阶差分运算
(6).% length() -->求数组的个数
1.对于矩阵,比方说M行N列,那么length返回M和N这两个数的最大值
(7).% sum() -->总和
(8).% size() -->获取数组的行数和列数
(9).% dot() 内积
cumprod() 累计元素总乘积
cumsum() 累计元素总和
cross() 外积
%%%2.常见矩阵生成函数:
(1).eye(m,n) 生成对角为1的m?n单位矩阵(前提:m=n)
(2).ones(m,n) 范围为m×n的全1阵
(3).zeros(m,n) 范围为m×n的全0阵
(4).rand(m,n) 范围在(0,1)之间的m×n的矩阵
(5).randn(m,n) 均值为0,方差为1的标准正态分布的随机矩阵
%%%3.二维绘图基本命令:
(1).semilogy(x,y,'-ob') y轴用于对数标注(y轴的以 10 为基数的对数刻度),x轴代表线性标注绘制图形
(2). title() 给图标命名注释 title('datestr(now)','Color','r')
1.'fontsize',10, 设置字体大小
2.'Color' - 文本颜色
3.'FontName' - 字体名称
4.'FontWeight' - 文本字符的粗细 1.'bold' - 字符轮廓比普通粗
2.'normal' - 由特定字体定义的普通粗细
%(3).datestr() 具体时间戳 date():无参数的时间戳
>>datestr(now)
>>ans =
25-Aug-2021 22:06:41
(4).text() 在图形指定的位置上加文本字符串
(5).gtext() 在鼠标的位置上加文本字符串
(6).grid() 打开网格线
(7).xlabel 给x轴加标记
(8).ylable 给y轴加标记
%使用参数方程绘制曲线:x是关于t的参数方程,y也是关于t的参数方程,t属于一个范围
%%%3.图形的处理
(1).plot()绘制图形后使用axis()函数对图形进行缩放(细描)
用法:axis( [xmin xmax ymin ymax] )对图形的x轴和y轴进行上限下限的限制
axis auto 解除限制,恢复到默认状态
axis off 去掉坐标轴
(2).%hold on是当前轴及图像保持而不被刷新,准备接受此后将绘制的图形,多图共存
hold on 和hold off,是相对使用的
(3).plotyy(x1,y1,x2,y2) 双纵坐标
%多子图的定位 (4).subplot(m,n,k) m,n表示行列对位置进行定位,k表示从左到右排序
a=[pi:pi/360:3*pi];
y=exp(a*2).*sin(a);
z=cos(a).*sin(a);
x=tan(a).*sin(2*a);
subplot(2,2,1);
>> hold on
>> plot(a,y,'-*b');
>> hold on
>> subplot(2,2,2);
>> plot(a,z,'-or');
>> hold on
>> subplot(2,2,3);
>> plot(a,x,'-+g');
>> hold off
%%subplot('postion',[left,bottom,width,height])
@@postion:位置的意思
%%用于手工指定子图位置,指定位置的四元组采用归一化的标准单位
a.left表示距离图形窗口左边的距离
b.bottom表示距离窗口下边的距离
c.width,heigth分别表示绘制坐标轴的大小
d.其中要注意的是left bottom width height这四个值都是0和1之间
%subplot('position',[0.4,0.2,0.4,0.4]);%在图形窗口中绘制坐标轴;
%%%4.图形的控制:
(1).曲线线性的控制:
符号 - : -. --
含义 实线 虚线 点划线 双划线
(2).曲线颜色控制符
符号 b g r c m y k w
含义 蓝 绿 红 青 品红 黄 黑 白
差值算法
%%%1.M文件
%(1).以往少的程序可以在命令行窗口进行编码,但大量的程序编排到命令行窗口,
%会有造成乱码的危险.
(2).如果将命令编成程序存储在一个文件中(M文件),依次运行文件中的命令,
则可以重复进行
%(3).M文件根据调用方式的不同可以分为两类:
Script:脚本文件/命令文件
Function:函数文件
M文件均以 .m为扩展名
(4).
(5).
(6).
%%%2.数据输入:input
>>A=input('请输入你要输入的数字:');
请输入你要输入的数字:1.2 %输入后保存到A里面
(1).A = importdata(filename)将数据从文件名所表示的文件中加载到数组 A 中
 
 
(2).num=xlsread(filename)适用于纯数值型数据
%a.xlsread 是数学软件 MATLAB 中读取 Excel 文件中数据的一个函数
%即从当前程序所在文件夹里,按照函数中的参数指定的范围,从单元格开始读取文件,返回数据。
b. num = xlsread(‘filename’,‘sheet’)选择所在的sheet,比如说’sheet1’
c.num = xlsread(‘filename’, ‘range’)所在的单元格范围,比如说range=‘A1:A8’
(3).A=readtable(filename)通过从文件中读取列向数据来创建表。
+++++申明: filename是文件名字 pathname是该文件地址
%%%3.网格线和坐标边框
(1).网格线:grid on
grid off
%figure() 函数figure主要是创建图窗窗口
figure(n)查找到n存在时,将当前窗口切换成n,不存在时创建标识为n的图窗
(2).对数坐标图:
semilogy(x1,y1,'参数1'…)%x轴为线性坐标刻度,y轴为常用对数刻度
%%%4.数据处理:
(1).插值问题:题目所给的数值参考(一堆数据)是按照规律每隔多少进行测量所得到的值:
那么问题来了:求那些在规律间隔内的数,并做出变化图
%上述问题可归结为:已知函数在某区间(域)内若干个点所处的位置,求函数在该区间其他点上的值
在x0,x1…x(n)处取值y0,y1…y(n),关于y(n)的多项式存在并且唯一(就是过这些点的方程是唯一的)
所以这个方程就是插值问题的解
%常用的插值法:Lagrange:拉格朗日多项式插值法
科学研究中,几乎所有的问题都可以用y=f(x)的方程进行表达,但在实践中,我们只知道一部分坐标的
数据,而根据这些数据我们能够求出这些数据的解析式,但无法求出这些数据(x)之外的所对应的y值。
所以多项式插值应运而生。
%假设有3个不在同一直线上的点,分别为(x1,y1)、(x2,y2)、(x3,y3),求出过这3个点的曲线方程
%假设方程为:f(x)=a0+a1*x+a2*x^x
则有f1(x1)=a0+a1*x1+a2*x2^2
f2(x2)=a0+a1*x2+a2*x2^2
f3(x3)=a0+a1*x3+a2*x2^2 %确实难解三元2次方程组
拉格朗日认为可以通过三根二次曲线相加来达到目标。那这是怎么的三根二次曲线呢?
第一根曲线f1(x1),在 x1 点处取值,f1(x1)=1,f2(x2)=f3(x3)=0,因此得到过(x1,1)(x2,0)(x3,0)
的曲线,
第二根曲线f2(x2),在 x2 点处取值,f2(x2)=1,f1(x1)=f3(x3)=0,因此得到过(x1,0)(x2,1)(x3,0)
的曲线,
第三根曲线f3(x3),在 x3 点处取值,f3(x3)=1,f2(x2)=f1(x1)=0,因此得到过(x1,0)(x2,0)(x3,1)
的曲线,
往下依次……
%所以得到,y1*f1(x1)--->从坐标角度理解:那么就得到了过(x1,y1)的曲线
%y2*f2(x2)--->过(x2,y2)的曲线
%y3*f3(x3)--->过(x3,y3)的曲线
在根据拉格朗日的说法:f(x)=y1*f1(x)+y2*f2(x)+y3*f3(x)
所以得到通式:f(x)=y(i)*fi(x)
%%拉格朗日多项式插值实现流程:
1.根据初始数据x的取值求出相应的y值
2.建立m×n的矩阵
3.计算f(x)=y(i)*fi(x)(for循环)
(2).高次拉格朗日插值的Runge(龙格)现象:
Runge(龙格)的研究,证明了多项式插值的次数不超过七时成立,超过七时,插值多项式会出现严重的
震荡现象(称为Runge现象)
以f(x)=1/(1+(25*x)^2)为例:
%演示龙格函数的插值情况
for i=3:2:11
x=linspace(-1,1,i);
y=1./(1+25*x.^2);
p=polyfit(x,y,i-1);
xx=-1:0.01:1;
yy=polyval(p,xx);
plot(xx,yy,'b');
hold on;
grid on;
end;
plot(x,1./(1+25*x.^2),'r');
(2).MATLAB中一维插值:
一维插值命令是interp1,格式为:y(i)=interp1(x,y,xi,'选用的插值方法是什么(Lagrange)等等');
%x,y:是我已知的坐标
%xi:是我待插值的坐标
%插值方法:'nearest'-最邻值插值
'linear'--线性插值
'spline'--三次样条插值
'cubic'--立方插值
二维插值命令是interp2,格式为:z(i)=interp2(x,y,z,xi,yi,'方法');
拟合算法
%%%1.拟合问题:(做预测,主要使用的范围是样本比较小,拟合效果会好,样本比较多,拟合的效果就不是很好)
1.应用预测的场景:已经知道10年的样本,预测第11年以内的数据
2.用拟合的到关系式:样本数据的不到准确的关系式,那么采用拟合得到关系式在往下进行
%%总结:插值主要是用于求函数值。而拟合主要是求函数关系,从而进行预测等进一步分析%%
%%%2.拟合计算:
通常需要解决两个问题:(1).线型的选择
%线型的选择,通常根据分析和散点图确定线型
(2).线型中参数的计算
%参数计算可采用最小二乘法,而非线型参数计算则要应用Gauss-Newton迭代法
高斯 牛顿
%%%3.多项式拟合:
(1).MATLAB中多项式拟合命令格式为:[a,s]=polyfit(x,y,n)
%(x,y)-已知坐标
%n-拟合多项式的次数
%a-拟合多项式的系数所构成的向量
%s-分析拟合效果(一般都省略)
程序实现: %polyval:多项式计算求值函数
x=1:12;
>> y=[5,8,9,15,25,29,31,30,22,25,27,24];%x,y已知坐标
>> a=polyfit(x,y,9);%9次多项式拟合
>> xp=1:0.1:12;%要求值所对应的x轴坐标
>> yp=polyval(a,xp);%利用9次多项式拟合出来的方程对所取x轴上的值进行计算
>> plot(x,y,'k',xp,yp,'r');%绘图
(2).a=polyfit(x,y,m) %根据已知坐标拟合出相对逼近的方程关系式
%结果返回m次拟合多项式系数,从高次到低次存放到向量a中
y=a(0)*x^m+a(1)*x^m-1+…+a(n)
根据拟合出来的方程,在进行预测
'(3).'非线性拟合:格式为:[b,r]=polyfit(x,y,fun,bo,option)
%fun-拟合函数
%b0-拟合参数的初始值
%option-拟合选项
%b-拟合参数
%r-拟合残差
''已知现存几种典型函数:(1).幂函数:y=a*x^b
(2).指数函数:y=a*exp(b*x)
(3).双曲线函数:y=x/(a*x+b)
(4).对数函数:y=a+b*log(x)
(5).指数函数:y=a*exp(b/x)
(6).S形曲线:y=1/(a+b*exp(-x))
(7).正弦曲线逼近函数:y=a*sin(b*x+c)
第一步:输入已知x,y坐标
第二步:根据已知坐标的散点图,确定逼近函数
第三步:确定函数模型中未知的参数
第四步:求解未知参数并得到函数具体形式
第五步:绘图
%%%4.MATLAB中拟合工具箱:在命令窗口键入cftool即可启动拟合工具箱