其中beta是参数,x是自变量
如果fun有多于敬告源两个的变量,第三个变量就不能通过调用nlinfit传递给fun
结果报错你的inline
function输入参数数量不足。
而z也不能作为beta(3)传进去,因为拟合过程会改变他的值,最纵不能起到固定常数的作用
不过我们还是有办法的,把需要的额外不参与拟合的参数通过x传给fun
因为nlinfit不理x和y具体有多少个值,只要把x传递给fun,能够得到长度和y相同的数列就可以亮态
所以,你要实友隐现的功能可以通过以下程序实现
x=[1,2,3,4,5]
y=[7,16,31,0,79]
z=2
x=[x
z]
myfunc=inline('beta(2)+beta(1).*x(1:end-1).*x(end)','beta','x')
beta=nlinfit(x,y,myfunc,[10,0.1])
a=beta(1)b=beta(2)
将z塞到x屁股后面,从x传递给myfunc,x变为[1,2,3,4,5,2]
但是要注意在函数内部x的最后一个元素作为z,前面的5个元素参与运算
那样myfunc的计算结果仍然是和y序列等长的5个数
顺便讲句,其实可以通过这样的办法实验二维曲面的拟合
设现有三组等长列向量对应二维曲面的x,y,z坐标
x=[x1
x2
......
xn]'
y=[y1
y2
......
yn]'
z=[z1
z2
......
zn]'
要拟合为曲线方程z=f(beta,x,y),其中beta是参数,x,y是两个输入
以二维旋转对称高斯曲面为例子z=A*exp((x^2+y^2)/B^2)+C
可以这样 *** 作
X=[x
y]
Y=z
f=inline('beta(1)+exp((X(:,1).^2+X(:,2).^2)./beta(2)^2)+beta(3)','beta','X')
beta=nlinfit(X,Y,f,beta0)
%参数的初始值beta0
A=beta(1)B=beta(2)C=beta(3)
一、首先,打开MATLAB软件并在左上角打开New M-File新的M文件。
二、在窗口中输入简单定义函数,将函数名定义为my(函数名可以自己取)。
三、在屏幕上输入:function f=my(x),f=2*x+1,然后保存。
四、m文件需要保存培悄到工作文件夹中,并命名为my.m。
五、然唤余后你可以看到有一个MATLAB在主界面的左侧。
六、最后和中滚,在屏幕上输入:F=my(2)并输入以获得结果。
matlab没有提供这种功能。MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计族扰慎算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学兆敬数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环李灶境中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)