如何在MATLAB中根据有限的数据点得到函数_第1页
如何在MATLAB中根据有限的数据点得到函数_第2页
如何在MATLAB中根据有限的数据点得到函数_第3页
如何在MATLAB中根据有限的数据点得到函数_第4页
如何在MATLAB中根据有限的数据点得到函数_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如何在MATLAB中根据有限的数据点得到函数悬赏分:100|

提问时间:2023-5-2407:28

|

提问者:aptxyuchen如何在MATLAB中根据有限的数据点得到函数推荐答案可以用多项式拟合方法做到,你可以通过实验得到拟合最好的阶数。但是,如果你将阶数本身设的比拟大的话,大多数曲线都可以很好的拟合出来。数据拟合:在MATLAB的NAGFoundationToolbox中也有一些曲面拟合函数,如e02daf是最小二乘平方曲面拟合函数,e02def可求出曲面拟合的函数值。有关曲面拟合的根本原理参见有关数值分析的书籍,这里不再多说。注:关于在MATLAB的NAGFoundationToolbox中的函数形式、说明以及应用例子可以查阅帮助信息。例如,键入helpe02daf便会出现函数e02daf的较详细说明。在函数末尾加e便是应用的例子,如键入typee02daf,会显示函数e02daf的应用例子程序,键入e02daf,那么运行该程序,并显示其计算结果。MATLAB软件提供了根本的曲线拟合函数的命令.多项式函数拟合:a=polyfit(xdata,ydata,n)其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式的系数多项式在x处的值y可用下面程序计算.y=polyval(a,x)一般的曲线拟合:p=curvefit(‘Fun’,p0,xdata,ydata)其中Fun表示函数Fun(p,data)的M函数文件,p0表示函数的初值.curvefit()命令的求解问题形式是假设要求解点x处的函数值可用程序f=Fun(p,x)计算.例如函数形式,并且数据点要确定四个未知参数a,b,c,d.使用curvefit命令,数据输入;初值输;并且建立函数的M文件〔Fun.m〕.假设定义,那么输出又如引例的求解,MATLAB程序:t=[l:16];%数据输人y=[46.488.49.289.59.79.8610.210.3210.4210.510.5510.5810.6];plot(t,y,’o’)%画散点图p=polyfit(t,y,2)(二次多项式拟合〕计算结果:p=-0.04451.07114.3252%二次多项式的系数由此得到某化合物的浓度y与时间t的拟合函数matlab曲线拟合后表达式怎么输出悬赏分:0|

解决时间:2023-5-911:51

|

提问者:meiyoudeyuwan新手呀。。拟合图像已经做出来了函数中常量a,b,c....也知道,有没有直接输出函数的方法??最正确答案你是用什么拟合的要是多项式拟合的就用p是拟合的结果f=poly2sym(p)f=3*x^5+5*x^4+x^2+12要是用lsqcurvefit你就在用subs把结果带入函数就好了matlab用隐函数拟合的程序怎么编写悬赏分:100|

解决时间:2023-5-2716:06

|

提问者:liusy3132试验测试得到x,y数据。现在想通过用matlab用隐函数y=I1*exp((x-y*Rs)/0.026/n1)+I2*exp((x-y*Rs)/0.026/n2)+(x-y*Rs)/Rsh-I1-I2+IL对数据进行拟合。得到参量I1、I2、IL、Rs、Rsh、n1、n2的数值。请高手帮助。急先谢谢了。问题补充:自变量x从0到1,每0.05取一个点。对应的y值如下:0,4.84827E-90.05,7.20861E-90.1,9.486E-90.15,1.33346E-80.2,1.85467E-80.25,2.54804E-80.3,3.57885E-80.35,4.94846E-80.4,6.86021E-80.45,9.34068E-80.5,1.36416E-70.55,2.18504E-70.6,4.51033E-70.65,1.2785E-60.7,4.57114E-60.75,1.70904E-50.8,5.62476E-50.85,1.45646E-40.9,2.93975E-40.95,4.91251E-41,7.21464E-4y轴用的是指数坐标。最正确答案clear;clcF=@(p,x)p(1)*exp((x(:,1)-x(:,2)*p(4))/0.026/p(6))+p(2)*exp((x(:,1)-x(:,2)*p(4))/0.026/p(7))+(x(:,1)-x(:,2)*p(4))/p(5)-p(1)-p(2)+p(3)-x(:,2);x=[0,4.84827E-90.05,7.20861E-90.1,9.486E-90.15,1.33346E-80.2,1.85467E-80.25,2.54804E-80.3,3.57885E-80.35,4.94846E-80.4,6.86021E-80.45,9.34068E-80.5,1.36416E-70.55,2.18504E-70.6,4.51033E-70.65,1.2785E-60.7,4.57114E-60.75,1.70904E-50.8,5.62476E-50.85,1.45646E-40.9,2.93975E-40.95,4.91251E-41,7.21464E-4];p0=[354109104];%%因为你这个函数很变态,初值选择不好得不到好结果,这个初值不错warningoffp=nlinfit(x,zeros(size(x,1),1),F,p0);disp('I1、I2、IL、Rs、Rsh、n1、n2分别为:');disp(num2str(p));plot(x(:,1),x(:,2),'ro');holdon;ezplot(@(x,y)F(p,[x,y]),[0,1,-1e-3,1e-3]);title('曲线拟合');legend('样本点','拟合曲线')5Matlab样条拟合函数悬赏分:20|

解决时间:2023-9-708:35

|

提问者:happyday0912用Matlab中的最小二乘法拟合生成样条曲线,其中有这样一个函数,sp=spaps(x,y,tol),它有个输出参数是sp,代表拟合得到的样条函数,我想问能得到它的具体的函数表达式吗?如果能,应该怎么得到?谢谢最正确答案答案是可以得到具体表达式。先运行sp=spaps(x,y,tol);得到结果后运行>>sp.coefs得到每个多项式的系数向量,其实也就是多项式函数的具体表达式,相信你能看得出来。matlab非线性拟合问题悬赏分:170|

解决时间:2023-1-2519:07

|

提问者:aweto_mmf=J*Ld/Li(1-exp〔-Ld/Li〕),Ld=t*〔Voc-x〕在函数中J=21.18、Li=1*e-6、Voc=0.418。f和X可以给定一系列值如下:xf51.885-21.482386.4-21.0836134.73-20.98485157.74-20.90685240.6-20.30025321.15-19.5936374.05-16.960725通过拟合求t各位大侠越详细越好哦!希望给出程序代码及标注!再次感谢!!最正确答案要新建两个文件:主文件,test.m------------------------------------------------------------------------------functiontestclearclcx=[51.885;86.4;134.73;157.74;240.6;321.15;374.05];f=[-21.4823;-21.0836;-20.98485;-20.90685;-20.30025;-19.5936;-16.960725];ft=fittype('fit_func(x,t)');cfun=fit(x,f,ft,'StartPoint',-0.01);%开始拟合cfun%输出拟合参数等plot(cfun,x,f)%画出拟合后曲线和原始数据点end函数文件,用于自定义的函数:fit_func.m------------------------------------------------------------------------------functionf=fit_func(x,t)J=21.18;Li=1e-6;Voc=0.418;Ld=t*(Voc-x);f=J*Ld./(Li*(1-exp(-Ld/Li)));end------------------------------------------------------------------------------可以保证运行输出结果,运行后自动绘出曲线和原始数据点,但是结果可能不会令人满意。我不保证编码时完全正确,但根本思想就是这样。你需要仔细检查代码,试着调正fit函数中StartPoint,还有其他选项〔参见文档中fitoptions的说明〕,直到曲线和数据点吻合到满意为止。当然也可能是该函数不是这批数据点的理想模型,换成别的会更好。如何根据一些离散点,用matlab拟合函数,函数未知,急!急!悬赏分:25|

提问时间:2023-7-1917:58

|

提问者:matlablhlz=[0.012,0.022,0.032,0.042,0.052,0.062,0.072,0.082,0.092,0.102,0.112,0.122,0.132,0.202,0.302,0.402,0.502,1.002,2.002,10.002,20.002];NU=[8.0239,6.7271,6.0510,5.6209,5.3188,5.0939,4.9198,4.7812,4.6684,4.5751,4.4968,4.4303,4.3731,4.1216,3.9713,3.8931,3.8460,3.7516,3.7042,3.6663,3.6615]需要得到NU和z的关系式。问题补充:函数关系式为NU=3.66+a1*x^a2/(1+a3*x^a3),如何确定a1,a2,a3,a4答:看离散点的关系应该是指数的吧,你建立一个指数的方程,转化成线性的,用最小二乘就可以了matlab非线性最小二乘拟合悬赏分:100|

解决时间:2023-5-910:07

|

提问者:lmks000我有801个点是由实验测得的数据。现有公式U1=1+((wd^2)*xd0*(wd^2-w^2))/((wd^2-w^2)^2+w^2*b^2)+xs0*ws^2*((ws^2-w^2)^2+w^2*a^2)其中U1是测量值〔因变量〕,w是自变量,也是条件。其他六个未知数需要通过最小二乘拟合同时得到最优值。我是菜鸟,所以希望大牛们能说清楚一些。最好是能给出程序框架,我自己吧自变量因变量带进去搞出来。搞定之后追加分.先谢谢啦有问题麻烦用qq问我278663192问题补充:非线性的有人做出来拟合结果了只是我查不到程序你说得很对,我也发现结果是初值敏感的。但这是所不希望的。能不能有更好的解决方法呢?帮帮助吧!谢谢你啦最正确答案MATLAB的最优化工具箱中提供了lsqcurvefit()函数,可以解决最小二乘曲线拟合的问题,改函数的调用格式为:[a,J]=lsqcurvefit(Fun,a0,x,y)其中,Fun未原型函数的MATLAB表示,a0未最优化的初值,x,y为原始输入输出数据向量,调用该函数将可以返回待定系数向量a以及在此待定系数下的目标函数的值J.〔详细可以输入helplsqcurvefit〕具体做法是:>>U1=inline('f(a,w)','a','w')%用a〔i〕分别代替六个未知数,i=1~6.>>[xx,res]=lsqcurvefit(U1,[111111],w,U);xx'%w和U是你试验得出来的数据向量。结果应该会出现一个ans向量〔6维〕,分别就是你所要待定的系数a〔i〕了matlb中函数拟合后如何用符号输出拟合多项式悬赏分:20|

解决时间:2023-5-1408:49

|

提问者:StayGallant我用matlab进行多项式拟合拟合之后我想将结果表示成多项式的形式进行输出忘记是怎么输出的了调试老是出错请各位大虾指点:A=[1,2,3,4];B=[5,6,7,8];temp=polyfit(A,B,1);symsx;y=polyval(temp,x)错在哪里了,正确的方式应该是什么?最正确答案A=[1,2,3,4];B=[5,6,7,8];temp=polyfit(A,B,1);y=poly2sym(temp,'x')结果:y=x+4matlab实现分段曲线拟合悬赏分:30|

提问时间:2023-5-1516:34

|

提问者:antyyy|问题为何被关闭由于前两个点差异很大,完全不符合整体趋势〔确实是有效点〕,用polyfit()拟合出的曲线很差,都被第一个点弄乱了。老师说应把前三个点和后面的分开,进行双次拟合。可是怎么要只输出一条平滑的曲线,简单的分两次拟合的曲线怎么连在一起?或者,有什么方法可以直接生成一条符合要求的曲线。。。其他答复共1条那肯定是分段函数先用前三个点建立一个函数再用后面的地建立一个函数如何用MATLAB对一个函数图拟合得到比拟准确的公式?悬赏分:100|

解决时间:2023-4-2522:05

|

提问者:kaigoal就是上传的图片里面中间那条曲线〔Global)问题补充:能不能给出详细的程序?最正确答案图片太小,看不清楚,但是我给出一个别的例子(这个例子是我们老师上课时演示过的例子),跟你这个类似,可以参考一下,无论别人怎样答复,你都要知道matlab中用到的函数名的功能,自己一步步输入数据执行。举例:某镇近20年〔79-98〕的人口统计为:3.90,5.30,7.20,9.60,12.90,17.10,23.10,31.400,38.60,50.20,62.90105.70179.0205.00,226.5试分别用一阶,二阶,四阶多项式和指数曲线拟合人口对年份的曲线。pop1=[3.905.307.209.6012.9017.1023.1031.400]pop2=[38.6050.2062.9076.092.0105.7022.80]pop3=[131.70150.70179.0205.0226.50];pop=[pop1,pop2,pop3]'cdate=1979:1998;cdate=cdate'p=polyfit(cdate,pop,4)会出现:Matrixisclosetosingularorbadlyscaled.Resultsmaybeinaccurate.RCOND=3.000002e-024.>InD:\toolbox\matlab\polyfun\polyfit.matline52Inc:\matlabbk\qx2.matline7应对cdate进行数据预处理,方法为:sdate=(cdate-mean(date))./std(cdate)对应的脚本程序为:pop1=[3.905.307.209.6012.9017.1023.1031.400]pop2=[38.6050.2062.9076.092.0105.7022.80]pop3=[131.70150.70179.0205.0226.50]pop=[pop1,pop2,pop3]'cdate=1979:1998;cdate=cdate'sdate=(cdate-mean(cdate))./std(cdate)p=polyfit(sdate,pop,4)运行该文件,可得到多项式的拟合曲线和误差曲线。将预处理的人口数据的对数,进行一次拟合,对应的脚本程序为:pop1=[3.905.307.209.6012.9017.1023.1031.400]pop2=[38.6050.2062.9076.092.0105.7022.80]pop3=[131.70150.70179.0205.0226.50]pop=[pop1,pop2,pop3]'cdate=1979:1998;cdate=cdate'sdate=(cdate-mean(cdate))./std(cdate)logp1=polyfit(sdate,log10(pop),1)logpred1=10.^polyval(logp1,sdate)semilogy(cdate,logpred1,'-',cdate,pop,'+')gridon得到的结果是:10y=1.5944(10.^0.5211x)问题的关键在于你要事先观察数据连成的点符合什么分布,然后用这个分布去拟合,得到相应的参数,方差〔最小二乘法〕,方差小的即为所要的曲线分布。希望对你有帮助。如何用matlab拟合模型分段函数悬赏分:5|

