[工科]matlab数据处理中常用函数的用法 联系客服

发布时间 : 星期一 文章[工科]matlab数据处理中常用函数的用法更新完毕开始阅读ee840fe4524de518964b7d61

多元非线性拟合

function f=x002(beta,x)%定义的目标函数 x1=x(:,1); x2=x(:,2);

f=beta(1).*x(:,1)+exp(beta(2).*x(:,2)); end

function f=x003()%主函数 x=[2,3;4,5]; y=[0.1;0.5]; beta0=[1,1]; disp(x); disp(y);

[beta,r,J]=nlinfit(x,y,@x002,beta0); disp(beta);

disp(r);%每一行的残差 end

for语句

%.m中的代码,函数名objfun必须与.m文件同名 function f=objfun(x,p) f(1)=x(1)+x(2); f(2)=x(1)-x(2)+p;

%工作簿代码,

fid = fopen('1.xls','w'); for p=1:1:4 x0 = [-5; -5]; % Make a starting guess at the solution options=optimset('Display','iter'); % Option to display output [x,fval] = fsolve(@objfun,x0,options,p); % Call optimizer fprintf(fid,'%d\\t%d\\n',x); end

fclose(fid)

%for循环中,第一个数字是初值,第二个是步距,第三个是终止值; %fsolve

%fopen和fpringf的详解查看matlab的帮助文档 %赋初值

x0=[100;5;100;0.9;0.5;0.3;30;30;0.03;4;150];%注意热容比的值不能取1 options=optimset('Display','iter'); % Option to display output [x,fval]=fsolve(@CMIN,x0,options); % Call optimizer

fsolve函数

5.fsolve数值解方程(组)——使用最多的数值解法

[x,fval,exitflag,output,jacobian]=fsolve(fun,x0,options,p1,p2...)

fsolve的参数意义大部分与fzero相同,只是优化参数更多了,使用更灵活另外一定注意x0的长度必须与变量的个数相等。它与fzero的区别是,首先当然算法不同,另外fsolve的功能强大多很多,它可以直接方便的求解多变量方程组,线性和非线性,超静定和静不定方程,还可求解复数方程

fun同样可以是句柄、inline函数或M文件,但是一般M文件比较多,这是由于fsolve是解方程组的,目标函数一般比较烦,直接写比较困难

比如解方程组x1+x2=8 x1-2*x2-2*p=0(当然可以求解非线性的)

目标函数同样有三种书写格式

(1)objfun=@(x,p)[x(1)+x(2)-8;x(1)-3*x(2)+2*p];

(2)objfun=inline('[x(1)+x(2)-8;x(1)-3*x(2)+2*p]','x','p')

此时的调用格式有

fsolve(objfun,x0,options,p)

fsolve(@(x)objfun(x,p),x0,options)

(3)function f=objfun(x,p) f(1)=x(1)+x(2)-8;

f(2)=x(1)-3*x(2)+2*p;

当然你也可以直接写成,两者的效果是一样的

f=[x(1)+x(2)-8;

x(1)-3*x(2)+2*p];

此时的调用格式有

fsolve(@objfun,x0,options,p)

fsolve('objfun',x0,options,p) fsolve(@(x)fun(x,p),x0,options)

inline内联函数

内联函数的建立(随意嵌入的命令行,不需要单独建立函数) g = inline('sin(2*pi*f + theta)', 'f', 'theta'); g(f,theta);%直接调用

内联函数的优势:可用g(f,theta)直接调用,无需建立专门的函数。 如以下代码无法实现函数调用 syms x y; g=x^2+y^2;

mat矩阵的调用

存在一个名为IAA的矩阵,保存为IAA.mat文件 用load函数调用矩阵;

S=load('IAA.mat');

disp(S.IAA);

S为结构体,S.IAA才是矩阵

若IAA为61×2的矩阵,则要显示第50行、第二列的数据,则

disp(S.IAA(50,2));

subs函数

syms x1,y1 Qd

Qd=(-2*x1-2*wd+2*a-a*k+y1*k+wf*k+td*k)/(4*b-2*b*k^2)

subs(Qd,{x1,y1},{x,y})

强大的subs函数可以将变量值x,y赋值给x1,y1,当然也可以赋常数值。函数间传递功能相当强大

分段函数绘图

参见《精通matlab》第七章例一

绘图指令

n=0:12;

y=1./abs(n-6);

plot(n,y,'r*','MarkerSize',20) grid on

三维的线绘图plot3

t=(0:0.02:2)*pi;x=sin(t);y=cos(t);z=cos(2*t);

plot3(x,y,z,'b-',x,y,z,'bd'),view([-82,58]),box on,legend('链','宝石')

三维面绘图ezsurf

ezsurf控制网格大小

ezsurf(x,y,z,[x1,x2,y1,y2],grid_number)

例一:

function f=HHX() syms x y;

HH_OUTPUT=inline('(-0.664*exp(-0.9877*x)+0.6307)*(-0.006*(tw0-45)+1.0)','x','tw0');%无量纲温度参数

z=HH_OUTPUT(x,y);

ezsurf(x,y,z,[0.2,2.4,45,75],20);%0.2和2.4为x的区间,45和75为y的区间,20为网格密度 end

跟下面的代码一样 syms x y;

z=(-0.664*exp(-0.9877*x)+0.6307)*(-0.006*(y-45)+1.0);%无量纲温度参数

ezsurf(x,y,z,[0.2,2.4,45,75],20);%0.2和2.4为x的区间,45和75为y的区间,20为网格密度

函数的函数

函数函数(function function)是对传入的其他函数进行操作的函数,传入的函数作为函数函数的输入参数,传入到函数函数中的函数称为传递函数(Passed function),事实上MATLAB中就有许多这样的函数,例如求解常微分方程的函数ode23、ode45、ode113等都是函数函数,他们的第一个参数都是传递函数。另外一个常见的函数函数是fplot,用于绘制所提供函数的图形,语法为fplot(fun,lims)

例如绘制x取值范围为[-π,π]上f=sin(x)的图形: >> fplot(@sin,[-pi,pi])

图形如下:

和前面两种函数不同,函数函数是比较复杂的函数了,因此必须要保存在M文件中,例如可以编写一个计算某个传递函数在给定区间上最大值、最小值和平均值的函数函数: function [maxy,miny,aver]=fstatic(func,a,b,n)%func为函数参数 x=linspace(a,b,n); y=func(x);%函数参数 maxy=max(y); miny=min(y); aver=mean(y); end

保存为M文件后,例如统计正弦函数在[-π,π]上的最大值、最小值和平均值: >> fstatic(@sin,-pi,pi,100)%@sin是将sin函数赋值给func ans =

0.9999

>> [max min aver]=fstatic(@sin,-pi,pi,1000) max =

1.0000 min =

-1.0000 aver =

-5.9291e-018