就是下面这个公式
Wq=b*Np/(R-N)
N是累积产油量(对应x值)
W是N值对应下的累积产水量(对应的tdata);
已知N和W的一组对应的数据,求q、b、P、R四个未知数。
数据在后面,因为字数限制,只粘贴上了部分数据;
我急需这个程序,谢谢大侠帮忙
下面是我编写的文件,运算不下去
m文件:
function f=curvefun1(a,x);
f=((a(1).*x.^a(2))/(a(3)-x)).^(1/a(4));
输入命令
%a(1)=b;a(2)=p;a(3)=R;a(4)=q;
tdata=xlsread('cumwater','sheet1','A1:GJ1');
x=xlsread('cumoil','sheet1','A1:GJ1');
a0 = [0,0,0,0];
a = lsqcurvefit('curvefun1', a0, x, tdata);
f=curvefun1(a,x);
运行后出错
Error using lsqcurvefit (line 247)
Function value and YDATA sizes areincommensurate.
Error in sample1 (line 6)
a = lsqcurvefit('curvefun1', a0, x, tdata);
以下是对应的数据:
cumoil cumwater
66875.41 58977.89
67735.27 60461
68702.61 62111.58
69707.74 63778.53
70700.54 65502.97
71779.68 67433.32
72888.27 69551.3
73835.36 71377.45
74872.23 73369.16
75873.16 75029.27
76682.89 76438.22
77623.03 78030.04
78662.82 79861.07
79639.4 81524.4
80732.68 83373.33
81768.37 84971.66
82819.92 86584.91
83853.85 88167.91
84879.57 89706.48
85845.71 91149.57
86272.45 91733.81
86631.99 92420.38
87457.44 94050.57
88392.46 95877.68
89303.52 97558.14
90172.87 99446.22
91127.56 101512.4
92031.94 103342.9
92841.83 105022.1
请帮忙者注意: 公式中的p和q都是指数。
1、对于非线性拟合函数(如指数函数等)用lsqcurvefit()函数的精度要比 nlinfit()函数要低。对于本例,用lsqcurvefit()函数nlinfit()函数0.95861,而nlinfit()函数nlinfit()函数0.99905。
2、自定义函数curvefun1(a,x)定义不够合理,还需要加一个绝对值符号,即f=abs((a(1).*x.^a(2))./(a(3)-x)).^(1/a(4)),这是指数方程的性质所决定。
3、自定义函数方程中有一个错误,'/'应为'./'。缺一个小点。
4、初值选定不合理,对于本例a0 =b=[-0.8 -0.2 -0.9 -0.3]
5、本例的拟合结果如下
a =[ -307506534.2, -1.122708895, -2085623.768, -0.6827697455]
即a(1)=b;a(2)=p;a(3)=R;a(4)=q
matlab 非线性最小二乘法程序,请大侠帮我修改,编个正确的程序,非常感 ...
1、对于非线性拟合函数(如指数函数等)用lsqcurvefit()函数的精度要比 nlinfit()函数要低。对于本例,用lsqcurvefit()函数nlinfit()函数0.95861,而nlinfit()函数nlinfit()函数0.99905。2、自定义函数curvefun1(a,x)定义不够合理,还需要加一个绝对值符号,即f=abs((a(1).*x.^a(2)...
如何用matlab实现非线性最小二乘拟合
命令说明通过上面的例子知道,matlab实现非线性最小二乘拟合的关键命令是 lsqnonlin。该命令的格式如下 x=lsqnonlin('f',x0) 功能:作为非线性最小二乘拟合,其中f是函数文件。
...用Matlab或者Mathematica 利用非线性最小二乘法 实现曲线拟合 求解...
同意一楼的
用matlab算最小二乘法
1、【实验目的】 了解了什么,学习了什么 2、【实验内容】计算数据和要求 3、【实验准备】最小二乘法的知识内容及MATLAB最小二乘法的的命令内容 4、【实验方法与步骤】5、【结果分析与讨论】由于不知道具体的问题,较详细的内容也无法来描述。
matlab 最小二乘法拟合
主要的问题是inline函数写法不对,matlab不能识别下面的写法:f = inline('R * exp(-a * x)','[R a]','x');像这种有多个待辨识参数的情况,应该写成一个向量,如 f = inline('c(1) * exp(-c(2) * x)','c','x');参考代码:生成测试数据t=linspace(0,2*pi,50);x=1.5*...
求一matlab程序(最小二乘法)
clear >> x=[19 ,25 ,31 , 38, 44];>> f=[19.0,32.3,49.0,73.3,97.8];>> xx=x.^2;>> A=[xx;ones(size(x))]';>> c=A\\f';>> a=c(2);>> b=c(1);>> y=a+b*xx;>> plot(x,f,'.',x,y,'r')做出的图,点表示原始数值。红线为拟合的直线。
关于用matlab编程最小二乘法求解的问题,请大神帮忙,工科数学问题
-65 -65 -65 -67 -66 -68 -68 ... -70 -71 -72 -73 -75 -75 -76 -76];p=polyfit(log(d),RSSI,1);n=-p(1)\/10;A=p(2);plot(d,RSSI,'o');hold on;plot(d,-10*n*log(d)+A,'r');hold off;legend('原始数据','拟合曲线');title(['n=' num2str(n)...
在MATLAB中,有一非线性最小二乘问题中一函数lsqnonlin,我想把里 ...
如果估计的较准确,最小二乘算出的系数更加精确。lsqnonlin函数采用的是迭代法,a0则是迭代初始值。由于程序的局限性,不可能搜索无穷大的区间,这样一来,初始值的选择就很重要了。如果最优解离所给初始值比较近,迭代求出该最优解的概率就很高;如果初始值提供的不理想,离最优解较远,而matlab对于...
matlab 非线性最小二乘法曲线拟合 您帮忙看看哪里出了问题?我得不出...
function f=stress(x,xdata)f=x(1)*((xdata\/x(3))*exp(x(2)\/298)).^x(4).*(2.\/(exp((xdata\/x(3))*exp(x(2)\/298)).^x(5)-exp(-((xdata\/x(3))*exp(x(2)\/298))).^x(5)));xdata=(0:0.002:0.042)+0.001;ydata=[240.0843 350.6093 453.9179 552.5163 644....
最小二乘法在matlab中怎么实现啊?
matlab中用最小二乘拟合的常用函数有polyfit(多项式拟合)、nlinfit(非线性拟合)以及regress(多元线性回归)。自变量有2个或以上时,应变量一个,可以使用的有nlinfit和regress,线性时用regress,非线性时用nlinfit。对于进阶matlab使用者还有更多的选择,如拟合工具箱、fit函数、interp系列插值拟合等等。具...