解决时间:2023-9-2610:50

|

提问者:chinatongue实验数据和图见水木论坛有一组实验数据,t表示时间,v表示电压数据如后所见。我现在编写一个m文件,试图分段拟合,但得不到预期的效果。如果是分开拟合,那么效果很好。估计是这样编写的分段拟合不对,请大侠指教更好的程序。下面是我编写的m文件fun1=inline('4.213-300*x/ref(1)-300*(ref(2)+ref(3))+300*ref(3)*exp(-x/(ref(3)*ref(4)))','ref','x')fun2=inline('4.213-3000/ref(1)-300*ref(3)*exp(-x/(ref(3)*ref(4)))*(exp(10/(ref(3)*ref(4)))-1)','ref','x')ift<=10abc=nlinfit(t,v,fun1,[518910.000830.0001312050]);elseabc=nlinfit(t,v,fun2,[518910.000830.0001312050]);endCb=abc(1),R0=abc(2),Rp=abc(3),Cp=abc(4)ift<=10vv=4.213-300*t/Cb-300*(R0+Rp)+300*Rp*exp(-t/(Rp*Cp))elsevv=4.213-3000/Cb-300*Rp*exp(-t/(Rp*Cp))*(exp(10/(Rp*Cp))-1)endplot(t,v,'*',t,vv)问题补充:fun1=inline('4.213-300*x/ref(1)-300*(ref(2)+ref(3))+300*ref(3)*exp(-x/(ref(3)*ref(4)))','ref','x');fun2=inline('4.213-3000/ref(1)-300*ref(3)*exp(-x/(ref(3)*ref(4)))*(exp(10/(ref(3)*ref(4)))-1)','ref','x');fun=@(ref,t)((t<=10).*fun1(ref,t)+(t>10).*fun2(ref,t));abc=nlinfit(t',v,fun,[518910.000830.0001312050]');plot(t,v);holdon;f=@(t)(fun(abc,t));fplot(f,[0,50],'r')该方案不行哦,只要稍微改变初始化条件,拟合结果差距就非常非常大!!!!最正确答案你要知道,你要拟合的是一个分段函数,这本身就不是一般的连续光滑函数。nlinfit之所以要有初值这一项,就是考虑到在某些变态的情况下,无法找到最小二乘函数的最小值,可能是一个局部的最小值,也可能根本找不到,所以有必要通过改变迭代初值的方法进行试验。对于这种分段函数,最好的方法还是分段拟合。fun1=inline('4.213-300*x/ref(1)-300*(ref(2)+ref(3))+300*ref(3)*exp(-x/(ref(3)*ref(4)))','ref','x');fun2=inline('4.213-3000/ref(1)-300*ref(3)*exp(-x/(ref(3)*ref(4)))*(exp(10/(ref(3)*ref(4)))-1)','ref','x');fun=@(ref,t)((t<=10).*fun1(ref,t)+(t>10).*fun2(ref,t));t=0:0.1:50;v=[3.9693.9633.9593.9553.9523.9493.9473.9453.9433.9413.9393.9383.9363.9353.9333.9323.933.9293.9283.9273.9263.9253.9233.9223.9213.923.9193.9183.9173.9163.9153.9143.9133.9123.9113.913.9093.9083.9073.9073.9063.9053.9043.9033.9033.9023.9013.93.93.8993.8983.8983.8973.8963.8963.8953.8943.8933.8933.8923.8913.8913.893.8893.8893.8883.8883.8873.8873.8863.8863.8853.8843.8843.8833.8823.8823.8813.883.883.8793.8793.8783.8783.8773.8773.8763.8763.8753.8753.8743.8743.8733.8733.8723.8723.8713.873.873.8693.8694.1054.1084.114.1124.1144.1154.1164.1174.1184.1194.1194.124.124.1214.1224.1224.1234.1234.1244.1244.1244.1254.1254.1264.1264.1264.1274.1274.1284.1284.1294.1294.1294.1294.1294.134.134.134.134.134.1314.1314.1314.1314.1324.1324.1324.1324.1324.1324.1334.1334.1334.1334.1334.1344.1344.1344.1344.1344.1344.1354.1354.1354.1354.1354.1364.1364.1364.1364.1364.1374.1374.1384.1384.1384.1394.1394.1394.1394.1394.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.1414.1414.1414.1414.1414.1414.1414.1414.1414.1414.1424.1424.1424.1424.1424.1424.1424.1424.1424.1424.1434.1434.1434.1434.1434.1434.1434.1434.1434.1434.1434.1434.1434.1444.1444.1444.1444.1444.1444.1444.1444.1444.1444.1444.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1454.1464.1464.1464.1464.1464.1464.1464.1464.1464.1464.1464.1464.1464.1474.1474.1474.1474.1474.1474.1474.1474.1474.1474.1474.1474.1474.1474.1474.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1484.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.1494.154.154.154.154.154.154.154.154.154.154.154.154.154.154.154.154.154.154.154.154.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1514.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1524.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1534.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1544.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1554.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.1564.156];abc=nlinfit(t',v,fun,[518910.000830.0001312050]');plot(t,v);holdon;f=@(t)(fun(abc,t));fplot(f,[0,50],)'r'怎么用matlab进行非线性的多元函数拟合?悬赏分:20|

