Matlab多参数函数小弟想用三个变量p、q、s拟合出一条关于y的曲线,已知p、q、s各自关于y的关系(都是二次函数),该如何实现呢?大侠,好人做到底,送佛送上天,现在我告诉您y=x(1)*p.^2+x(2)*p+x(3)*q.
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/14 10:46:04
![Matlab多参数函数小弟想用三个变量p、q、s拟合出一条关于y的曲线,已知p、q、s各自关于y的关系(都是二次函数),该如何实现呢?大侠,好人做到底,送佛送上天,现在我告诉您y=x(1)*p.^2+x(2)*p+x(3)*q.](/uploads/image/z/1157213-29-3.jpg?t=Matlab%E5%A4%9A%E5%8F%82%E6%95%B0%E5%87%BD%E6%95%B0%E5%B0%8F%E5%BC%9F%E6%83%B3%E7%94%A8%E4%B8%89%E4%B8%AA%E5%8F%98%E9%87%8Fp%E3%80%81q%E3%80%81s%E6%8B%9F%E5%90%88%E5%87%BA%E4%B8%80%E6%9D%A1%E5%85%B3%E4%BA%8Ey%E7%9A%84%E6%9B%B2%E7%BA%BF%2C%E5%B7%B2%E7%9F%A5p%E3%80%81q%E3%80%81s%E5%90%84%E8%87%AA%E5%85%B3%E4%BA%8Ey%E7%9A%84%E5%85%B3%E7%B3%BB%EF%BC%88%E9%83%BD%E6%98%AF%E4%BA%8C%E6%AC%A1%E5%87%BD%E6%95%B0%EF%BC%89%2C%E8%AF%A5%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%91%A2%3F%E5%A4%A7%E4%BE%A0%2C%E5%A5%BD%E4%BA%BA%E5%81%9A%E5%88%B0%E5%BA%95%2C%E9%80%81%E4%BD%9B%E9%80%81%E4%B8%8A%E5%A4%A9%2C%E7%8E%B0%E5%9C%A8%E6%88%91%E5%91%8A%E8%AF%89%E6%82%A8y%3Dx%281%29%2Ap.%5E2%2Bx%282%29%2Ap%2Bx%283%29%2Aq.)
Matlab多参数函数小弟想用三个变量p、q、s拟合出一条关于y的曲线,已知p、q、s各自关于y的关系(都是二次函数),该如何实现呢?大侠,好人做到底,送佛送上天,现在我告诉您y=x(1)*p.^2+x(2)*p+x(3)*q.
Matlab多参数函数
小弟想用三个变量p、q、s拟合出一条关于y的曲线,已知p、q、s各自关于y的关系(都是二次函数),该如何实现呢?
大侠,好人做到底,送佛送上天,现在我告诉您y=x(1)*p.^2+x(2)*p+x(3)*q.^2+x(4)*q+x(5)*s.^2+x(6)*s+x(7);
p=[2500,2640,2700,2800,2850,2900,2950];
q=[360,600,500,500,600,600,500];
s=[0.038417,0.034986,0.0328752,0.031844,0.032493,0.034326,0.033605];
y=[1994,2080,1956,2055,1937,1750,1695];
请您赐教如何猜初值好吗?其他的我都搞定了.
Matlab多参数函数小弟想用三个变量p、q、s拟合出一条关于y的曲线,已知p、q、s各自关于y的关系(都是二次函数),该如何实现呢?大侠,好人做到底,送佛送上天,现在我告诉您y=x(1)*p.^2+x(2)*p+x(3)*q.
用函数lsqnonlin
你应该己知p,q,s,y,对吧?拟合只是找他们的关系而己,实际上就是 y = f(p,q,s)
你需要先建一个y_fun.m的function,比如
function res = y_fun(x);
global p q s y;
ymodel = f(p,q,s,x) .你的p,q,s二次函数
res = y - ymodel;
然后运行
x = lsqnonline('y_fun',x0)
x0 是你猜的拟合系数的初始值
x 是拟合系数的解
补充:
我之前说得不是很对,我改一下.
不过,我以前写的就是代码啊.我哭.我哪知道你的p,q,s二次函数什么型啊?比如
ymodel = x(1)*p.^2 + x(2)*q.^2 + x(3)*s.^2 + x(4);
这里面x就是四个项的系数,是你想拟合的.
原来是这么回事,我哭倒了,你早说不得了?这用得着这么麻烦么?几行命令就解决了.看哥哥我教你.
y=x(1)*p.^2+x(2)*p+x(3)*q.^2+x(4)*q+x(5)*s.^2+x(6)*s+x(7);
y,p,q,s已知,为列向量(不要用行,不方便).
SysModel = [ones(length(p),1) p.^2 p q.^2 q s.^2 s]
x = pinv(SysModel)*y
这样就直接算出X了,没那些费劲的事情.
但是你这个SysModel非常不稳定,原因在于p,q,s的数量级不一致,所以如果你想有效地进行pinv逆运算,最好把p,q,s全部化到一个数量级上,比如p/3000,q/1000,s*100,再进行上面运算.算出来的X,再重新乘以相应的系数就可以复原了.比如p.^2*x,那么(p/3000).^2*xnew,这个xnew你现在知道了,那么x就等于xnew/3000/3000.
慢慢消化吧~