matlab 非线性曲线拟合表达式书写与初值选取

学习 时间:2026-04-03 08:51:19 阅读:6040
matlab 非线性曲线拟合表达式书写与初值选取本人先研究采用matlab进行非线性数据拟合,编写的函数如下[filename,filepath]=uigetfile('*.txt','选择拟合的数据文件');%弹出对话框,然后选择你要处理的文件 file = [filepath filename]; fid = fopen(file,'rt'); if fid == -1 waring('Error opening the file')endfclose(fid); fid=load(file);x=fid(:,1);%读取第一列数据y=fid(:,2);%读取第二列数据myfunc=inline('-beta(1)*max(y)*exp(-pi*(x-beta(2)).^2/beta(3).^2))','beta','x'); beta=nlinfit(x,y,myfunc,[0.3 0.5 10]); % beta为迭代初值,不能随便选,必须要在目标值附近,否则发散或解不出来b=beta(1);s0=beta(2);r=beta(3); %test the model xx=min(x):max(x); yy=b*max(y)*exp(-pi*(x-s0)^2/r^2);plot(x,y,'o',xx,yy,'--');set(handles.edit1,'string',num2str(b),'max',10);set(handles.edit2,'string',num2str(s0),'max',10);set(handles.edit3,'string',num2str(r),'max',10); Error in inline expression ==> beta(1)*max(y)*exp(-pi*(x-beta(2)).^2)./beta(3)^2)),表达式错误,不知怎么修改,望大侠指教 ,希望有高手将表达式书写一下.

最佳回答

沉静的鲜花

喜悦的柠檬

2026-04-03 08:51:19

匿名函数调用,把inline那一行改为,应该就OKmyfunc=@( beta, x) -beta(1)*max(x)。*exp(-pi*(x-beta(2))。^2/beta(3)。^2);2楼基本上已经说到点上了,但是转换成(max(y))也是不可行的。num2str的变量为常数。例如 for n = 1:12 eval(['M' num2str(n) ' = magic(n)']) end最好还是写成具体的函数形式。或者单个函数 function y=f(x)或者匿名函数 fun=@(x) x。^2

最新回答共有2条回答

  • 欣慰的白云
    回复
    2026-04-03 08:51:19

    匿名函数调用,把inline那一行改为,应该就OKmyfunc=@( beta, x) -beta(1)*max(x)。*exp(-pi*(x-beta(2))。^2/beta(3)。^2);2楼基本上已经说到点上了,但是转换成(max(y))也是不可行的。num2str的变量为常数。例如 for n = 1:12 eval(['M' num2str(n) ' = magic(n)']) end最好还是写成具体的函数形式。或者单个函数 function y=f(x)或者匿名函数 fun=@(x) x。^2

上一篇 中国真的没有哲学吗?老子唯物辩证哲学对立统一论:“有无相生,难易相成,长短相形,高下相倾,前后相随.房屋以为室,当其无,

下一篇 人生态度是否决定人生目的?理由?