解决时间:2007-8-1610:12

|

提问者:ipcctv如题,请教各位高手,怎么用matlab进行非线性的多元函数拟合?例如:因变量y自变量X1X2X3X41658111717153253191797122826184378291850137958206422322205146100424756584可以拟合为线性y=a*x1+b*x2+c*x3+d*x4的形式以及非线性的形式。不知道matlab里面有没有函数可以拟合上面的函数,拜托高手赐教!谢谢各位问题补充:分别第一列是y的值,第二列示x1的值,第三列示x2的值,第四列示x3的值,最后一列是x4的值。最正确答案用regress函数,线性回归A=[1658111717153253191797122826184378291850137958206422322205146100424756584]y=A(:,1),x=A(:,2:5)B=REGRESS(y,x)a=B(1),b=B(2),c=B(3),d=B(4)结果:A=1658111717153253191797122826184378291850137958206422322205146100424756584y=1658179718502205x=111717153253191228261843782913795820642232146100424756584B=53.3747-5.4253-7.38460.0297a=53.3747b=-5.4253c=-7.3846d=0.0297检验Y=x*BY=1.0e+003*1.65801.79701.85002.2050相关系数等于1,线性回归非常成功载入外部数据的MATLAB曲线拟合函数的问题!悬赏分:15|

解决时间:2023-5-2708:25

|

提问者:F_Inuyasha已经把需要的数据分别存到两个文件里,分别问d和t请问怎么进行曲线拟合!如果好可以追加给分!问题补充:数据都是txt格式的,直接用polyfit拟合就行!谢谢!最正确答案拟合的程序nhfun是药拟合的函数保存在nhfun的m文件里%functiony=nhfun(x,xdata)%y=x(1)+x(2).*xdata+x(3)*xdata.^2;clearallclcxdata=load('d');%最好把路径加上ydata=load('t');%最好把路径加上x0=[0,0,5];b=lsqcurvefit(@nhfun,x0,xdata,ydata)t1=0:0.01:12;c1=b(1)+b(2)*t1+b(3)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论